Name: series-workflowfzkh9 Phase: Succeeded StartedAt: 2026-08-26 12:49:16 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[0] Phase: Succeeded StartedAt: 2026-08-26 12:49:16 +0000 UTC FinishedAt: 2026-08-26 12:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 12:49:16 +0000 UTC FinishedAt: 2026-08-26 12:54:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "SCSI" ], "series_id": "f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alauda_probe", "alauda_transport" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnIGZyb20gdGhlIGdsb2JhbCBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byB0aGUgcGVyLXBvcnQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AuIFRoZSBwcmV2aW91cyBsb2dpYyBzaGFyZWQgYSBzaW5nbGUgaW5pdGlhbGl6YXRpb24gZmxhZyBiZXR3ZWVuIHR3byBwb3J0cywgd2hpY2ggY291bGQgY2F1c2UgdGhlIGRyaXZlciB0byBza2lwIGluaXRpYWxpemF0aW9uIGZvciB0aGUgc2Vjb25kIHBvcnQgaWYgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgZHJpdmVyIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgZmllbGRzIChlLmcuLCAwIGNhcGFjaXR5LCBOVUxMIHBvaW50ZXJzIGZvciBibG9jayBtYXBzKSBmb3IgdGhlIHNlY29uZCBwb3J0LCBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRpdmlzaW9uIGJ5IHplcm8sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFNpbmNlIHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBza2lwcGVkIGluaXRpYWxpemF0aW9uIChsaWtlIE5VTEwgZGVyZWZzKSBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBPb3BzLCBLQVNBTiwgb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4mIzQzO1xuJiM0MztcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtNDcxLDYgJiM0Mzs0NzEsNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O05vIG1lZGlhLCBvciBkb29yIG9wZW5cXG5cJiMzNDspO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiYjNDM7XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTQ3OCwxMiAmIzQzOzQ3OSwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4mIzQzO1x0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcbiBcdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiYjNDM7XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tXHRcdFx0aW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1RPUkFHRV9BTEFVREEmIzM0OywKICAgICYjMzQ7VVNCX1NUT1JBR0UmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsYXVkYV9wcm9iZSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCmluZGV4IDY5MWZlNDcwMDljZjYuLjgwNzQ5MmY3NTRhNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwpAQCAtOTYsNiAmIzQzOzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKIAogCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLwogCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLwomIzQzOwomIzQzOwlib29sIG1lZGlhX2luaXRpYWxpemVkOwogfTsKIAogc3RydWN0IGFsYXVkYV9pbmZvIHsKQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHsKIAl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCiAJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCi0KLQlib29sIG1lZGlhX2luaXRpYWxpemVkOwogfTsKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSkmbHQ7Jmx0OzggKSApCkBAIC00NzEsNiAmIzQzOzQ3MSw3IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAkJfHwgKChzdGF0dXNbMV0gJmFtcDsgMHgwMSkgPT0gMCkpIHsKIAkJdXNiX3N0b3JfZGJnKHVzLCAmIzM0O05vIG1lZGlhLCBvciBkb29yIG9wZW5cbiYjMzQ7KTsKIAkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDc5LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKIAkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCXJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpOwogCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCi0JCQlpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IHRydWU7CiYjNDM7CQkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlpbmZvLSZndDtzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjID0gMHgyODsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjcSA9IDB4MDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQsIG1vdmluZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnIGZyb20gdGhlIGBhbGF1ZGFfaW5mb2Agc3RydWN0IHRvIGBhbGF1ZGFfbWVkaWFfaW5mb2AuIFRoZSBjb2RlIGFsc28gdXBkYXRlcyBgYWxhdWRhX2NoZWNrX21lZGlhYCB0byByZWZsZWN0IHRoaXMgY2hhbmdlIGFuZCBlbnN1cmVzIHRoZSBmbGFnIGlzIHByb3Blcmx5IHJlc2V0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGNvZGUgcGF0aCB3b3J0aCBwdXJzdWluZy4gSXQmIzM5O3MgYSBVU0Igc3RvcmFnZSBkcml2ZXIgZm9yIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtBbGF1ZGEuJiMzNDsgT2theSwgdGhhdCBuYXJyb3dzIGl0IGRvd24sIGFuZCBVU0IgZHJpdmVycyBhcmUgZGVmaW5pdGVseSBhdHRyYWN0aXZlIGZ1enppbmcgdGFyZ2V0cy4gV2UmIzM5O3ZlIGdvdCB0b29scyBmb3IgdGhhdDsgZHVtbXlfaGNkIG9yIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIGNvdWxkIHdvcmsgaGVyZS4KClRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBsb2NhdGluZyB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBLbm93aW5nIHRoZSBjb25maWcgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgdXNlZCBhbmQgZW5hYmxlIGl0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsYXVkYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWFsYXVkYS5cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBVU0IgU3RvcmFnZSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZ28tdG8gZm9yIHRoZXNlIHRoaW5ncyBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBpbiB0aGUgZHJpdmVyJiMzOTtzIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIGJlIGRlZmluZWQgZm9yIFVTQiBzdG9yYWdlLCBpbmNsdWRpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb3B0aW9uIGRlcGVuZHMgb24gb3RoZXIgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90XG4gMTIzOlx0XHQgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLlxuIDEyNDpcdFxuIDEyNTpcdFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXG4gMTI2Olx0XG4gMTI3Olx0Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuIDEyODpcdFx0dHJpc3RhdGUgXCYjMzQ7T2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XCYjMzQ7XG4gMTI5Olx0XHRoZWxwXG4gMTMwOlx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxuIDEzMTpcdFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cbiAxMzI6XHRcbiAxMzM6XHRcdCAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGhcbiAxMzQ6XHRcdCAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXG4gMTM3Olx0XG4gMTM4Olx0Y29uZmlnIFVTQl9TVE9SQUdFX09ORVRPVUNIXG4gMTM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVVNCIFN0b3JhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFuZ3Mgb2ZmIHRoZSBgVVNCX1NUT1JBR0VgIHBhcmVudC4gVGhhdCYjMzk7cyB0aGUga2V5LiBCZWZvcmUgSSBjYW4gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoICp0aGlzKiBmZWF0dXJlLCBJICpoYXZlKiB0byBnZXQgYSBncmlwIG9uIGBVU0JfU1RPUkFHRWAgaXRzZWxmLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbi4gVGltZSB0byBnbyBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyBpdHMgYnVpbGQgYW5kIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfU1RPUkFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O05PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9cJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjg6Y29uZmlnIFVTQl9TVE9SQUdFXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz0yNj1pZiBVU0JfU1RPUkFHRVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MzQ6Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz00Mj1jb25maWcgUkVBTFRFS19BVVRPUE1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NDc6Y29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUJcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0RhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7SVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjgwOmNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEyLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTE5OmNvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cdHRyaXN0YXRlIFwmIzM0O0xleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cdHRyaXN0YXRlIFwmIzM0O09seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTUyOmNvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTY0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1NBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNzgtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNvbmZpZyBVU0JfU1RPUkFHRWAgc2V0dGluZ3MuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB3aGF0IGl0IGRvZXMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBjb25maWd1cmUgdGhpcyBpZiBpdCByZWxpZXMgb24gc29tZSBmdW5kYW1lbnRhbCBwaWVjZSB0aGF0JiMzOTtzIGVpdGhlciBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBtYWtpbmcgc3VyZSBJIGtub3cgd2hpY2ggb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBjb25mbGljdHMgbWlnaHQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGRvbiYjMzk7dCBnbyBkb3duIGEgcmFiYml0IGhvbGUgdHJ5aW5nIHRvIGdldCBzb21ldGhpbmcgd29ya2luZyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGV4aXN0aW5nIHN5c3RlbS4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBhbGwgdGhlIGR1Y2tzIGFyZSBpbiBhIHJvdyBiZWZvcmUgSSBzdGFydCB0d2Vha2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29tbWVudCBcJiMzNDtOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIFVTQl9TVE9SQUdFXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gU0NTSVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXJcbiAgMTM6XHRcdCAgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXG4gIDE0Olx0XHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxuICAxNTpcdFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcbiAgMTY6XHRcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcbiAgMTc6XHRcdCAgYW5kIGNhcmQgcmVhZGVycy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAmIzM5O1NDU0kmIzM5OyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcbiAgMjA6XHRcdCAgcHJvYmFibHkgYWxzbyBuZWVkICYjMzk7U0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBQbGFuKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYFVTQl9TVE9SQUdFYCByZWxpZXMgb24gdGhlIGBTQ1NJYCBzdWJzeXN0ZW0uIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kuIE5vdywgdGhlIGNvbmZpZyBvcHRpb24gdG8gZW5hYmxlIHRoZSBzcGVjaWZpYyBwaWVjZSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGBVU0JfU1RPUkFHRV9BTEFVREFgLCBpcyB0aGUga2V5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBtb3N0IGxpa2VseSBiZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlucHV0cyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM4Mj1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Ni0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU4LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMzI9c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0OS1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtURVNUX1VOSVRfUkVBRFlcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOlx0XHRyZXR1cm4gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS1cdH1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTc6XHRcdHJjID0gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1OC1cdFx0aWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3Ny1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3ODpcdFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc5LVx0XHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTk1Olx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTYtXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBBbGF1ZGEgVHJhbnNwb3J0IERyaXZlcioqCgpBbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgY2xlYXIuIFdlJiMzOTt2ZSBnb3QgYGFsYXVkYV90cmFuc3BvcnRgIGFzIHRoZSBjZW50cmFsIGh1YiDigJMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBhY3R1YWwgZGF0YSBtb3ZlbWVudCB3aXRoaW4gdGhpcyBkcml2ZXIuIEl0JiMzOTtzIHRoZSBjb3JlIHRyYW5zcG9ydCBtZWNoYW5pc20sIHRoZSBtYWluIGV2ZW50LiBBbmQgZnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoYXQgaW1wbGllcyBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBhIGNyaXRpY2FsIHN1YnJvdXRpbmUsIGEgc3VwcG9ydGluZyBjYXN0IG1lbWJlciwgdGhhdCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGFzc2Vzc2luZyBtZWRpYSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgb3IgcGVyaGFwcyB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgaW50ZW5kZWQgbWVkaWEgdG8gaGFuZGxlIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24mIzM5O3MgbmVlZHMuIEl0IGlzIGxpa2VseSBhbiBlc3NlbnRpYWwgcHJlY29uZGl0aW9uIGNoZWNrIG9yIGEgcG9zdC10cmFuc3BvcnQgdmVyaWZpY2F0aW9uIHN0ZXAsIGVuc3VyaW5nIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHByb2Nlc3MgbWFuYWdlZCBieSBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoZSBpbnRlZ3JhdGlvbiBpcyB0eXBpY2FsIGFuZCBlZmZpY2llbnQgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMTI9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTMyOnN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzMy17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMjQxPXN0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI1My1cdHVzLVx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFwmIzM0O0FsYXVkYSBDb250cm9sL0J1bGtcJiMzNDs7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNTQ6XHR1cy1cdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjU1LVx0dXMtXHUwMDNldHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFsYXVkYV90cmFuc3BvcnRgIENhbGxiYWNrKioKCk9rYXksIHNvIGBhbGF1ZGFfdHJhbnNwb3J0YCBpcyB0aGUgYHVzLSZndDt0cmFuc3BvcnRgIGNhbGxiYWNrLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjcml0aWNhbCBmb3IgVVNCIHN0b3JhZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBtYWluIGludGVyZmFjZS4gR2l2ZW4gaXRzIGNvbm5lY3Rpb24gdG8gdGhlIFVTQiBzdG9yYWdlIGNvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSBpcyBhIHBhdGggaGVyZSwgc28gaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIGRlZXAgZGl2ZS4KCk5vdywgSSYjMzk7bSBub3RpbmcgYGFsYXVkYV9jaGVja19tZWRpYWAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGUgY29kZSBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLCBvciBwZXJoYXBzIGlzIGlubGluZWQgYnV0IHJlbWFpbnMgcmVsYXRpdmVseSBsYXJnZS4gSSB0aGluayBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgYWxhdWRhX2NoZWNrX21lZGlhYCwgc28gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaXRzIHNpemUgdG8gdW5kZXJzdGFuZCBpdHMgZm9vdHByaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NjpcdCAqL1xuIDQ1NzpcdHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiA0NTg6XHR7XG4gNDU5Olx0XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuIDQ2MDpcdFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXHUwMDNlaW9idWY7XG4gNDYxOlx0XHRpbnQgcmM7XG4gNDYyOlx0XG4gNDYzOlx0XHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xuIDQ2NDpcdFx0aWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xuIDQ2NTpcdFx0XHRzdGF0dXNbMF0gPSAweEYwO1x0LyogUHJldGVuZCB0aGVyZSYjMzk7cyBubyBtZWRpYSAqL1xuIDQ2NjpcdFx0XHRzdGF0dXNbMV0gPSAwO1xuIDQ2NzpcdFx0fVxuIDQ2ODpcdFxuIDQ2OTpcdFx0LyogQ2hlY2sgZm9yIG5vIG1lZGlhIG9yIGRvb3Igb3BlbiAqL1xuIDQ3MDpcdFx0aWYgKChzdGF0dXNbMF0gXHUwMDI2IDB4ODApIHx8ICgoc3RhdHVzWzBdIFx1MDAyNiAweDFGKSA9PSAweDEwKVxuIDQ3MTpcdFx0XHR8fCAoKHN0YXR1c1sxXSBcdTAwMjYgMHgwMSkgPT0gMCkpIHtcbiA0NzI6XHRcdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCYjMzQ7KTtcbiA0NzM6XHRcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gNDc0Olx0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gNDc1Olx0XHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiA0NzY6XHRcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIDQ3NzpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuIDQ3ODpcdFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDtcbiA0Nzk6XHRcdH1cbiA0ODA6XHRcbiA0ODE6XHRcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbiA0ODI6XHRcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG4gNDgzOlx0XHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiA0ODQ6XHRcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gNDg1Olx0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gNDg2Olx0XHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIDQ4NzpcdFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4gNDg4Olx0XHRcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIDQ4OTpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xuIDQ5MDpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XG4gNDkxOlx0XHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG4gNDkyOlx0XHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xuIDQ5MzpcdFx0fVxuIDQ5NDpcdFxuIDQ5NTpcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBbGF1ZGEgRHJpdmVyJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBmdW5jdGlvbiwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCBgYWxhdWRhX3RyYW5zcG9ydGAgaXMgYWxzbyBzdGF0aWMsIHlldCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBzdXNwZWN0IGl0IG1pZ2h0IGJlIHRoZSBrZXkuIExldCBtZSBjb25maXJtIGlmIGBhbGF1ZGFfdHJhbnNwb3J0YCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9sLiBBaGEsIHllcywgaXQgYXBwZWFycyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgU0NTSSBjb21tYW5kIHByb2Nlc3Npbmcgd2l0aGluIHRoaXMgZHJpdmVyLCBhcyBJIHN1c3BlY3RlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgd2hhdCYjMzk7cyB0aGlzIGBhbGF1ZGFfcHJvYmVgIGZ1bmN0aW9uIGRvaW5nIGhlcmU/IEl0IGNvdWxkIHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYWxhdWRhX3Byb2JlYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcbjEyNDE6XHRzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbjEyNDI6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuMTI0MzpcdHtcbjEyNDQ6XHRcdHN0cnVjdCB1c19kYXRhICp1cztcbjEyNDU6XHRcdGludCByZXN1bHQ7XG4xMjQ2Olx0XG4xMjQ3Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoXHUwMDI2dXMsIGludGYsIGlkLFxuMTI0ODpcdFx0XHRcdChpZCAtIGFsYXVkYV91c2JfaWRzKSAmIzQzOyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcbjEyNDk6XHRcdFx0XHRcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XG4xMjUwOlx0XHRpZiAocmVzdWx0KVxuMTI1MTpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTI1MjpcdFxuMTI1MzpcdFx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbjEyNTQ6XHRcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG4xMjU1Olx0XHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuMTI1NjpcdFx0dXMtXHUwMDNlbWF4X2x1biA9IDE7XG4xMjU3Olx0XG4xMjU4Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpO1xuMTI1OTpcdFx0cmV0dXJuIHJlc3VsdDtcbjEyNjA6XHR9XG4xMjYxOlx0XG4xMjYyOlx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XG4xMjYzOlx0XHQubmFtZSA9XHRcdERSVl9OQU1FLFxuMTI2NDpcdFx0LnByb2JlID1cdGFsYXVkYV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBBbGF1ZGEgZm9yIFVTQiBTdG9yYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGhhbmRsZSB0aGUgQWxhdWRhIHByb2JlIGFuZCB0cmFuc3BvcnQgZnVuY3Rpb25zLCBgYWxhdWRhX3Byb2JlYCBhbmQgYGFsYXVkYV90cmFuc3BvcnRgLiBUaG9zZSBzZWVtIGxpa2UgZ29vZCBrZXkgc3ltYm9scyB0byB3b3JrIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgc2V0LiBJIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgYFVTQl9TVE9SQUdFYC4gV2FpdC4uLiBJIHNlZSB0aGF0IGBVU0JfU1RPUkFHRWAgZGVwZW5kcyBvbiBgU0NTSWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSBgU0NTSWAgaXMgaW5jbHVkZWQgYXMgd2VsbC4gQWgsIEkgc2VlLCB0aGUgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgKnNob3VsZCogYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIEtidWlsZCBzeXN0ZW0gdG8gY29tcGlsZSBgYWxhdWRhLmNgLCBwcm92aWRlZCBgVVNCX1NUT1JBR0VgIGlzIGVuYWJsZWQgaW4gZ2VuZXJhbC4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTt2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MTk9dXNiLXN0b3JhZ2UtJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpICYjNDM7PSBkZWJ1Zy5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKVx0JiM0Mzs9IHVtcy1hbGF1ZGEub1xuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgJiM0Mzs9IHVtcy1jeXByZXNzLm9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVClcdFx0JiM0Mzs9IHVtcy11c2JhdC5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTM0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZTozNTp1bXMtYWxhdWRhLXlcdFx0Oj0gYWxhdWRhLm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzYtdW1zLWN5cHJlc3MteVx0XHQ6PSBjeXByZXNzX2F0YWNiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG9iamVjdGl2ZSBpcyB0byBlbmFibGUgYENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFgLiAgT2theSwgbG9va3MgbGlrZSB0aGF0IG9wdGlvbiBpcyB0aGUga2V5IHRvIGFjdGl2YXRpbmcgdGhlIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBidXQgaXQgaGluZ2VzIG9uIGEgZmV3IHByZXJlcXVpc2l0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19VU0JfU1RPUkFHRWAgaXMgYWxzbyBlbmFibGVkIGJlY2F1c2UgYENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFgIHJlcXVpcmVzIGl0LiBBaCwgYW5kIGBDT05GSUdfVVNCX1NUT1JBR0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ09ORklHX1NDU0lgLiBHb3QgaXQuIFNvIHRvIGVuc3VyZSBldmVyeXRoaW5nIGZ1bmN0aW9ucyBhcyBpdCBzaG91bGQsIG15IGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFVTQl9TVE9SQUdFX0FMQVVEQWAsIGBVU0JfU1RPUkFHRWAsIGFuZCBgU0NTSWAuCgpXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVVNCX1NUT1JBR0VgIHJlcXVpcmVzIGBVU0JgLiBJJiMzOTtsbCByZXZpc2l0IHRoZSBkZXBlbmRlbmNpZXMgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfU1RPUkFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O05PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9cJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjg6Y29uZmlnIFVTQl9TVE9SQUdFXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz0yNj1pZiBVU0JfU1RPUkFHRVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MzQ6Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz00Mj1jb25maWcgUkVBTFRFS19BVVRPUE1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NDc6Y29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUJcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0RhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7SVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjgwOmNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEyLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTE5OmNvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cdHRyaXN0YXRlIFwmIzM0O0xleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cdHRyaXN0YXRlIFwmIzM0O09seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTUyOmNvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTY0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1NBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNzgtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTYKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBVU0IgU3RvcmFnZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gYFVTQl9TVE9SQUdFYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgU0NTSWAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgdGhpcyB0eXBlIG9mIGRldmljZS4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgdGhvdWdoLCBsaWVzIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBBcHBhcmVudGx5LCB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiBob3cgYG1lZGlhX2luaXRpYWxpemVkYCBpcyBhY2Nlc3NlZDsgaXQmIzM5O3MgYmVpbmcgcHVsbGVkIGZyb20gdGhlIHdyb25nIHN0cnVjdHVyZSAoYGluZm9gIGluc3RlYWQgb2YgYE1FRElBX0lORk8odXMpYCkuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgY3Jhc2ggb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIOKAkyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaXNzdWUuIFRoaXMgaXMgY2xlYXJseSBhIGJ1ZyBmaXgsIGFuZCB0aGUgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBhIHN1YnRsZSByZWdyZXNzaW9uLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBzZXZlcml0eSBvZiBhIGNyYXNoIGluIHN0b3JhZ2UgY29kZSwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byByZWFsbHkgcHV0IGl0IHRocm91Z2ggaXRzIHBhY2VzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGFjY2VzcyBlcnJvci4gSWYgSSB3ZXJlIGZ1enppbmcgdGhpcywgSSYjMzk7ZCB3YW50IHRvIGZvY3VzIG9uIHRoZSBgYWxhdWRhX3RyYW5zcG9ydGAgYW5kIGBhbGF1ZGFfcHJvYmVgIHN5bWJvbHMgYXMgdGhvc2Ugc2VlbSBtb3N0IHJlbGF0ZWQgdG8gaG93IHRoZSBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCDigJMgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgVVNCX1NUT1JBR0VfQUxBVURBYCwgYFVTQl9TVE9SQUdFYCwgYW5kIGBTQ1NJYCB0byBtYWtlIHN1cmUgbXkgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ25zIGluY2x1ZGUgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBtZWRpYSBzdGF0ZXMgYW5kIGRldmljZSBkaXNjb25uZWN0aW9ucy9yZWNvbm5lY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciBieSBjb3JyZWN0bHkgYWNjZXNzaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIGZyb20gYE1FRElBX0lORk8odXMpYCBpbnN0ZWFkIG9mIGBpbmZvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcgZnJvbSB0aGUgZ2xvYmFsIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHRvIHRoZSBwZXItcG9ydCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNoYXJlZCBhIHNpbmdsZSBpbml0aWFsaXphdGlvbiBmbGFnIGJldHdlZW4gdHdvIHBvcnRzLCB3aGljaCBjb3VsZCBjYXVzZSB0aGUgZHJpdmVyIHRvIHNraXAgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBzZWNvbmQgcG9ydCBpZiB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSBkcml2ZXIgdXNpbmcgemVyby1pbml0aWFsaXplZCBmaWVsZHMgKGUuZy4sIDAgY2FwYWNpdHksIE5VTEwgcG9pbnRlcnMgZm9yIGJsb2NrIG1hcHMpIGZvciB0aGUgc2Vjb25kIHBvcnQsIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGl2aXNpb24gYnkgemVybywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIHNraXBwZWQgaW5pdGlhbGl6YXRpb24gKGxpa2UgTlVMTCBkZXJlZnMpIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIE9vcHMsIEtBU0FOLCBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA3YmI0YzMwYjBlOTAwYjQzYmNmZTk1OWNkZDhhYjk4YzA5ODU2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDEyOjUwOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTQ3MSw2ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwogCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gMHgwMjsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjID0gMHgzQTsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjcSA9IDB4MDA7CkBAIC00NzgsMTIgJiM0Mzs0NzksMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKQogCX0KIAogCS8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi8KLQlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIWluZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiYjNDM7CWlmIChzdGF0dXNbMF0gJmFtcDsgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHsKIAkJdXNiX3N0b3JfZGJnKHVzLCAmIzM0O01lZGlhIGNoYW5nZSBkZXRlY3RlZFxuJiMzNDspOwogCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJcmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7CiAJCWlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKLQkJCWluZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCQlNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOwogCQlpbmZvLSZndDtzZW5zZV9hc2MgPSAweDI4OwogCQlpbmZvLSZndDtzZW5zZV9hc2NxID0gMHgwMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIE1lZGlhIEluaXRpYWxpemF0aW9uIEZsYWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkb2luZyBzb21lIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHNoaWZ0aW5nIGl0IGZyb20gdGhlIG1haW4gYGFsYXVkYV9pbmZvYCBzdHJ1Y3R1cmUgdG8gYSBtb3JlIHNwZWNpZmljIGBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIGZvciBmdXR1cmUgZXhwYW5zaW9uIHJlbGF0ZWQgdG8gbWVkaWEtc3BlY2lmaWMgaW5mb3JtYXRpb24uCgpJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBpbiBsb2NhdGlvbi4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGluZm9gIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgc3RydWN0IGFuZCBub3csIHRvIGdldCB0aGUgbmV3IG9uZSwgaXQgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBgTUVESUFfSU5GTyh1cylgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSXMgYGFsYXVkYV9tZWRpYV9pbmZvYCBhICptZW1iZXIqIHdpdGhpbiBgYWxhdWRhX2luZm9gLCBvciBpcyBpdCBzb21laG93IGFjY2Vzc2VkIHRocm91Z2ggYHVzLSZndDtleHRyYWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMuIEJldHRlciBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgIGFuZCBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzdHJ1Y3RzIHN0cmFpZ2h0IGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FRElBX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cdTAwM2VzcmItXHUwMDNlZGV2aWNlLVx1MDAzZWx1blxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVx1MDAzZWV4dHJhKS1cdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zODI9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNTpcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2VjaGlwc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyNi1cdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Rm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNzpcdFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcdTAwM2VcdTAwM2UgMjApO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyOTpcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzA6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cdTAwM2VibG9ja3NoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzE6XHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDMyLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzM6XHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzQ6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZWJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNTpcdE1FRElBX0lORk8odXMpLnpvbmVzaXplID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2V6b25lc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM3Olx0TUVESUFfSU5GTyh1cykudXpvbmVzaXplID0gKCgxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdCkgLyAxMjgpICogMTI1O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MDpcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MTpcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDI6XHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDM6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDQ6XHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ1LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3Mi1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDczOlx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDc0Olx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzUtXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDgyOlx0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDgzLVx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O01lZGlhIGNoYW5nZSBkZXRlY3RlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NDpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NTpcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg2LVx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4ODpcdFx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4OS1cdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTU3MD1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTc0LVx0aW50IGksIGo7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU3NTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1NzY6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NzctXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCwgbGJhX3JlYWwsIGJsb2NrbnVtO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2Nzg6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID0gbGJhX3RvX3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc5Olx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9IHBiYV90b19sYmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY4MC1cdHJlc3VsdCA9IDA7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz02OTQ9c3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk1LXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njk2Olx0aWYgKE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPT0gTlVMTFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTc6XHRcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk4LVx0XHRhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NzMzPXN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc0OS1cdHJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtXHUwMDNlcmVjdl9idWxrX3BpcGUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc1MDpcdFx0ZGF0YSwgKE1FRElBX0lORk8odXMpLnBhZ2VzaXplICYjNDM7IDY0KSAqIHBhZ2VzLCBOVUxMKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUxLX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc1OT1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Mi1cdGludCBpLCByYztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzYzOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2NC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc4ND1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDAtXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVx1MDAzZXdyX2VwLCBkYXRhLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDE6XHRcdChNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSAmIzQzOyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMi1cdFx0TlVMTCk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04MTI9c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgxOS1cdGludCBpLCByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMDpcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MjI6XHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIzOlx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI0LVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzMS1cdGlmIChwYmEgPT0gMSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODQwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDE6XHRuZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0Mi1cdGlmICghbmV3X3BiYSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODk5LVx0bmV3X3BiYV9vZmZzZXQgPSBuZXdfcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkwMDpcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MDE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdID0gbmV3X3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTAyLVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtSZW1hcHBlZCBMQkEgJWQgdG8gUEJBICVkXFxuXCYjMzQ7LCBsYmEsIG5ld19wYmEpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTA4LVx0XHRcdHJldHVybiByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkwOTpcdFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtwYmFfb2Zmc2V0XSA9IFVOREVGO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MTAtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz05MTg9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTIzLVx0dW5zaWduZWQgaW50IHBhZ2UsIGxlbiwgb2Zmc2V0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjQ6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaGlmdCA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNjpcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNzpcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Mjg6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjktXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ2LVx0bGJhID0gYWRkcmVzcyBcdTAwM2VcdTAwM2UgYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTQ3Olx0cGFnZSA9IChhZGRyZXNzIFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDg6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChibG9ja3NoaWZ0ICYjNDM7IHBhZ2VzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0OS1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3My1cdFx0LyogRmluZCB3aGVyZSB0aGlzIGxiYSBsaXZlcyBvbiBkaXNrICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk3NDpcdFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc1LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAxMz1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAxNy1cdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxODpcdHVuc2lnbmVkIGludCBibG9ja3NoaWZ0ID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxOTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjA6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDIxOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjItXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OC1cdGxiYSA9IGFkZHJlc3MgXHUwMDNlXHUwMDNlIGJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDk6XHRwYWdlID0gKGFkZHJlc3MgXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTA6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChwYWdlc2hpZnQgJiM0MzsgYmxvY2tzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTEtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTMyPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XHRcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjI6XHRcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTY0Olx0XHRjYXBhY2l0eSA9IG51bV96b25lcyAqIE1FRElBX0lORk8odXMpLnV6b25lc2l6ZVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTY1Olx0XHRcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIEZsYWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhZGp1c3RtZW50LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgYm9vbGVhbiBmbGFnIGZyb20gdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byB0aGUgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGNvbmZpcm1zIHRoYXQsIHNoaWZ0aW5nIHRoZSBmaWVsZCBkb3duIGludG8gdGhlIG1lZGlhLXNwZWNpZmljIGluZm8sIGFzIGludGVuZGVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBhbGF1ZGFfaW5mb2AgbGlrZWx5IGNvbnRhaW5zIGRldmljZS1sZXZlbCBpbmZvcm1hdGlvbiwgd2hpbGUgYGFsYXVkYV9tZWRpYV9pbmZvYCBjbGVhcmx5IGRlYWxzIHdpdGggdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgbWVkaWEgaW5zdGFuY2Ugb3IsIGFzIHRoZSBgcG9ydFsyXWAgYXJyYXkgc3VnZ2VzdHMsIGEgc3BlY2lmaWMgcG9ydCBvbiB0aGUgZGV2aWNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSXQgc2VlbXMgdW5saWtlbHksIGFzIHdlJiMzOTtyZSBqdXN0IHJlbG9jYXRpbmcgYSBib29sZWFuIGZsYWcuIFRoZSBjb2RlIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIHVzZXMgdGhpcyBmbGFnIHRvIGRldGVybWluZSBpZiBtZWRpYSBpcyBpbml0aWFsaXplZC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGFsbG9jYXRpb24gYXMgaXMgdHlwaWNhbCBmb3IgVVNCIHN0b3JhZ2UtcmVsYXRlZCBzdHJ1Y3R1cmVzLCB0aGUgbmV3IGZpZWxkIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdXRvbWF0aWNhbGx5LiBUaGUgbG9naWMgaW4gYGFsYXVkYV9jaGVja19tZWRpYWAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1lZGlhIGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtZWRpYSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYXJlZCBpZiBtZWRpYSBpcyByZW1vdmVkIG9yIGNoYW5nZWQuIEl0IHNldHMgdGhlIGZsYWcgdG8gYGZhbHNlYCB3aGVuIHRoZSBtZWRpYSBpcyBub3QgaW5pdGlhbGl6ZWQgb3Igd2hlbiBtZWRpYSBpcyBjaGFuZ2VkLiBUaGVyZWZvcmUsIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgZmllbGQgc2hvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5IGFmdGVyIHRoZSBwYXRjaC4KCkkgd2lsbCBkb3VibGUtY2hlY2sgaG93IGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFjdHVhbGx5IGFsbG9jYXRlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbiBhYm91dCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIHZhbGlkLCBidXQgZnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gYW5kIHNlbnNpYmxlIGNoYW5nZSB0byBpbXByb3ZlIHRoZSBncmFudWxhcml0eSBvZiB0aGUgbWVkaWEgaW5pdGlhbGl6YXRpb24gdHJhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmFsYXVkYV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMTI9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTE3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTE4Olx0dXMtXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTExOS1cdGlmICghdXMtXHUwMDNlZXh0cmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZWRpYV9pbml0aWFsaXplZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04NT1zdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMDpcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMS19O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3My1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODEtXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4MjpcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4My1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODQtXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cdFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XHRcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODktXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODcKCQkJCQkJCW91dHB1dDogMjI2CgkJCQkJCQl0aG91Z2h0czogMTY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQWxhdWRhIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGFza2VkIHdpdGggcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGJvb2xlYW4gZnJvbSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGNvbnRhaW5zIGFuIGFycmF5IG9mIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYmUgYSBkdWFsLXBvcnQgZGV2aWNlLgoKTGV0JiMzOTtzIGRpc3NlY3QgdGhlIGNoYW5nZS4gVGhlIGluaXRpYWwgc3RydWN0dXJlIGRlZmluaXRpb24gaGFkIGBtZWRpYV9pbml0aWFsaXplZGAgYXQgdGhlIGdsb2JhbCBsZXZlbCBmb3IgdGhlIGRldmljZS4gIFRoZSBwYXRjaCByaWdodGx5IG1vdmVzIGl0ICppbnRvKiB0aGUgcGVyLXBvcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlLiAgTXkgaHlwb3RoZXNpcyBpcyB0aGUgb3JpZ2luYWwgY29kZSBzdWZmZXJlZCBmcm9tIGEgYnVnIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBvbmUgcG9ydCB3YXMgYWZmZWN0aW5nIHRoZSBhc3N1bWVkIHN0YXRlIG9mIHRoZSBvdGhlci4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIHRyYWNrIHRoZSBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0dXMgcGVyIHBvcnQsIG5vdCBmb3IgdGhlIGVudGlyZSBkZXZpY2UuCgpOb3csIGxvb2tpbmcgYXQgYGFsYXVkYV9jaGVja19tZWRpYWAsIHRoZSBjb2RlIHByZXZpb3VzbHkgY2hlY2tlZCBhIGdsb2JhbCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuICBXaXRoIHRoaXMgY2hhbmdlLCBpdCBjaGVja3MgdGhlIHBvcnQtc3BlY2lmaWMgZmxhZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBiZWhhdmlvci4gV2hlbiBtZWRpYSBpcyBub3QgcHJlc2VudCBvciBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgd2UgZnJlZSB0aGUgbWFwcyBhbmQgKmV4cGxpY2l0bHkqIHNldCBgbWVkaWFfaW5pdGlhbGl6ZWRgIHRvIGZhbHNlLiBUaGVuLCBpZiB0aGVyZSYjMzk7cyBhIG1lZGlhIGNoYW5nZSwgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBpdC4gVGhlIGZpeCBleHBsaWNpdGx5IHJlc2V0cyB0aGUgbWVkaWEgaW5pdGlhbGl6ZWQgZmxhZyB0byBmYWxzZS4gIENyaXRpY2FsbHksIGluaXRpYWxpemF0aW9uICpzZXRzKiB0aGUgZmxhZyB0byB0cnVlLgoKVGhlIGtleSBoZXJlIGlzIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQuIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBtZWFuaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIHN0YXJ0cyBhdCB6ZXJvIChmYWxzZSkuICBUaGUgZml4IGlzIHByb2JhYmx5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGluaXRpYWxpemVzIHRoZSBwb3J0cyBpbmRlcGVuZGVudGx5LCBhbmQgdGhhdCB0aGUgc3RhdGUgb2Ygb25lIHBvcnQgZG9lc24mIzM5O3QgaW1wcm9wZXJseSBhZmZlY3QgdGhlIG90aGVyLgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoaXMgbWlnaHQgaW52b2x2ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBidXQgSSYjMzk7bSBubyBsb25nZXIgc3VyZSBvZiB0aGF0LiBHaXZlbiB0aGF0IGBremFsbG9jYCBpcyBiZWluZyB1c2VkLCBldmVyeXRoaW5nIGlzIHplcm8taW5pdGlhbGl6ZWQuIEkgd2FzIG1vbWVudGFyaWx5IGNvbmZ1c2VkIGJ5IHRoZSBub24tc3RhbmRhcmQgYGt6YWxsb2Nfb2JqYCwgYnV0IGBremFsbG9jYCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsLgoKVGhlIHByZXZpb3VzIGJ1ZyBtaWdodCBoYXZlIGxlZCB0byBjYXNlcyB3aGVyZSBhIHBvcnQmIzM5O3MgZGF0YSBtYXBzIHdlcmUgbmV2ZXIgcHJvcGVybHkgaW5pdGlhbGl6ZWQuICBJZiBgbWVkaWFfaW5pdGlhbGl6ZWRgIHdhcyBpbmNvcnJlY3RseSB0cnVlLCB0aGUgZHJpdmVyIHdvdWxkIGFzc3VtZSB0aGUgbWFwcyB3ZXJlIHZhbGlkIHdoZW4gdGhleSB3ZXJlIGluIGZhY3QgbnVsbC4gQWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWFwcyBtZWFucyBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIGtlcm5lbCBwYW5pYyAoYW4gT29wcyksIG9yLCBtb3JlIGxpa2VseSwgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBGdXJ0aGVybW9yZSwgY2FwYWNpdHkgb3Igb3RoZXIgdmFsdWVzIHdvdWxkIGJlIHplcm8uCgpTbywgdGhpcyBjaGFuZ2UgZml4ZXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSBtZWRpYSBpbml0aWFsaXphdGlvbiB3YXMgdHJhY2tlZCBpbmNvcnJlY3RseSBhbmQgcHJvYmFibHkgc2hhcmVkIGFjcm9zcyB0aGUgZHVhbCBwb3J0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBkaXZpc2lvbiBieSB6ZXJvIGVycm9ycywgd2hpY2ggYXJlICphbHJlYWR5KiBhZGRyZXNzZWQgYnkgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChLQVNBTiwga2VybmVsIE9vcHMsIGFuZCBwb3RlbnRpYWxseSBVQlNBTikuCgpJbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBsb2dpYyBjb3JyZWN0aW9uLCBhbmQgdGhlcmUgaXMgbm8gb2J2aW91cyByaXNrIG9mICpyZWFkaW5nKiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDozNC43NDAyMzcxNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwNDA5MDY5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NUT1JBR0VfQUxBVURBXCIsXG4gICAgXCJVU0JfU1RPUkFHRVwiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsYXVkYV9wcm9iZVwiLFxuICAgIFwiYWxhdWRhX3RyYW5zcG9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6MzQuNzQwMjQwODE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMTI2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjA3YmI0YzMwYjBlOTAwYjQzYmNmZTk1OWNkZDhhYjk4YzA5ODU2ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbmluZGV4IDY5MWZlNDcwMDljZjYuLjgwNzQ5MmY3NTRhNzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcXG5AQCAtOTYsNiArOTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xcbiBcXG4gXFx0dTE2ICoqbGJhX3RvX3BiYTtcXHRcXHQvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqL1xcbiBcXHR1MTYgKipwYmFfdG9fbGJhO1xcdFxcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXFxuK1xcbitcXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xcbiB9O1xcbiBcXG4gc3RydWN0IGFsYXVkYV9pbmZvIHtcXG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuIFxcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzYztcXHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxO1xcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cXG4tXFxuLVxcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuIH07XFxuIFxcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVxcdTAwM2NcXHUwMDNjOCApIClcXG5AQCAtNDcxLDYgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0XFx0fHwgKChzdGF0dXNbMV0gXFx1MDAyNiAweDAxKSA9PSAwKSkge1xcbiBcXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxcXG5cXFwiKTtcXG4gXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbitcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG5AQCAtNDc4LDEyICs0NzksMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuLVxcdGlmIChzdGF0dXNbMF0gXFx1MDAyNiAweDA4IHx8ICFpbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xcbitcXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4gXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbitcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiBcXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG4gXFx0XFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuK1xcdFxcdFxcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDozNS45MzIwMDU2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Njg2Nzk5NTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDdiYjRjMzBiMGU5MDBiNDNiY2ZlOTU5Y2RkOGFiOThjMDk4NTZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTI6NTA6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICs5Niw4IEBAIHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XG4gXG4gXHR1MTYgKipsYmFfdG9fcGJhO1x0XHQvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqL1xuIFx0dTE2ICoqcGJhX3RvX2xiYTtcdFx0LyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi9cbitcbitcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuIFx0dW5zaWduZWQgY2hhciBzZW5zZV9rZXk7XG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzYztcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqL1xuLVxuLVx0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpXHUwMDNjXHUwMDNjOCApIClcbkBAIC00NzEsNiArNDcxLDcgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHR8fCAoKHN0YXR1c1sxXSBcdTAwMjYgMHgwMSkgPT0gMCkpIHtcbiBcdFx0dXNiX3N0b3JfZGJnKHVzLCBcIk5vIG1lZGlhLCBvciBkb29yIG9wZW5cXG5cIik7XG4gXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC00NzgsMTIgKzQ3OSwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4rXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCIpO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XG4gXHRcdGlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi1cdFx0XHRpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgyODtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjM1LjkzMjAwNjc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyODYxOTIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHByZXR0eSBmb2N1c2VkLCBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBgYWxhdWRhX2luZm9gIHN0cnVjdCB0byBgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgY29kZSBhbHNvIHVwZGF0ZXMgYGFsYXVkYV9jaGVja19tZWRpYWAgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBhbmQgZW5zdXJlcyB0aGUgZmxhZyBpcyBwcm9wZXJseSByZXNldCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGNvZGUgcGF0aCB3b3J0aCBwdXJzdWluZy4gSXQncyBhIFVTQiBzdG9yYWdlIGRyaXZlciBmb3Igc29tZXRoaW5nIGNhbGxlZCBcIkFsYXVkYS5cIiBPa2F5LCB0aGF0IG5hcnJvd3MgaXQgZG93biwgYW5kIFVTQiBkcml2ZXJzIGFyZSBkZWZpbml0ZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXRzLiBXZSd2ZSBnb3QgdG9vbHMgZm9yIHRoYXQ7IGR1bW15X2hjZCBvciBzeXprYWxsZXIncyBVU0IgZnV6emVyIGNvdWxkIHdvcmsgaGVyZS5cblxuVGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGxvY2F0aW5nIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgdGhlIGNvbmZpZyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGRyaXZlciBpcyB1c2VkIGFuZCBlbmFibGUgaXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0MS4yMTgyMDE4OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjU1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxhdWRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NDEuMjYyODUxOTExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNzU1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlnIEknbSBsb29raW5nIGF0IGlzIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZ28tdG8gZm9yIHRoZXNlIHRoaW5ncyBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIGJlIGRlZmluZWQgZm9yIFVTQiBzdG9yYWdlLCBpbmNsdWRpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuIExldCdzIHNlZSBpZiB0aGlzIG9wdGlvbiBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0NC43NzA0MTQyNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdFxcbiAxMjM6XFx0XFx0ICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci5cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4gMTI4OlxcdFxcdHRyaXN0YXRlIFxcXCJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnRcXFwiXFxuIDEyOTpcXHRcXHRoZWxwXFxuIDEzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxcbiAxMzE6XFx0XFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aFxcbiAxMzQ6XFx0XFx0ICBYRCBhbmQgU21hcnRNZWRpYSBjYXJkcy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLlxcbiAxMzc6XFx0XFxuIDEzODpcXHRjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG4gMTM5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjQ0Ljc3MDQ3MTczMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEyNzk0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhbmdzIG9mZiB0aGUgYFVTQl9TVE9SQUdFYCBwYXJlbnQuIFRoYXQncyB0aGUga2V5LiBCZWZvcmUgSSBjYW4gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggKnRoaXMqIGZlYXR1cmUsIEkgKmhhdmUqIHRvIGdldCBhIGdyaXAgb24gYFVTQl9TVE9SQUdFYCBpdHNlbGYuIEl0J3MgdGhlIGZvdW5kYXRpb24uIFRpbWUgdG8gZ28gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoYXQncyBjb250cm9sbGluZyBpdHMgYnVpbGQgYW5kIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0OC4zMzE3NTI5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTg2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9TVE9SQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFxcXCJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo4OmNvbmZpZyBVU0JfU1RPUkFHRVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy05LVxcdHRyaXN0YXRlIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MjY9aWYgVVNCX1NUT1JBR0VcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMjctXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjM0OmNvbmZpZyBVU0JfU1RPUkFHRV9SRUFMVEVLXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIENhcmQgUmVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9NDI9Y29uZmlnIFJFQUxURUtfQVVUT1BNXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjQ3OmNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNTQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjU1OmNvbmZpZyBVU0JfU1RPUkFHRV9GUkVFQ09NXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo4MDpjb25maWcgVVNCX1NUT1JBR0VfVVNCQVRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTAyOmNvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZSBcXFwiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExOTpjb25maWcgVVNCX1NUT1JBR0VfSlVNUFNIT1RcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTIwLVxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEyNzpjb25maWcgVVNCX1NUT1JBR0VfQUxBVURBXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cXHR0cmlzdGF0ZSBcXFwiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzktXFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE1Mjpjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTUzLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTY1OmNvbmZpZyBVU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiU0FUIGVtdWxhdGlvbiBvbiBDeXByZXNzIFVTQi9BVEEgQnJpZGdlIHdpdGggQVRBQ0JcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTc2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTc4LVxcdHRyaXN0YXRlIFxcXCJVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjQ4LjM3NzMxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTE2NTA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBVU0IgU3RvcmFnZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNvbmZpZyBVU0JfU1RPUkFHRWAgc2V0dGluZ3MuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB3aGF0IGl0IGRvZXMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBjb25maWd1cmUgdGhpcyBpZiBpdCByZWxpZXMgb24gc29tZSBmdW5kYW1lbnRhbCBwaWVjZSB0aGF0J3MgZWl0aGVyIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgbWFraW5nIHN1cmUgSSBrbm93IHdoaWNoIG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgY29uZmxpY3RzIG1pZ2h0IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSwgc28gSSBkb24ndCBnbyBkb3duIGEgcmFiYml0IGhvbGUgdHJ5aW5nIHRvIGdldCBzb21ldGhpbmcgd29ya2luZyB0aGF0J3MgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZXhpc3Rpbmcgc3lzdGVtLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIGFsbCB0aGUgZHVja3MgYXJlIGluIGEgcm93IGJlZm9yZSBJIHN0YXJ0IHR3ZWFraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NTIuMTY4OTY3OTk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29tbWVudCBcXFwiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIFVTQl9TVE9SQUdFXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBTQ1NJXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgbWFzcyBzdG9yYWdlIGRldmljZXMgdG8geW91clxcbiAgMTM6XFx0XFx0ICBjb21wdXRlcidzIFVTQiBwb3J0LiBUaGlzIGlzIHRoZSBkcml2ZXIgeW91IG5lZWQgZm9yIFVTQlxcbiAgMTQ6XFx0XFx0ICBmbG9wcHkgZHJpdmVzLCBVU0IgaGFyZCBkaXNrcywgVVNCIHRhcGUgZHJpdmVzLCBVU0IgQ0QtUk9NcyxcXG4gIDE1OlxcdFxcdCAgVVNCIGZsYXNoIGRldmljZXMsIGFuZCBtZW1vcnkgc3RpY2tzLCBhbG9uZyB3aXRoXFxuICAxNjpcXHRcXHQgIHNpbWlsYXIgZGV2aWNlcy4gVGhpcyBkcml2ZXIgbWF5IGFsc28gYmUgdXNlZCBmb3Igc29tZSBjYW1lcmFzXFxuICAxNzpcXHRcXHQgIGFuZCBjYXJkIHJlYWRlcnMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAnU0NTSScgc3VwcG9ydCBiZWluZyBlbmFibGVkLCBidXQgeW91XFxuICAyMDpcXHRcXHQgIHByb2JhYmx5IGFsc28gbmVlZCAnU0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjUyLjE2OTAzMzU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY3OTA3NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgUGxhbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYFVTQl9TVE9SQUdFYCByZWxpZXMgb24gdGhlIGBTQ1NJYCBzdWJzeXN0ZW0uIE1ha2VzIHNlbnNlLCB0aGF0J3MgYSBjb21tb24gZGVwZW5kZW5jeS4gTm93LCB0aGUgY29uZmlnIG9wdGlvbiB0byBlbmFibGUgdGhlIHNwZWNpZmljIHBpZWNlIEknbSBpbnRlcmVzdGVkIGluLCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgaXMgdGhlIGtleS4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGVyZWZvcmUsIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGFsYXVkYV9jaGVja19tZWRpYWAuIFRoYXQncyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdpbGwgbW9zdCBsaWtlbHkgYmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlucHV0cyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NTYuODM2OTQzMzk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM4Mj1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU2LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMzI9c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ5LVxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlRFU1RfVU5JVF9SRUFEWVxcXFxuXFxcIik7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOlxcdFxcdHJldHVybiBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTU3OlxcdFxcdHJjID0gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTgtXFx0XFx0aWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3ODpcXHRcXHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc5LVxcdFxcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExOTU6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5Ni1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjU2Ljg4MjU3MjMwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkwMzU4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgQWxhdWRhIFRyYW5zcG9ydCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgY2xlYXIuIFdlJ3ZlIGdvdCBgYWxhdWRhX3RyYW5zcG9ydGAgYXMgdGhlIGNlbnRyYWwgaHViIOKAkyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBkYXRhIG1vdmVtZW50IHdpdGhpbiB0aGlzIGRyaXZlci4gSXQncyB0aGUgY29yZSB0cmFuc3BvcnQgbWVjaGFuaXNtLCB0aGUgbWFpbiBldmVudC4gQW5kIGZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsYXVkYV90cmFuc3BvcnRgLiBUaGF0IGltcGxpZXMgYGFsYXVkYV9jaGVja19tZWRpYWAgaXMgYSBjcml0aWNhbCBzdWJyb3V0aW5lLCBhIHN1cHBvcnRpbmcgY2FzdCBtZW1iZXIsIHRoYXQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhc3Nlc3NpbmcgbWVkaWEgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIG9yIHBlcmhhcHMgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGludGVuZGVkIG1lZGlhIHRvIGhhbmRsZSB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uJ3MgbmVlZHMuIEl0IGlzIGxpa2VseSBhbiBlc3NlbnRpYWwgcHJlY29uZGl0aW9uIGNoZWNrIG9yIGEgcG9zdC10cmFuc3BvcnQgdmVyaWZpY2F0aW9uIHN0ZXAsIGVuc3VyaW5nIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHByb2Nlc3MgbWFuYWdlZCBieSBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoZSBpbnRlZ3JhdGlvbiBpcyB0eXBpY2FsIGFuZCBlZmZpY2llbnQgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTE6MDEuMDcyOTMzNjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgwNjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTEyPXN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI0MT1zdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI1My1cXHR1cy1cXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXFxcIkFsYXVkYSBDb250cm9sL0J1bGtcXFwiO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI1NDpcXHR1cy1cXHUwMDNldHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNTUtXFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjAxLjExNjc0MjYzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1NTQ2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFsYXVkYV90cmFuc3BvcnRgIENhbGxiYWNrKipcblxuT2theSwgc28gYGFsYXVkYV90cmFuc3BvcnRgIGlzIHRoZSBgdXMtXHUwMDNldHJhbnNwb3J0YCBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgY3JpdGljYWwgZm9yIFVTQiBzdG9yYWdlLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBtYWluIGludGVyZmFjZS4gR2l2ZW4gaXRzIGNvbm5lY3Rpb24gdG8gdGhlIFVTQiBzdG9yYWdlIGNvcmUsIGl0J3MgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBub3cuIE15IGludHVpdGlvbiBzYXlzIHRoZXJlIGlzIGEgcGF0aCBoZXJlLCBzbyBpdCdzIHRoZSByaWdodCBjaG9pY2UgZm9yIHRoZSBkZWVwIGRpdmUuXG5cbk5vdywgSSdtIG5vdGluZyBgYWxhdWRhX2NoZWNrX21lZGlhYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgc3VnZ2VzdHMgaXQncyAqbm90KiBpbmxpbmVkLCBvciBwZXJoYXBzIGlzIGlubGluZWQgYnV0IHJlbWFpbnMgcmVsYXRpdmVseSBsYXJnZS4gSSB0aGluayBpdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBzbyBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGl0cyBzaXplIHRvIHVuZGVyc3RhbmQgaXRzIGZvb3RwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjA2LjIzMjI5MTEyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1NjpcXHQgKi9cXG4gNDU3OlxcdHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gNDU4OlxcdHtcXG4gNDU5OlxcdFxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXFx1MDAzZWV4dHJhO1xcbiA0NjA6XFx0XFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbiA0NjE6XFx0XFx0aW50IHJjO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xcbiA0NjQ6XFx0XFx0aWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xcbiA0NjU6XFx0XFx0XFx0c3RhdHVzWzBdID0gMHhGMDtcXHQvKiBQcmV0ZW5kIHRoZXJlJ3Mgbm8gbWVkaWEgKi9cXG4gNDY2OlxcdFxcdFxcdHN0YXR1c1sxXSA9IDA7XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdC8qIENoZWNrIGZvciBubyBtZWRpYSBvciBkb29yIG9wZW4gKi9cXG4gNDcwOlxcdFxcdGlmICgoc3RhdHVzWzBdIFxcdTAwMjYgMHg4MCkgfHwgKChzdGF0dXNbMF0gXFx1MDAyNiAweDFGKSA9PSAweDEwKVxcbiA0NzE6XFx0XFx0XFx0fHwgKChzdGF0dXNbMV0gXFx1MDAyNiAweDAxKSA9PSAwKSkge1xcbiA0NzI6XFx0XFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcXFxuXFxcIik7XFxuIDQ3MzpcXHRcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIDQ3NDpcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA0NzU6XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcXG4gNDc2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XFxuIDQ3NzpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG4gNDc4OlxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xcbiA0Nzk6XFx0XFx0fVxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRcXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuIDQ4MjpcXHRcXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4gNDgzOlxcdFxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIGNoYW5nZSBkZXRlY3RlZFxcXFxuXFxcIik7XFxuIDQ4NDpcXHRcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIDQ4NTpcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA0ODY6XFx0XFx0XFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XFxuIDQ4NzpcXHRcXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuIDQ4ODpcXHRcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuIDQ4OTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcXG4gNDkwOlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XFxuIDQ5MTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG4gNDkyOlxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xcbiA0OTM6XFx0XFx0fVxcbiA0OTQ6XFx0XFxuIDQ5NTpcXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjA2LjIzMjM4OTAyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI0OTg3MjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsYXVkYSBEcml2ZXIncyBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBmdW5jdGlvbiwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCBgYWxhdWRhX3RyYW5zcG9ydGAgaXMgYWxzbyBzdGF0aWMsIHlldCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgdGhlIGtleS4gTGV0IG1lIGNvbmZpcm0gaWYgYGFsYXVkYV90cmFuc3BvcnRgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEFoYSwgeWVzLCBpdCBhcHBlYXJzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBTQ1NJIGNvbW1hbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBkcml2ZXIsIGFzIEkgc3VzcGVjdGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIHdoYXQncyB0aGlzIGBhbGF1ZGFfcHJvYmVgIGZ1bmN0aW9uIGRvaW5nIGhlcmU/IEl0IGNvdWxkIHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBkZWx2ZSBpbnRvIGBhbGF1ZGFfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjIxLjQ4MjI2NjgxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcbjEyNDE6XFx0c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuMTI0MjpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbjEyNDM6XFx0e1xcbjEyNDQ6XFx0XFx0c3RydWN0IHVzX2RhdGEgKnVzO1xcbjEyNDU6XFx0XFx0aW50IHJlc3VsdDtcXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuMTI0ODpcXHRcXHRcXHRcXHQoaWQgLSBhbGF1ZGFfdXNiX2lkcykgKyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcXG4xMjQ5OlxcdFxcdFxcdFxcdFxcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XFxuMTI1MDpcXHRcXHRpZiAocmVzdWx0KVxcbjEyNTE6XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4xMjUyOlxcdFxcbjEyNTM6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFxcXCJBbGF1ZGEgQ29udHJvbC9CdWxrXFxcIjtcXG4xMjU0OlxcdFxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbjEyNTU6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuMTI1NjpcXHRcXHR1cy1cXHUwMDNlbWF4X2x1biA9IDE7XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7XFxuMTI1OTpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjEyNjA6XFx0fVxcbjEyNjE6XFx0XFxuMTI2MjpcXHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcXG4xMjYzOlxcdFxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG4xMjY0OlxcdFxcdC5wcm9iZSA9XFx0YWxhdWRhX3Byb2JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MToyMS40ODI0MDY3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNjI3MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBBbGF1ZGEgZm9yIFVTQiBTdG9yYWdlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBoYW5kbGUgdGhlIEFsYXVkYSBwcm9iZSBhbmQgdHJhbnNwb3J0IGZ1bmN0aW9ucywgYGFsYXVkYV9wcm9iZWAgYW5kIGBhbGF1ZGFfdHJhbnNwb3J0YC4gVGhvc2Ugc2VlbSBsaWtlIGdvb2Qga2V5IHN5bWJvbHMgdG8gd29yayB3aXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHNldC4gSSBrbm93IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFVTQl9TVE9SQUdFX0FMQVVEQWAgYW5kIGBVU0JfU1RPUkFHRWAuIFdhaXQuLi4gSSBzZWUgdGhhdCBgVVNCX1NUT1JBR0VgIGRlcGVuZHMgb24gYFNDU0lgLCBzbyBJIHNob3VsZCBwcm9iYWJseSBtYWtlIHN1cmUgYFNDU0lgIGlzIGluY2x1ZGVkIGFzIHdlbGwuIEFoLCBJIHNlZSwgdGhlIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgYFVTQl9TVE9SQUdFX0FMQVVEQWAsICpzaG91bGQqIGJlIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBLYnVpbGQgc3lzdGVtIHRvIGNvbXBpbGUgYGFsYXVkYS5jYCwgcHJvdmlkZWQgYFVTQl9TVE9SQUdFYCBpcyBlbmFibGVkIGluIGdlbmVyYWwuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBJJ3ZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MToyNS43MDg2ODE3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTg3ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsYXVkYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZT0xOT11c2Itc3RvcmFnZS0kKENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRykgKz0gZGVidWcub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKVxcdCs9IHVtcy1hbGF1ZGEub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IHVtcy1jeXByZXNzLm9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKVxcdFxcdCs9IHVtcy11c2JhdC5vXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjM1OnVtcy1hbGF1ZGEteVxcdFxcdDo9IGFsYXVkYS5vXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNi11bXMtY3lwcmVzcy15XFx0XFx0Oj0gY3lwcmVzc19hdGFjYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjI1Ljc4OTY3NDgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUxNjcxMDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgb2JqZWN0aXZlIGlzIHRvIGVuYWJsZSBgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQWAuICBPa2F5LCBsb29rcyBsaWtlIHRoYXQgb3B0aW9uIGlzIHRoZSBrZXkgdG8gYWN0aXZhdGluZyB0aGUgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbiwgYnV0IGl0IGhpbmdlcyBvbiBhIGZldyBwcmVyZXF1aXNpdGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVVNCX1NUT1JBR0VgIGlzIGFsc28gZW5hYmxlZCBiZWNhdXNlIGBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBYCByZXF1aXJlcyBpdC4gQWgsIGFuZCBgQ09ORklHX1VTQl9TVE9SQUdFYCBpbiB0dXJuIGRlcGVuZHMgb24gYENPTkZJR19TQ1NJYC4gR290IGl0LiBTbyB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaXQgc2hvdWxkLCBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBVU0JfU1RPUkFHRV9BTEFVREFgLCBgVVNCX1NUT1JBR0VgLCBhbmQgYFNDU0lgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVVNCX1NUT1JBR0VgIHJlcXVpcmVzIGBVU0JgLiBJJ2xsIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjU2LjMwNjM4Nzg1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjk0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfU1RPUkFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTY9Y29tbWVudCBcXFwiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb1xcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6ODpjb25maWcgVVNCX1NUT1JBR0VcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTI2PWlmIFVTQl9TVE9SQUdFXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoyODpjb25maWcgVVNCX1NUT1JBR0VfREVCVUdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMjktXFx0Ym9vbCBcXFwiVVNCIE1hc3MgU3RvcmFnZSB2ZXJib3NlIGRlYnVnXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzozNDpjb25maWcgVVNCX1NUT1JBR0VfUkVBTFRFS1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBDYXJkIFJlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTQyPWNvbmZpZyBSRUFMVEVLX0FVVE9QTVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo0Nzpjb25maWcgVVNCX1NUT1JBR0VfREFUQUZBQlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjYzOmNvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDBcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6ODA6Y29uZmlnIFVTQl9TVE9SQUdFX1VTQkFUXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMDEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEwMy1cXHR0cmlzdGF0ZSBcXFwiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMTE6Y29uZmlnIFVTQl9TVE9SQUdFX1NERFI1NVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGUgXFxcIlNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTE4LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMTk6Y29uZmlnIFVTQl9TVE9SQUdFX0pVTVBTSE9UXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cXHR0cmlzdGF0ZSBcXFwiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTI2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMjgtXFx0dHJpc3RhdGUgXFxcIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzODpjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTUxLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNTI6Y29uZmlnIFVTQl9TVE9SQUdFX0tBUk1BXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllclxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNjQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTc3OmNvbmZpZyBVU0JfU1RPUkFHRV9FTkVfVUI2MjUwXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3OC1cXHR0cmlzdGF0ZSBcXFwiVVNCIEVORSBjYXJkIHJlYWRlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MTo1Ni40MTg2ODYxMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNjgxNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgVVNCIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgcmVsYXRlZCB0byBgVVNCX1NUT1JBR0VgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBidWlsdCBvbiB0b3Agb2YgYFNDU0lgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHRoaXMgdHlwZSBvZiBkZXZpY2UuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiBgYWxhdWRhX2NoZWNrX21lZGlhYC4gQXBwYXJlbnRseSwgdGhlcmUncyBhIGJ1ZyBpbiBob3cgYG1lZGlhX2luaXRpYWxpemVkYCBpcyBhY2Nlc3NlZDsgaXQncyBiZWluZyBwdWxsZWQgZnJvbSB0aGUgd3Jvbmcgc3RydWN0dXJlIChgaW5mb2AgaW5zdGVhZCBvZiBgTUVESUFfSU5GTyh1cylgKS4gVGhhdCBzY3JlYW1zIHBvdGVudGlhbCBjcmFzaCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3Ig4oCTIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpc3N1ZS4gVGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeCwgYW5kIHRoZSBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGEgc3VidGxlIHJlZ3Jlc3Npb24uXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgc2V2ZXJpdHkgb2YgYSBjcmFzaCBpbiBzdG9yYWdlIGNvZGUsIEknbSB0aGlua2luZyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byByZWFsbHkgcHV0IGl0IHRocm91Z2ggaXRzIHBhY2VzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGFjY2VzcyBlcnJvci4gSWYgSSB3ZXJlIGZ1enppbmcgdGhpcywgSSdkIHdhbnQgdG8gZm9jdXMgb24gdGhlIGBhbGF1ZGFfdHJhbnNwb3J0YCBhbmQgYGFsYXVkYV9wcm9iZWAgc3ltYm9scyBhcyB0aG9zZSBzZWVtIG1vc3QgcmVsYXRlZCB0byBob3cgdGhlIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIOKAkyBJJ2xsIG5lZWQgdG8gY2hlY2sgYFVTQl9TVE9SQUdFX0FMQVVEQWAsIGBVU0JfU1RPUkFHRWAsIGFuZCBgU0NTSWAgdG8gbWFrZSBzdXJlIG15IHRlc3RpbmcgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ25zIGluY2x1ZGUgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBtZWRpYSBzdGF0ZXMgYW5kIGRldmljZSBkaXNjb25uZWN0aW9ucy9yZWNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1NiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuNjQ1NTA1MDUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDkwOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVE9SQUdFX0FMQVVEQVwiLFxuICAgIFwiVVNCX1NUT1JBR0VcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImFsYXVkYV90cmFuc3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciBieSBjb3JyZWN0bHkgYWNjZXNzaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIGZyb20gYE1FRElBX0lORk8odXMpYCBpbnN0ZWFkIG9mIGBpbmZvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjAyLjgwMDAwNjM2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTgxMTI1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuODAwODc0MDI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzk4MDI1MjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5pbmRleCA2OTFmZTQ3MDA5Y2Y2Li44MDc0OTJmNzU0YTc2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuQEAgLTk2LDYgKzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHtcbiBcbiBcdHUxNiAqKmxiYV90b19wYmE7XHRcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXG4gXHR1MTYgKipwYmFfdG9fbGJhO1x0XHQvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqL1xuK1xuK1x0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4gXHR1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTtcbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovXG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovXG4tXG4tXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSlcdTAwM2NcdTAwM2M4ICkgKVxuQEAgLTQ3MSw2ICs0NzEsNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwiKTtcbiBcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4rXHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTQ3OCwxMiArNDc5LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbi1cdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIWluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcbitcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cIik7XG4gXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuK1x0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuODAwODc1NTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Njg4ODAwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBNZWRpYSBJbml0aWFsaXphdGlvbiBGbGFnKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkb2luZyBzb21lIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgc2hpZnRpbmcgaXQgZnJvbSB0aGUgbWFpbiBgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byBhIG1vcmUgc3BlY2lmaWMgYGFsYXVkYV9tZWRpYV9pbmZvYCBzdHJ1Y3R1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgZm9yIGZ1dHVyZSBleHBhbnNpb24gcmVsYXRlZCB0byBtZWRpYS1zcGVjaWZpYyBpbmZvcm1hdGlvbi5cblxuSXQgYWxzbyBtZWFucyB0aGF0IHRoZSBgYWxhdWRhX2NoZWNrX21lZGlhYCBmdW5jdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgaW4gbG9jYXRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBjb2RlJ3MgdXNpbmcgYGluZm9gIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgc3RydWN0IGFuZCBub3csIHRvIGdldCB0aGUgbmV3IG9uZSwgaXQgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBgTUVESUFfSU5GTyh1cylgLiBUaGF0J3MgdGhlIGtleS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIElzIGBhbGF1ZGFfbWVkaWFfaW5mb2AgYSAqbWVtYmVyKiB3aXRoaW4gYGFsYXVkYV9pbmZvYCwgb3IgaXMgaXQgc29tZWhvdyBhY2Nlc3NlZCB0aHJvdWdoIGB1cy1cdTAwM2VleHRyYWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMuIEJldHRlciBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgIGFuZCBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGNvcnJlY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHN0cnVjdHMgc3RyYWlnaHQgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjIwLjQ4OTY4MDE3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzc3MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FRElBX0lORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTEwMz1zdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cXHUwMDNlc3JiLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWx1blxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3OiNkZWZpbmUgTUVESUFfSU5GTyh1cykgKChzdHJ1Y3QgYWxhdWRhX2luZm8gKil1cy1cXHUwMDNlZXh0cmEpLVxcdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE4LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zODI9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNTpcXHRNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlY2hpcHNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI2LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIkZvdW5kIG1lZGlhIHdpdGggY2FwYWNpdHk6ICVsZE1CXFxcXG5cXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI3OlxcdFxcdCAgICAgTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgMjApO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI4LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI5OlxcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXFx1MDAzZXBhZ2VzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMDpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cXHUwMDNlYmxvY2tzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMTpcXHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVxcdTAwM2V6b25lc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzM6XFx0TUVESUFfSU5GTyh1cykucGFnZXNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZXBhZ2VzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNDpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZWJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzU6XFx0TUVESUFfSU5GTyh1cykuem9uZXNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZXpvbmVzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNzpcXHRNRURJQV9JTkZPKHVzKS51em9uZXNpemUgPSAoKDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlem9uZXNoaWZ0KSAvIDEyOCkgKiAxMjU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XFx0TUVESUFfSU5GTyh1cykuYmxvY2ttYXNrID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplIC0gMTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MDpcXHRudW1fem9uZXMgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDE6XFx0XFx0KyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MjpcXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQzOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDQ6XFx0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NDUtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcyLVxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk5vIG1lZGlhLCBvciBkb29yIG9wZW5cXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDczOlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODI6XFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODMtXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NDpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XFx0XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg5LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz01NzA9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTc0LVxcdGludCBpLCBqO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTc1OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTc2OlxcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NzctXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQsIGxiYV9yZWFsLCBibG9ja251bTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc4OlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPSBsYmFfdG9fcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc5OlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPSBwYmFfdG9fbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjgwLVxcdHJlc3VsdCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTY5ND1zdGF0aWMgdm9pZCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk1LXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY5NjpcXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTc6XFx0XFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk4LVxcdFxcdGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTczMz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrX3JhdyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc0OS1cXHRyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLVxcdTAwM2VyZWN2X2J1bGtfcGlwZSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc1MDpcXHRcXHRkYXRhLCAoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBwYWdlcywgTlVMTCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NTEtfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03NTk9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Mi1cXHRpbnQgaSwgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3NjM6XFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc4ND1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMC1cXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVxcdTAwM2V3cl9lcCwgZGF0YSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgwMTpcXHRcXHQoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDItXFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgxMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MTktXFx0aW50IGksIHJlc3VsdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMDpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIxOlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIyOlxcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIzOlxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjQtXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVxcdGlmIChwYmEgPT0gMSkge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NDAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDE6XFx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXFx1MDAyNk1FRElBX0lORk8odXMpLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0Mi1cXHRpZiAoIW5ld19wYmEpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODk5LVxcdG5ld19wYmFfb2Zmc2V0ID0gbmV3X3BiYSAtICh6b25lICogem9uZXNpemUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTAwOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTAxOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF0gPSBuZXdfcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTAyLVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlJlbWFwcGVkIExCQSAlZCB0byBQQkEgJWRcXFxcblxcXCIsIGxiYSwgbmV3X3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkwOC1cXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTA5OlxcdFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bcGJhX29mZnNldF0gPSBVTkRFRjtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkxMC1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTkxOD1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMy1cXHR1bnNpZ25lZCBpbnQgcGFnZSwgbGVuLCBvZmZzZXQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjQ6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI1OlxcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjY6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNzpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyODpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI5LVxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0Ni1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDc6XFx0cGFnZSA9IChhZGRyZXNzIFxcdTAwMjYgTUVESUFfSU5GTyh1cykuYmxvY2ttYXNrKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0ODpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKGJsb2Nrc2hpZnQgKyBwYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ5LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NzMtXFx0XFx0LyogRmluZCB3aGVyZSB0aGlzIGxiYSBsaXZlcyBvbiBkaXNrICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NzQ6XFx0XFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3NS1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAxMz1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDE3LVxcdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMTg6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxOTpcXHR1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0ID0gTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAyMDpcXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAyMTpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjItXFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OC1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ5OlxcdHBhZ2UgPSAoYWRkcmVzcyBcXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDUwOlxcdG1heF9sYmEgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAocGFnZXNoaWZ0ICsgYmxvY2tzaGlmdCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUxLVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTMyPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XFx0XFx0bnVtX3pvbmVzID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKE1FRElBX0lORk8odXMpLnpvbmVzaGlmdFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE2MjpcXHRcXHRcXHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2My1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjQ6XFx0XFx0Y2FwYWNpdHkgPSBudW1fem9uZXMgKiBNRURJQV9JTkZPKHVzKS51em9uZXNpemVcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjU6XFx0XFx0XFx0KiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MjoyMC42MjA0NjE2NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNDE1ODMzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgRmxhZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYWRqdXN0bWVudC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgYm9vbGVhbiBmbGFnIGZyb20gdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byB0aGUgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgY29uZmlybXMgdGhhdCwgc2hpZnRpbmcgdGhlIGZpZWxkIGRvd24gaW50byB0aGUgbWVkaWEtc3BlY2lmaWMgaW5mbywgYXMgaW50ZW5kZWQuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGFsYXVkYV9pbmZvYCBsaWtlbHkgY29udGFpbnMgZGV2aWNlLWxldmVsIGluZm9ybWF0aW9uLCB3aGlsZSBgYWxhdWRhX21lZGlhX2luZm9gIGNsZWFybHkgZGVhbHMgd2l0aCB0aGUgc3BlY2lmaWNzIG9mIGEgcGFydGljdWxhciBtZWRpYSBpbnN0YW5jZSBvciwgYXMgdGhlIGBwb3J0WzJdYCBhcnJheSBzdWdnZXN0cywgYSBzcGVjaWZpYyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0IHNlZW1zIHVubGlrZWx5LCBhcyB3ZSdyZSBqdXN0IHJlbG9jYXRpbmcgYSBib29sZWFuIGZsYWcuIFRoZSBjb2RlIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIHVzZXMgdGhpcyBmbGFnIHRvIGRldGVybWluZSBpZiBtZWRpYSBpcyBpbml0aWFsaXplZC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGFsbG9jYXRpb24gYXMgaXMgdHlwaWNhbCBmb3IgVVNCIHN0b3JhZ2UtcmVsYXRlZCBzdHJ1Y3R1cmVzLCB0aGUgbmV3IGZpZWxkIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdXRvbWF0aWNhbGx5LiBUaGUgbG9naWMgaW4gYGFsYXVkYV9jaGVja19tZWRpYWAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1lZGlhIGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtZWRpYSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYXJlZCBpZiBtZWRpYSBpcyByZW1vdmVkIG9yIGNoYW5nZWQuIEl0IHNldHMgdGhlIGZsYWcgdG8gYGZhbHNlYCB3aGVuIHRoZSBtZWRpYSBpcyBub3QgaW5pdGlhbGl6ZWQgb3Igd2hlbiBtZWRpYSBpcyBjaGFuZ2VkLiBUaGVyZWZvcmUsIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgZmllbGQgc2hvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5IGFmdGVyIHRoZSBwYXRjaC5cblxuSSB3aWxsIGRvdWJsZS1jaGVjayBob3cgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9uIGFib3V0IHplcm8taW5pdGlhbGl6YXRpb24gaXMgdmFsaWQsIGJ1dCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgc2Vuc2libGUgY2hhbmdlIHRvIGltcHJvdmUgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBtZWRpYSBpbml0aWFsaXphdGlvbiB0cmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1Mjo0Ni45NjIwNDc3MDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzQyMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKmFsYXVkYV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTEyPXN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTE3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTExODpcXHR1cy1cXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMTktXFx0aWYgKCF1cy1cXHUwMDNlZXh0cmEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjQ3LjAyMzgwNDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTIxMTcwMzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjcwNjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUzOjAyLjIzNTUxMDk0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVkaWFfaW5pdGlhbGl6ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTg1PXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAwOlxcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDEtfTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDczLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODI6XFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODMtXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4NC1cXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XFx0XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg5LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MzowMi4zMDU2MzU4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ3NTQzNzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQWxhdWRhIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGJvb2xlYW4gZnJvbSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGNvbnRhaW5zIGFuIGFycmF5IG9mIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYmUgYSBkdWFsLXBvcnQgZGV2aWNlLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2UuIFRoZSBpbml0aWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIGhhZCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGF0IHRoZSBnbG9iYWwgbGV2ZWwgZm9yIHRoZSBkZXZpY2UuICBUaGUgcGF0Y2ggcmlnaHRseSBtb3ZlcyBpdCAqaW50byogdGhlIHBlci1wb3J0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIE15IGh5cG90aGVzaXMgaXMgdGhlIG9yaWdpbmFsIGNvZGUgc3VmZmVyZWQgZnJvbSBhIGJ1ZyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2Ygb25lIHBvcnQgd2FzIGFmZmVjdGluZyB0aGUgYXNzdW1lZCBzdGF0ZSBvZiB0aGUgb3RoZXIuIFRoZSBpbnRlbnRpb24gaXMgY2xlYXJseSB0byB0cmFjayB0aGUgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdHVzIHBlciBwb3J0LCBub3QgZm9yIHRoZSBlbnRpcmUgZGV2aWNlLlxuXG5Ob3csIGxvb2tpbmcgYXQgYGFsYXVkYV9jaGVja19tZWRpYWAsIHRoZSBjb2RlIHByZXZpb3VzbHkgY2hlY2tlZCBhIGdsb2JhbCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuICBXaXRoIHRoaXMgY2hhbmdlLCBpdCBjaGVja3MgdGhlIHBvcnQtc3BlY2lmaWMgZmxhZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBiZWhhdmlvci4gV2hlbiBtZWRpYSBpcyBub3QgcHJlc2VudCBvciBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgd2UgZnJlZSB0aGUgbWFwcyBhbmQgKmV4cGxpY2l0bHkqIHNldCBgbWVkaWFfaW5pdGlhbGl6ZWRgIHRvIGZhbHNlLiBUaGVuLCBpZiB0aGVyZSdzIGEgbWVkaWEgY2hhbmdlLCB0aGUgY29kZSBhdHRlbXB0cyB0byBpbml0aWFsaXplIGl0LiBUaGUgZml4IGV4cGxpY2l0bHkgcmVzZXRzIHRoZSBtZWRpYSBpbml0aWFsaXplZCBmbGFnIHRvIGZhbHNlLiAgQ3JpdGljYWxseSwgaW5pdGlhbGl6YXRpb24gKnNldHMqIHRoZSBmbGFnIHRvIHRydWUuXG5cblRoZSBrZXkgaGVyZSBpcyBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jYCwgbWVhbmluZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBzdGFydHMgYXQgemVybyAoZmFsc2UpLiAgVGhlIGZpeCBpcyBwcm9iYWJseSB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgcG9ydHMgaW5kZXBlbmRlbnRseSwgYW5kIHRoYXQgdGhlIHN0YXRlIG9mIG9uZSBwb3J0IGRvZXNuJ3QgaW1wcm9wZXJseSBhZmZlY3QgdGhlIG90aGVyLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhpcyBtaWdodCBpbnZvbHZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJ1dCBJJ20gbm8gbG9uZ2VyIHN1cmUgb2YgdGhhdC4gR2l2ZW4gdGhhdCBga3phbGxvY2AgaXMgYmVpbmcgdXNlZCwgZXZlcnl0aGluZyBpcyB6ZXJvLWluaXRpYWxpemVkLiBJIHdhcyBtb21lbnRhcmlseSBjb25mdXNlZCBieSB0aGUgbm9uLXN0YW5kYXJkIGBremFsbG9jX29iamAsIGJ1dCBga3phbGxvY2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gY2FsbC5cblxuVGhlIHByZXZpb3VzIGJ1ZyBtaWdodCBoYXZlIGxlZCB0byBjYXNlcyB3aGVyZSBhIHBvcnQncyBkYXRhIG1hcHMgd2VyZSBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZC4gIElmIGBtZWRpYV9pbml0aWFsaXplZGAgd2FzIGluY29ycmVjdGx5IHRydWUsIHRoZSBkcml2ZXIgd291bGQgYXNzdW1lIHRoZSBtYXBzIHdlcmUgdmFsaWQgd2hlbiB0aGV5IHdlcmUgaW4gZmFjdCBudWxsLiBBY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtYXBzIG1lYW5zIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVycywgd2hpY2ggd291bGQgcmVzdWx0IGluIGEga2VybmVsIHBhbmljIChhbiBPb3BzKSwgb3IsIG1vcmUgbGlrZWx5LCBiZSBjYXVnaHQgYnkgS0FTQU4uIEZ1cnRoZXJtb3JlLCBjYXBhY2l0eSBvciBvdGhlciB2YWx1ZXMgd291bGQgYmUgemVyby5cblxuU28sIHRoaXMgY2hhbmdlIGZpeGVzIGEgbG9naWNhbCBidWcgd2hlcmUgbWVkaWEgaW5pdGlhbGl6YXRpb24gd2FzIHRyYWNrZWQgaW5jb3JyZWN0bHkgYW5kIHByb2JhYmx5IHNoYXJlZCBhY3Jvc3MgdGhlIGR1YWwgcG9ydHMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGl2aXNpb24gYnkgemVybyBlcnJvcnMsIHdoaWNoIGFyZSAqYWxyZWFkeSogYWRkcmVzc2VkIGJ5IHRoZSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoS0FTQU4sIGtlcm5lbCBPb3BzLCBhbmQgcG90ZW50aWFsbHkgVUJTQU4pLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBsb2dpYyBjb3JyZWN0aW9uLCBhbmQgdGhlcmUgaXMgbm8gb2J2aW91cyByaXNrIG9mICpyZWFkaW5nKiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4NywiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjU0OjEwLjc4MTA3NzAyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcgZnJvbSB0aGUgZ2xvYmFsIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHRvIHRoZSBwZXItcG9ydCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNoYXJlZCBhIHNpbmdsZSBpbml0aWFsaXphdGlvbiBmbGFnIGJldHdlZW4gdHdvIHBvcnRzLCB3aGljaCBjb3VsZCBjYXVzZSB0aGUgZHJpdmVyIHRvIHNraXAgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBzZWNvbmQgcG9ydCBpZiB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSBkcml2ZXIgdXNpbmcgemVyby1pbml0aWFsaXplZCBmaWVsZHMgKGUuZy4sIDAgY2FwYWNpdHksIE5VTEwgcG9pbnRlcnMgZm9yIGJsb2NrIG1hcHMpIGZvciB0aGUgc2Vjb25kIHBvcnQsIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGl2aXNpb24gYnkgemVybywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIHNraXBwZWQgaW5pdGlhbGl6YXRpb24gKGxpa2UgTlVMTCBkZXJlZnMpIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIE9vcHMsIEtBU0FOLCBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 12:49:16 +0000 UTC FinishedAt: 2026-08-26 12:54:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "SCSI" ], "series_id": "f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alauda_probe", "alauda_transport" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnIGZyb20gdGhlIGdsb2JhbCBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byB0aGUgcGVyLXBvcnQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AuIFRoZSBwcmV2aW91cyBsb2dpYyBzaGFyZWQgYSBzaW5nbGUgaW5pdGlhbGl6YXRpb24gZmxhZyBiZXR3ZWVuIHR3byBwb3J0cywgd2hpY2ggY291bGQgY2F1c2UgdGhlIGRyaXZlciB0byBza2lwIGluaXRpYWxpemF0aW9uIGZvciB0aGUgc2Vjb25kIHBvcnQgaWYgdGhlIGZpcnN0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzIHdvdWxkIHJlc3VsdCBpbiB0aGUgZHJpdmVyIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgZmllbGRzIChlLmcuLCAwIGNhcGFjaXR5LCBOVUxMIHBvaW50ZXJzIGZvciBibG9jayBtYXBzKSBmb3IgdGhlIHNlY29uZCBwb3J0LCBsZWFkaW5nIHRvIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRpdmlzaW9uIGJ5IHplcm8sIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFNpbmNlIHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AsIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIG1lYW5pbmcgdGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIEFueSBidWdzIHJlc3VsdGluZyBmcm9tIHRoZSBza2lwcGVkIGluaXRpYWxpemF0aW9uIChsaWtlIE5VTEwgZGVyZWZzKSBhcmUgcmVsaWFibHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBPb3BzLCBLQVNBTiwgb3IgVUJTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4mIzQzO1xuJiM0MztcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtNDcxLDYgJiM0Mzs0NzEsNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O05vIG1lZGlhLCBvciBkb29yIG9wZW5cXG5cJiMzNDspO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiYjNDM7XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTQ3OCwxMiAmIzQzOzQ3OSwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4mIzQzO1x0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcbiBcdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiYjNDM7XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tXHRcdFx0aW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4mIzQzO1x0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1RPUkFHRV9BTEFVREEmIzM0OywKICAgICYjMzQ7VVNCX1NUT1JBR0UmIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsYXVkYV9wcm9iZSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCmluZGV4IDY5MWZlNDcwMDljZjYuLjgwNzQ5MmY3NTRhNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwpAQCAtOTYsNiAmIzQzOzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHsKIAogCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLwogCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLwomIzQzOwomIzQzOwlib29sIG1lZGlhX2luaXRpYWxpemVkOwogfTsKIAogc3RydWN0IGFsYXVkYV9pbmZvIHsKQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHsKIAl1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTsKIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzYzsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovCiAJdW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovCi0KLQlib29sIG1lZGlhX2luaXRpYWxpemVkOwogfTsKIAogI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSkmbHQ7Jmx0OzggKSApCkBAIC00NzEsNiAmIzQzOzQ3MSw3IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAkJfHwgKChzdGF0dXNbMV0gJmFtcDsgMHgwMSkgPT0gMCkpIHsKIAkJdXNiX3N0b3JfZGJnKHVzLCAmIzM0O05vIG1lZGlhLCBvciBkb29yIG9wZW5cbiYjMzQ7KTsKIAkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDc5LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKIAkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCXJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpOwogCQlpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpCi0JCQlpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IHRydWU7CiYjNDM7CQkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwogCQlpbmZvLSZndDtzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjID0gMHgyODsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjcSA9IDB4MDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVVNCIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgcHJldHR5IGZvY3VzZWQsIG1vdmluZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnIGZyb20gdGhlIGBhbGF1ZGFfaW5mb2Agc3RydWN0IHRvIGBhbGF1ZGFfbWVkaWFfaW5mb2AuIFRoZSBjb2RlIGFsc28gdXBkYXRlcyBgYWxhdWRhX2NoZWNrX21lZGlhYCB0byByZWZsZWN0IHRoaXMgY2hhbmdlIGFuZCBlbnN1cmVzIHRoZSBmbGFnIGlzIHByb3Blcmx5IHJlc2V0IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KCk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGNvZGUgcGF0aCB3b3J0aCBwdXJzdWluZy4gSXQmIzM5O3MgYSBVU0Igc3RvcmFnZSBkcml2ZXIgZm9yIHNvbWV0aGluZyBjYWxsZWQgJiMzNDtBbGF1ZGEuJiMzNDsgT2theSwgdGhhdCBuYXJyb3dzIGl0IGRvd24sIGFuZCBVU0IgZHJpdmVycyBhcmUgZGVmaW5pdGVseSBhdHRyYWN0aXZlIGZ1enppbmcgdGFyZ2V0cy4gV2UmIzM5O3ZlIGdvdCB0b29scyBmb3IgdGhhdDsgZHVtbXlfaGNkIG9yIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIGNvdWxkIHdvcmsgaGVyZS4KClRoZSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSBsb2NhdGluZyB0aGUgY29uZmlnIG9wdGlvbnMgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBLbm93aW5nIHRoZSBjb25maWcgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBkcml2ZXIgaXMgdXNlZCBhbmQgZW5hYmxlIGl0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsYXVkYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWFsYXVkYS5cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYSBVU0IgU3RvcmFnZSBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZ28tdG8gZm9yIHRoZXNlIHRoaW5ncyBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBpbiB0aGUgZHJpdmVyJiMzOTtzIGRpcmVjdG9yeS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIGJlIGRlZmluZWQgZm9yIFVTQiBzdG9yYWdlLCBpbmNsdWRpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgb3B0aW9uIGRlcGVuZHMgb24gb3RoZXIgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90XG4gMTIzOlx0XHQgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLlxuIDEyNDpcdFxuIDEyNTpcdFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXG4gMTI2Olx0XG4gMTI3Olx0Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuIDEyODpcdFx0dHJpc3RhdGUgXCYjMzQ7T2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XCYjMzQ7XG4gMTI5Olx0XHRoZWxwXG4gMTMwOlx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxuIDEzMTpcdFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cbiAxMzI6XHRcbiAxMzM6XHRcdCAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGhcbiAxMzQ6XHRcdCAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXG4gMTM3Olx0XG4gMTM4Olx0Y29uZmlnIFVTQl9TVE9SQUdFX09ORVRPVUNIXG4gMTM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVVNCIFN0b3JhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFuZ3Mgb2ZmIHRoZSBgVVNCX1NUT1JBR0VgIHBhcmVudC4gVGhhdCYjMzk7cyB0aGUga2V5LiBCZWZvcmUgSSBjYW4gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoICp0aGlzKiBmZWF0dXJlLCBJICpoYXZlKiB0byBnZXQgYSBncmlwIG9uIGBVU0JfU1RPUkFHRWAgaXRzZWxmLiBJdCYjMzk7cyB0aGUgZm91bmRhdGlvbi4gVGltZSB0byBnbyBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGFuZCBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyBpdHMgYnVpbGQgYW5kIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfU1RPUkFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O05PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9cJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjg6Y29uZmlnIFVTQl9TVE9SQUdFXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz0yNj1pZiBVU0JfU1RPUkFHRVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MzQ6Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz00Mj1jb25maWcgUkVBTFRFS19BVVRPUE1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NDc6Y29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUJcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0RhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7SVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjgwOmNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEyLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTE5OmNvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cdHRyaXN0YXRlIFwmIzM0O0xleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cdHRyaXN0YXRlIFwmIzM0O09seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTUyOmNvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTY0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1NBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNzgtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNvbmZpZyBVU0JfU1RPUkFHRWAgc2V0dGluZ3MuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB3aGF0IGl0IGRvZXMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBjb25maWd1cmUgdGhpcyBpZiBpdCByZWxpZXMgb24gc29tZSBmdW5kYW1lbnRhbCBwaWVjZSB0aGF0JiMzOTtzIGVpdGhlciBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBtYWtpbmcgc3VyZSBJIGtub3cgd2hpY2ggb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBjb25mbGljdHMgbWlnaHQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBJIGRvbiYjMzk7dCBnbyBkb3duIGEgcmFiYml0IGhvbGUgdHJ5aW5nIHRvIGdldCBzb21ldGhpbmcgd29ya2luZyB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGV4aXN0aW5nIHN5c3RlbS4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSBhbGwgdGhlIGR1Y2tzIGFyZSBpbiBhIHJvdyBiZWZvcmUgSSBzdGFydCB0d2Vha2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29tbWVudCBcJiMzNDtOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIFVTQl9TVE9SQUdFXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gU0NTSVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXJcbiAgMTM6XHRcdCAgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXG4gIDE0Olx0XHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxuICAxNTpcdFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcbiAgMTY6XHRcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcbiAgMTc6XHRcdCAgYW5kIGNhcmQgcmVhZGVycy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAmIzM5O1NDU0kmIzM5OyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcbiAgMjA6XHRcdCAgcHJvYmFibHkgYWxzbyBuZWVkICYjMzk7U0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQmIzM5O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBQbGFuKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYFVTQl9TVE9SQUdFYCByZWxpZXMgb24gdGhlIGBTQ1NJYCBzdWJzeXN0ZW0uIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIGEgY29tbW9uIGRlcGVuZGVuY3kuIE5vdywgdGhlIGNvbmZpZyBvcHRpb24gdG8gZW5hYmxlIHRoZSBzcGVjaWZpYyBwaWVjZSBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGBVU0JfU1RPUkFHRV9BTEFVREFgLCBpcyB0aGUga2V5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGVyZWZvcmUsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSB2dWxuZXJhYmlsaXRpZXMgd2lsbCBtb3N0IGxpa2VseSBiZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlucHV0cyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM4Mj1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Ni0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU4LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMzI9c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0OS1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtURVNUX1VOSVRfUkVBRFlcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOlx0XHRyZXR1cm4gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS1cdH1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTc6XHRcdHJjID0gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1OC1cdFx0aWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3Ny1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3ODpcdFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc5LVx0XHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTk1Olx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTYtXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IFBlcnNwZWN0aXZlIG9uIHRoZSBBbGF1ZGEgVHJhbnNwb3J0IERyaXZlcioqCgpBbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgY2xlYXIuIFdlJiMzOTt2ZSBnb3QgYGFsYXVkYV90cmFuc3BvcnRgIGFzIHRoZSBjZW50cmFsIGh1YiDigJMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBhY3R1YWwgZGF0YSBtb3ZlbWVudCB3aXRoaW4gdGhpcyBkcml2ZXIuIEl0JiMzOTtzIHRoZSBjb3JlIHRyYW5zcG9ydCBtZWNoYW5pc20sIHRoZSBtYWluIGV2ZW50LiBBbmQgZnJvbSB3aGF0IEkgc2VlLCBpdCBsb29rcyBsaWtlIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoYXQgaW1wbGllcyBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBhIGNyaXRpY2FsIHN1YnJvdXRpbmUsIGEgc3VwcG9ydGluZyBjYXN0IG1lbWJlciwgdGhhdCBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGFzc2Vzc2luZyBtZWRpYSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgb3IgcGVyaGFwcyB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgaW50ZW5kZWQgbWVkaWEgdG8gaGFuZGxlIHRoZSB0cmFuc3BvcnQgZnVuY3Rpb24mIzM5O3MgbmVlZHMuIEl0IGlzIGxpa2VseSBhbiBlc3NlbnRpYWwgcHJlY29uZGl0aW9uIGNoZWNrIG9yIGEgcG9zdC10cmFuc3BvcnQgdmVyaWZpY2F0aW9uIHN0ZXAsIGVuc3VyaW5nIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHByb2Nlc3MgbWFuYWdlZCBieSBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoZSBpbnRlZ3JhdGlvbiBpcyB0eXBpY2FsIGFuZCBlZmZpY2llbnQgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMTI9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTMyOnN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzMy17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMjQxPXN0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI1My1cdHVzLVx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFwmIzM0O0FsYXVkYSBDb250cm9sL0J1bGtcJiMzNDs7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNTQ6XHR1cy1cdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjU1LVx0dXMtXHUwMDNldHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFsYXVkYV90cmFuc3BvcnRgIENhbGxiYWNrKioKCk9rYXksIHNvIGBhbGF1ZGFfdHJhbnNwb3J0YCBpcyB0aGUgYHVzLSZndDt0cmFuc3BvcnRgIGNhbGxiYWNrLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjcml0aWNhbCBmb3IgVVNCIHN0b3JhZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IHRoZSBtYWluIGludGVyZmFjZS4gR2l2ZW4gaXRzIGNvbm5lY3Rpb24gdG8gdGhlIFVTQiBzdG9yYWdlIGNvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbiBmb3Igbm93LiBNeSBpbnR1aXRpb24gc2F5cyB0aGVyZSBpcyBhIHBhdGggaGVyZSwgc28gaXQmIzM5O3MgdGhlIHJpZ2h0IGNob2ljZSBmb3IgdGhlIGRlZXAgZGl2ZS4KCk5vdywgSSYjMzk7bSBub3RpbmcgYGFsYXVkYV9jaGVja19tZWRpYWAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGUgY29kZSBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLCBvciBwZXJoYXBzIGlzIGlubGluZWQgYnV0IHJlbWFpbnMgcmVsYXRpdmVseSBsYXJnZS4gSSB0aGluayBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgYWxhdWRhX2NoZWNrX21lZGlhYCwgc28gSSYjMzk7bSBnb2luZyB0byBkZXRlcm1pbmUgaXRzIHNpemUgdG8gdW5kZXJzdGFuZCBpdHMgZm9vdHByaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NjpcdCAqL1xuIDQ1NzpcdHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiA0NTg6XHR7XG4gNDU5Olx0XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuIDQ2MDpcdFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXHUwMDNlaW9idWY7XG4gNDYxOlx0XHRpbnQgcmM7XG4gNDYyOlx0XG4gNDYzOlx0XHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xuIDQ2NDpcdFx0aWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xuIDQ2NTpcdFx0XHRzdGF0dXNbMF0gPSAweEYwO1x0LyogUHJldGVuZCB0aGVyZSYjMzk7cyBubyBtZWRpYSAqL1xuIDQ2NjpcdFx0XHRzdGF0dXNbMV0gPSAwO1xuIDQ2NzpcdFx0fVxuIDQ2ODpcdFxuIDQ2OTpcdFx0LyogQ2hlY2sgZm9yIG5vIG1lZGlhIG9yIGRvb3Igb3BlbiAqL1xuIDQ3MDpcdFx0aWYgKChzdGF0dXNbMF0gXHUwMDI2IDB4ODApIHx8ICgoc3RhdHVzWzBdIFx1MDAyNiAweDFGKSA9PSAweDEwKVxuIDQ3MTpcdFx0XHR8fCAoKHN0YXR1c1sxXSBcdTAwMjYgMHgwMSkgPT0gMCkpIHtcbiA0NzI6XHRcdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCYjMzQ7KTtcbiA0NzM6XHRcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gNDc0Olx0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gNDc1Olx0XHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiA0NzY6XHRcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIDQ3NzpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuIDQ3ODpcdFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDtcbiA0Nzk6XHRcdH1cbiA0ODA6XHRcbiA0ODE6XHRcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbiA0ODI6XHRcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG4gNDgzOlx0XHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiA0ODQ6XHRcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gNDg1Olx0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gNDg2Olx0XHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIDQ4NzpcdFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4gNDg4Olx0XHRcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIDQ4OTpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xuIDQ5MDpcdFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XG4gNDkxOlx0XHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG4gNDkyOlx0XHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xuIDQ5MzpcdFx0fVxuIDQ5NDpcdFxuIDQ5NTpcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBbGF1ZGEgRHJpdmVyJiMzOTtzIENvcmUgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBmdW5jdGlvbiwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCBgYWxhdWRhX3RyYW5zcG9ydGAgaXMgYWxzbyBzdGF0aWMsIHlldCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIg4oCTIHRoYXQgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gSSBzdXNwZWN0IGl0IG1pZ2h0IGJlIHRoZSBrZXkuIExldCBtZSBjb25maXJtIGlmIGBhbGF1ZGFfdHJhbnNwb3J0YCBpcyBpbmRlZWQgdGhlIHByaW1hcnkgZm9jdXMgc3ltYm9sLiBBaGEsIHllcywgaXQgYXBwZWFycyB0byBiZSB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgU0NTSSBjb21tYW5kIHByb2Nlc3Npbmcgd2l0aGluIHRoaXMgZHJpdmVyLCBhcyBJIHN1c3BlY3RlZC4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE5vdywgd2hhdCYjMzk7cyB0aGlzIGBhbGF1ZGFfcHJvYmVgIGZ1bmN0aW9uIGRvaW5nIGhlcmU/IEl0IGNvdWxkIHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgYWxhdWRhX3Byb2JlYCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcbjEyNDE6XHRzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbjEyNDI6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuMTI0MzpcdHtcbjEyNDQ6XHRcdHN0cnVjdCB1c19kYXRhICp1cztcbjEyNDU6XHRcdGludCByZXN1bHQ7XG4xMjQ2Olx0XG4xMjQ3Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoXHUwMDI2dXMsIGludGYsIGlkLFxuMTI0ODpcdFx0XHRcdChpZCAtIGFsYXVkYV91c2JfaWRzKSAmIzQzOyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcbjEyNDk6XHRcdFx0XHRcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XG4xMjUwOlx0XHRpZiAocmVzdWx0KVxuMTI1MTpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTI1MjpcdFxuMTI1MzpcdFx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbjEyNTQ6XHRcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG4xMjU1Olx0XHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuMTI1NjpcdFx0dXMtXHUwMDNlbWF4X2x1biA9IDE7XG4xMjU3Olx0XG4xMjU4Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpO1xuMTI1OTpcdFx0cmV0dXJuIHJlc3VsdDtcbjEyNjA6XHR9XG4xMjYxOlx0XG4xMjYyOlx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XG4xMjYzOlx0XHQubmFtZSA9XHRcdERSVl9OQU1FLFxuMTI2NDpcdFx0LnByb2JlID1cdGFsYXVkYV9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBBbGF1ZGEgZm9yIFVTQiBTdG9yYWdlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGhhbmRsZSB0aGUgQWxhdWRhIHByb2JlIGFuZCB0cmFuc3BvcnQgZnVuY3Rpb25zLCBgYWxhdWRhX3Byb2JlYCBhbmQgYGFsYXVkYV90cmFuc3BvcnRgLiBUaG9zZSBzZWVtIGxpa2UgZ29vZCBrZXkgc3ltYm9scyB0byB3b3JrIHdpdGguIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgc2V0LiBJIGtub3cgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgYFVTQl9TVE9SQUdFYC4gV2FpdC4uLiBJIHNlZSB0aGF0IGBVU0JfU1RPUkFHRWAgZGVwZW5kcyBvbiBgU0NTSWAsIHNvIEkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSBgU0NTSWAgaXMgaW5jbHVkZWQgYXMgd2VsbC4gQWgsIEkgc2VlLCB0aGUgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgKnNob3VsZCogYmUgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIEtidWlsZCBzeXN0ZW0gdG8gY29tcGlsZSBgYWxhdWRhLmNgLCBwcm92aWRlZCBgVVNCX1NUT1JBR0VgIGlzIGVuYWJsZWQgaW4gZ2VuZXJhbC4gSnVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBJJiMzOTt2ZSBvdmVybG9va2VkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcmIzM5O3Mgc2V0IHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MTk9dXNiLXN0b3JhZ2UtJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpICYjNDM7PSBkZWJ1Zy5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKVx0JiM0Mzs9IHVtcy1hbGF1ZGEub1xuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0yMi1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQikgJiM0Mzs9IHVtcy1jeXByZXNzLm9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVClcdFx0JiM0Mzs9IHVtcy11c2JhdC5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTM0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZTozNTp1bXMtYWxhdWRhLXlcdFx0Oj0gYWxhdWRhLm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzYtdW1zLWN5cHJlc3MteVx0XHQ6PSBjeXByZXNzX2F0YWNiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc2NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUmV2aWV3KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG9iamVjdGl2ZSBpcyB0byBlbmFibGUgYENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFgLiAgT2theSwgbG9va3MgbGlrZSB0aGF0IG9wdGlvbiBpcyB0aGUga2V5IHRvIGFjdGl2YXRpbmcgdGhlIGZlYXR1cmUgSSYjMzk7bSBpbnRlcmVzdGVkIGluLCBidXQgaXQgaGluZ2VzIG9uIGEgZmV3IHByZXJlcXVpc2l0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19VU0JfU1RPUkFHRWAgaXMgYWxzbyBlbmFibGVkIGJlY2F1c2UgYENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFgIHJlcXVpcmVzIGl0LiBBaCwgYW5kIGBDT05GSUdfVVNCX1NUT1JBR0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgQ09ORklHX1NDU0lgLiBHb3QgaXQuIFNvIHRvIGVuc3VyZSBldmVyeXRoaW5nIGZ1bmN0aW9ucyBhcyBpdCBzaG91bGQsIG15IGBFbmFibGVDb25maWdzYCBsaXN0IG5lZWRzIHRvIGluY2x1ZGUgYFVTQl9TVE9SQUdFX0FMQVVEQWAsIGBVU0JfU1RPUkFHRWAsIGFuZCBgU0NTSWAuCgpXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVVNCX1NUT1JBR0VgIHJlcXVpcmVzIGBVU0JgLiBJJiMzOTtsbCByZXZpc2l0IHRoZSBkZXBlbmRlbmNpZXMgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfU1RPUkFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFwmIzM0O05PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9cJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjg6Y29uZmlnIFVTQl9TVE9SQUdFXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cdHRyaXN0YXRlIFwmIzM0O1VTQiBNYXNzIFN0b3JhZ2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz0yNj1pZiBVU0JfU1RPUkFHRVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI5LVx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MzQ6Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZz00Mj1jb25maWcgUkVBTFRFS19BVVRPUE1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NDc6Y29uZmlnIFVTQl9TVE9SQUdFX0RBVEFGQUJcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cdHRyaXN0YXRlIFwmIzM0O0RhdGFmYWIgQ29tcGFjdCBGbGFzaCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7RnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7SVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjgwOmNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVx0dHJpc3RhdGUgXCYjMzQ7VVNCQVQvVVNCQVQwMi1iYXNlZCBzdG9yYWdlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEyLVx0dHJpc3RhdGUgXCYjMzQ7U2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTE5OmNvbmZpZyBVU0JfU1RPUkFHRV9KVU1QU0hPVFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cdHRyaXN0YXRlIFwmIzM0O0xleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cdHRyaXN0YXRlIFwmIzM0O09seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTUyOmNvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTY0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cdHRyaXN0YXRlIFwmIzM0O1NBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXCYjMzQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNzgtXHR0cmlzdGF0ZSBcJiMzNDtVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxNTYKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBVU0IgU3RvcmFnZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gYFVTQl9TVE9SQUdFYCwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgU0NTSWAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCBmb3IgdGhpcyB0eXBlIG9mIGRldmljZS4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgdGhvdWdoLCBsaWVzIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBBcHBhcmVudGx5LCB0aGVyZSYjMzk7cyBhIGJ1ZyBpbiBob3cgYG1lZGlhX2luaXRpYWxpemVkYCBpcyBhY2Nlc3NlZDsgaXQmIzM5O3MgYmVpbmcgcHVsbGVkIGZyb20gdGhlIHdyb25nIHN0cnVjdHVyZSAoYGluZm9gIGluc3RlYWQgb2YgYE1FRElBX0lORk8odXMpYCkuIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgY3Jhc2ggb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yIOKAkyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgaXNzdWUuIFRoaXMgaXMgY2xlYXJseSBhIGJ1ZyBmaXgsIGFuZCB0aGUgY2hhbmdlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBhIHN1YnRsZSByZWdyZXNzaW9uLgoKR2l2ZW4gdGhlIHBvdGVudGlhbCBzZXZlcml0eSBvZiBhIGNyYXNoIGluIHN0b3JhZ2UgY29kZSwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byByZWFsbHkgcHV0IGl0IHRocm91Z2ggaXRzIHBhY2VzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGFjY2VzcyBlcnJvci4gSWYgSSB3ZXJlIGZ1enppbmcgdGhpcywgSSYjMzk7ZCB3YW50IHRvIGZvY3VzIG9uIHRoZSBgYWxhdWRhX3RyYW5zcG9ydGAgYW5kIGBhbGF1ZGFfcHJvYmVgIHN5bWJvbHMgYXMgdGhvc2Ugc2VlbSBtb3N0IHJlbGF0ZWQgdG8gaG93IHRoZSBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCDigJMgSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgVVNCX1NUT1JBR0VfQUxBVURBYCwgYFVTQl9TVE9SQUdFYCwgYW5kIGBTQ1NJYCB0byBtYWtlIHN1cmUgbXkgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIGNvcnJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ25zIGluY2x1ZGUgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBtZWRpYSBzdGF0ZXMgYW5kIGRldmljZSBkaXNjb25uZWN0aW9ucy9yZWNvbm5lY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciBieSBjb3JyZWN0bHkgYWNjZXNzaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIGZyb20gYE1FRElBX0lORk8odXMpYCBpbnN0ZWFkIG9mIGBpbmZvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcgZnJvbSB0aGUgZ2xvYmFsIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHRvIHRoZSBwZXItcG9ydCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNoYXJlZCBhIHNpbmdsZSBpbml0aWFsaXphdGlvbiBmbGFnIGJldHdlZW4gdHdvIHBvcnRzLCB3aGljaCBjb3VsZCBjYXVzZSB0aGUgZHJpdmVyIHRvIHNraXAgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBzZWNvbmQgcG9ydCBpZiB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSBkcml2ZXIgdXNpbmcgemVyby1pbml0aWFsaXplZCBmaWVsZHMgKGUuZy4sIDAgY2FwYWNpdHksIE5VTEwgcG9pbnRlcnMgZm9yIGJsb2NrIG1hcHMpIGZvciB0aGUgc2Vjb25kIHBvcnQsIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGl2aXNpb24gYnkgemVybywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIHNraXBwZWQgaW5pdGlhbGl6YXRpb24gKGxpa2UgTlVMTCBkZXJlZnMpIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIE9vcHMsIEtBU0FOLCBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA3YmI0YzMwYjBlOTAwYjQzYmNmZTk1OWNkZDhhYjk4YzA5ODU2ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDEyOjUwOjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTQ3MSw2ICYjNDM7NDcxLDcgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwogCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gMHgwMjsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjID0gMHgzQTsKIAkJaW5mby0mZ3Q7c2Vuc2VfYXNjcSA9IDB4MDA7CkBAIC00NzgsMTIgJiM0Mzs0NzksMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKQogCX0KIAogCS8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi8KLQlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIWluZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiYjNDM7CWlmIChzdGF0dXNbMF0gJmFtcDsgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHsKIAkJdXNiX3N0b3JfZGJnKHVzLCAmIzM0O01lZGlhIGNoYW5nZSBkZXRlY3RlZFxuJiMzNDspOwogCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJcmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7CiAJCWlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKLQkJCWluZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKJiM0MzsJCQlNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OOwogCQlpbmZvLSZndDtzZW5zZV9hc2MgPSAweDI4OwogCQlpbmZvLSZndDtzZW5zZV9hc2NxID0gMHgwMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIE1lZGlhIEluaXRpYWxpemF0aW9uIEZsYWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkb2luZyBzb21lIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIHNoaWZ0aW5nIGl0IGZyb20gdGhlIG1haW4gYGFsYXVkYV9pbmZvYCBzdHJ1Y3R1cmUgdG8gYSBtb3JlIHNwZWNpZmljIGBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBUaGF0IG1ha2VzIHNlbnNlLCBrZWVwcyB0aGluZ3MgY2xlYW5lciBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIGZvciBmdXR1cmUgZXhwYW5zaW9uIHJlbGF0ZWQgdG8gbWVkaWEtc3BlY2lmaWMgaW5mb3JtYXRpb24uCgpJdCBhbHNvIG1lYW5zIHRoYXQgdGhlIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBpbiBsb2NhdGlvbi4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGluZm9gIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgc3RydWN0IGFuZCBub3csIHRvIGdldCB0aGUgbmV3IG9uZSwgaXQgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBgTUVESUFfSU5GTyh1cylgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgpIYW5nIG9uIGEgc2Vjb25k4oCmIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZy4gSXMgYGFsYXVkYV9tZWRpYV9pbmZvYCBhICptZW1iZXIqIHdpdGhpbiBgYWxhdWRhX2luZm9gLCBvciBpcyBpdCBzb21laG93IGFjY2Vzc2VkIHRocm91Z2ggYHVzLSZndDtleHRyYWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMuIEJldHRlciBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgIGFuZCBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzdHJ1Y3RzIHN0cmFpZ2h0IGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FRElBX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cdTAwM2VzcmItXHUwMDNlZGV2aWNlLVx1MDAzZWx1blxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVx1MDAzZWV4dHJhKS1cdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zODI9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNTpcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2VjaGlwc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyNi1cdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Rm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNzpcdFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcdTAwM2VcdTAwM2UgMjApO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyOTpcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzA6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cdTAwM2VibG9ja3NoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzE6XHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDMyLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzM6XHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzQ6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZWJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNTpcdE1FRElBX0lORk8odXMpLnpvbmVzaXplID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2V6b25lc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM3Olx0TUVESUFfSU5GTyh1cykudXpvbmVzaXplID0gKCgxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdCkgLyAxMjgpICogMTI1O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MDpcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MTpcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDI6XHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDM6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDQ6XHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ1LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3Mi1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDczOlx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDc0Olx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzUtXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDgyOlx0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDgzLVx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O01lZGlhIGNoYW5nZSBkZXRlY3RlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NDpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NTpcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg2LVx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4ODpcdFx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4OS1cdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTU3MD1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTc0LVx0aW50IGksIGo7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU3NTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1NzY6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NzctXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCwgbGJhX3JlYWwsIGJsb2NrbnVtO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2Nzg6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID0gbGJhX3RvX3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc5Olx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9IHBiYV90b19sYmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY4MC1cdHJlc3VsdCA9IDA7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz02OTQ9c3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk1LXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njk2Olx0aWYgKE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPT0gTlVMTFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTc6XHRcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk4LVx0XHRhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NzMzPXN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc0OS1cdHJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtXHUwMDNlcmVjdl9idWxrX3BpcGUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc1MDpcdFx0ZGF0YSwgKE1FRElBX0lORk8odXMpLnBhZ2VzaXplICYjNDM7IDY0KSAqIHBhZ2VzLCBOVUxMKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUxLX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc1OT1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Mi1cdGludCBpLCByYztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzYzOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2NC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc4ND1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDAtXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVx1MDAzZXdyX2VwLCBkYXRhLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDE6XHRcdChNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSAmIzQzOyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMi1cdFx0TlVMTCk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04MTI9c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgxOS1cdGludCBpLCByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMDpcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MjI6XHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIzOlx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI0LVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzMS1cdGlmIChwYmEgPT0gMSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODQwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDE6XHRuZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0Mi1cdGlmICghbmV3X3BiYSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODk5LVx0bmV3X3BiYV9vZmZzZXQgPSBuZXdfcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkwMDpcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MDE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdID0gbmV3X3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTAyLVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtSZW1hcHBlZCBMQkEgJWQgdG8gUEJBICVkXFxuXCYjMzQ7LCBsYmEsIG5ld19wYmEpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTA4LVx0XHRcdHJldHVybiByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkwOTpcdFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtwYmFfb2Zmc2V0XSA9IFVOREVGO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MTAtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz05MTg9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTIzLVx0dW5zaWduZWQgaW50IHBhZ2UsIGxlbiwgb2Zmc2V0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjQ6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaGlmdCA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNjpcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNzpcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Mjg6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjktXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ2LVx0bGJhID0gYWRkcmVzcyBcdTAwM2VcdTAwM2UgYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTQ3Olx0cGFnZSA9IChhZGRyZXNzIFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDg6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChibG9ja3NoaWZ0ICYjNDM7IHBhZ2VzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0OS1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3My1cdFx0LyogRmluZCB3aGVyZSB0aGlzIGxiYSBsaXZlcyBvbiBkaXNrICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk3NDpcdFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc1LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAxMz1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAxNy1cdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxODpcdHVuc2lnbmVkIGludCBibG9ja3NoaWZ0ID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxOTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjA6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDIxOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjItXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OC1cdGxiYSA9IGFkZHJlc3MgXHUwMDNlXHUwMDNlIGJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDk6XHRwYWdlID0gKGFkZHJlc3MgXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTA6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChwYWdlc2hpZnQgJiM0MzsgYmxvY2tzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTEtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTMyPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XHRcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjI6XHRcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTY0Olx0XHRjYXBhY2l0eSA9IG51bV96b25lcyAqIE1FRElBX0lORk8odXMpLnV6b25lc2l6ZVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTY1Olx0XHRcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIEZsYWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBhZGp1c3RtZW50LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgYm9vbGVhbiBmbGFnIGZyb20gdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byB0aGUgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGNvbmZpcm1zIHRoYXQsIHNoaWZ0aW5nIHRoZSBmaWVsZCBkb3duIGludG8gdGhlIG1lZGlhLXNwZWNpZmljIGluZm8sIGFzIGludGVuZGVkLiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBhbGF1ZGFfaW5mb2AgbGlrZWx5IGNvbnRhaW5zIGRldmljZS1sZXZlbCBpbmZvcm1hdGlvbiwgd2hpbGUgYGFsYXVkYV9tZWRpYV9pbmZvYCBjbGVhcmx5IGRlYWxzIHdpdGggdGhlIHNwZWNpZmljcyBvZiBhIHBhcnRpY3VsYXIgbWVkaWEgaW5zdGFuY2Ugb3IsIGFzIHRoZSBgcG9ydFsyXWAgYXJyYXkgc3VnZ2VzdHMsIGEgc3BlY2lmaWMgcG9ydCBvbiB0aGUgZGV2aWNlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gSXQgc2VlbXMgdW5saWtlbHksIGFzIHdlJiMzOTtyZSBqdXN0IHJlbG9jYXRpbmcgYSBib29sZWFuIGZsYWcuIFRoZSBjb2RlIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIHVzZXMgdGhpcyBmbGFnIHRvIGRldGVybWluZSBpZiBtZWRpYSBpcyBpbml0aWFsaXplZC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGFsbG9jYXRpb24gYXMgaXMgdHlwaWNhbCBmb3IgVVNCIHN0b3JhZ2UtcmVsYXRlZCBzdHJ1Y3R1cmVzLCB0aGUgbmV3IGZpZWxkIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdXRvbWF0aWNhbGx5LiBUaGUgbG9naWMgaW4gYGFsYXVkYV9jaGVja19tZWRpYWAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1lZGlhIGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtZWRpYSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYXJlZCBpZiBtZWRpYSBpcyByZW1vdmVkIG9yIGNoYW5nZWQuIEl0IHNldHMgdGhlIGZsYWcgdG8gYGZhbHNlYCB3aGVuIHRoZSBtZWRpYSBpcyBub3QgaW5pdGlhbGl6ZWQgb3Igd2hlbiBtZWRpYSBpcyBjaGFuZ2VkLiBUaGVyZWZvcmUsIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgZmllbGQgc2hvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5IGFmdGVyIHRoZSBwYXRjaC4KCkkgd2lsbCBkb3VibGUtY2hlY2sgaG93IGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFjdHVhbGx5IGFsbG9jYXRlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbiBhYm91dCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIHZhbGlkLCBidXQgZnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBsb29rcyBsaWtlIGEgY2xlYW4gYW5kIHNlbnNpYmxlIGNoYW5nZSB0byBpbXByb3ZlIHRoZSBncmFudWxhcml0eSBvZiB0aGUgbWVkaWEgaW5pdGlhbGl6YXRpb24gdHJhY2tpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmFsYXVkYV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMTI9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTE3LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTE4Olx0dXMtXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTExOS1cdGlmICghdXMtXHUwMDNlZXh0cmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZWRpYV9pbml0aWFsaXplZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04NT1zdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMDpcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMS19O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3My1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODEtXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4MjpcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4My1cdFx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODQtXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cdFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XHRcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODktXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODcKCQkJCQkJCW91dHB1dDogMjI2CgkJCQkJCQl0aG91Z2h0czogMTY4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgQWxhdWRhIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGFza2VkIHdpdGggcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGJvb2xlYW4gZnJvbSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGNvbnRhaW5zIGFuIGFycmF5IG9mIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYmUgYSBkdWFsLXBvcnQgZGV2aWNlLgoKTGV0JiMzOTtzIGRpc3NlY3QgdGhlIGNoYW5nZS4gVGhlIGluaXRpYWwgc3RydWN0dXJlIGRlZmluaXRpb24gaGFkIGBtZWRpYV9pbml0aWFsaXplZGAgYXQgdGhlIGdsb2JhbCBsZXZlbCBmb3IgdGhlIGRldmljZS4gIFRoZSBwYXRjaCByaWdodGx5IG1vdmVzIGl0ICppbnRvKiB0aGUgcGVyLXBvcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlLiAgTXkgaHlwb3RoZXNpcyBpcyB0aGUgb3JpZ2luYWwgY29kZSBzdWZmZXJlZCBmcm9tIGEgYnVnIHdoZXJlIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiBvbmUgcG9ydCB3YXMgYWZmZWN0aW5nIHRoZSBhc3N1bWVkIHN0YXRlIG9mIHRoZSBvdGhlci4gVGhlIGludGVudGlvbiBpcyBjbGVhcmx5IHRvIHRyYWNrIHRoZSBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0dXMgcGVyIHBvcnQsIG5vdCBmb3IgdGhlIGVudGlyZSBkZXZpY2UuCgpOb3csIGxvb2tpbmcgYXQgYGFsYXVkYV9jaGVja19tZWRpYWAsIHRoZSBjb2RlIHByZXZpb3VzbHkgY2hlY2tlZCBhIGdsb2JhbCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuICBXaXRoIHRoaXMgY2hhbmdlLCBpdCBjaGVja3MgdGhlIHBvcnQtc3BlY2lmaWMgZmxhZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBiZWhhdmlvci4gV2hlbiBtZWRpYSBpcyBub3QgcHJlc2VudCBvciBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgd2UgZnJlZSB0aGUgbWFwcyBhbmQgKmV4cGxpY2l0bHkqIHNldCBgbWVkaWFfaW5pdGlhbGl6ZWRgIHRvIGZhbHNlLiBUaGVuLCBpZiB0aGVyZSYjMzk7cyBhIG1lZGlhIGNoYW5nZSwgdGhlIGNvZGUgYXR0ZW1wdHMgdG8gaW5pdGlhbGl6ZSBpdC4gVGhlIGZpeCBleHBsaWNpdGx5IHJlc2V0cyB0aGUgbWVkaWEgaW5pdGlhbGl6ZWQgZmxhZyB0byBmYWxzZS4gIENyaXRpY2FsbHksIGluaXRpYWxpemF0aW9uICpzZXRzKiB0aGUgZmxhZyB0byB0cnVlLgoKVGhlIGtleSBoZXJlIGlzIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQuIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBtZWFuaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIHN0YXJ0cyBhdCB6ZXJvIChmYWxzZSkuICBUaGUgZml4IGlzIHByb2JhYmx5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGluaXRpYWxpemVzIHRoZSBwb3J0cyBpbmRlcGVuZGVudGx5LCBhbmQgdGhhdCB0aGUgc3RhdGUgb2Ygb25lIHBvcnQgZG9lc24mIzM5O3QgaW1wcm9wZXJseSBhZmZlY3QgdGhlIG90aGVyLgoKTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoaXMgbWlnaHQgaW52b2x2ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBidXQgSSYjMzk7bSBubyBsb25nZXIgc3VyZSBvZiB0aGF0LiBHaXZlbiB0aGF0IGBremFsbG9jYCBpcyBiZWluZyB1c2VkLCBldmVyeXRoaW5nIGlzIHplcm8taW5pdGlhbGl6ZWQuIEkgd2FzIG1vbWVudGFyaWx5IGNvbmZ1c2VkIGJ5IHRoZSBub24tc3RhbmRhcmQgYGt6YWxsb2Nfb2JqYCwgYnV0IGBremFsbG9jYCBpcyB0aGUgY29ycmVjdCBmdW5jdGlvbiBjYWxsLgoKVGhlIHByZXZpb3VzIGJ1ZyBtaWdodCBoYXZlIGxlZCB0byBjYXNlcyB3aGVyZSBhIHBvcnQmIzM5O3MgZGF0YSBtYXBzIHdlcmUgbmV2ZXIgcHJvcGVybHkgaW5pdGlhbGl6ZWQuICBJZiBgbWVkaWFfaW5pdGlhbGl6ZWRgIHdhcyBpbmNvcnJlY3RseSB0cnVlLCB0aGUgZHJpdmVyIHdvdWxkIGFzc3VtZSB0aGUgbWFwcyB3ZXJlIHZhbGlkIHdoZW4gdGhleSB3ZXJlIGluIGZhY3QgbnVsbC4gQWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWFwcyBtZWFucyBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIGtlcm5lbCBwYW5pYyAoYW4gT29wcyksIG9yLCBtb3JlIGxpa2VseSwgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBGdXJ0aGVybW9yZSwgY2FwYWNpdHkgb3Igb3RoZXIgdmFsdWVzIHdvdWxkIGJlIHplcm8uCgpTbywgdGhpcyBjaGFuZ2UgZml4ZXMgYSBsb2dpY2FsIGJ1ZyB3aGVyZSBtZWRpYSBpbml0aWFsaXphdGlvbiB3YXMgdHJhY2tlZCBpbmNvcnJlY3RseSBhbmQgcHJvYmFibHkgc2hhcmVkIGFjcm9zcyB0aGUgZHVhbCBwb3J0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBkaXZpc2lvbiBieSB6ZXJvIGVycm9ycywgd2hpY2ggYXJlICphbHJlYWR5KiBhZGRyZXNzZWQgYnkgdGhlIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChLQVNBTiwga2VybmVsIE9vcHMsIGFuZCBwb3RlbnRpYWxseSBVQlNBTikuCgpJbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBsb2dpYyBjb3JyZWN0aW9uLCBhbmQgdGhlcmUgaXMgbm8gb2J2aW91cyByaXNrIG9mICpyZWFkaW5nKiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDozNC43NDAyMzcxNjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwNDA5MDY5MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NUT1JBR0VfQUxBVURBXCIsXG4gICAgXCJVU0JfU1RPUkFHRVwiLFxuICAgIFwiU0NTSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsYXVkYV9wcm9iZVwiLFxuICAgIFwiYWxhdWRhX3RyYW5zcG9ydFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIGJ5IGNvcnJlY3RseSBhY2Nlc3NpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmllbGQgZnJvbSBgTUVESUFfSU5GTyh1cylgIGluc3RlYWQgb2YgYGluZm9gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBVU0IgZHJpdmVyIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIGZ1enplZCB2aWEgVVNCIGVtdWxhdGlvbiAoZS5nLiwgZHVtbXlfaGNkKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6MzQuNzQwMjQwODE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxMTI2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjA3YmI0YzMwYjBlOTAwYjQzYmNmZTk1OWNkZDhhYjk4YzA5ODU2ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbmluZGV4IDY5MWZlNDcwMDljZjYuLjgwNzQ5MmY3NTRhNzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcXG5AQCAtOTYsNiArOTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xcbiBcXG4gXFx0dTE2ICoqbGJhX3RvX3BiYTtcXHRcXHQvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqL1xcbiBcXHR1MTYgKipwYmFfdG9fbGJhO1xcdFxcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXFxuK1xcbitcXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xcbiB9O1xcbiBcXG4gc3RydWN0IGFsYXVkYV9pbmZvIHtcXG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuIFxcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzYztcXHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxO1xcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cXG4tXFxuLVxcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuIH07XFxuIFxcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVxcdTAwM2NcXHUwMDNjOCApIClcXG5AQCAtNDcxLDYgKzQ3MSw3IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0XFx0fHwgKChzdGF0dXNbMV0gXFx1MDAyNiAweDAxKSA9PSAwKSkge1xcbiBcXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxcXG5cXFwiKTtcXG4gXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbitcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG5AQCAtNDc4LDEyICs0NzksMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuLVxcdGlmIChzdGF0dXNbMF0gXFx1MDAyNiAweDA4IHx8ICFpbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xcbitcXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4gXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4gXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbitcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiBcXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG4gXFx0XFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuK1xcdFxcdFxcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDozNS45MzIwMDU2NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4Njg2Nzk5NTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDdiYjRjMzBiMGU5MDBiNDNiY2ZlOTU5Y2RkOGFiOThjMDk4NTZlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTI6NTA6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uODA3NDkyZjc1NGE3NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICs5Niw4IEBAIHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XG4gXG4gXHR1MTYgKipsYmFfdG9fcGJhO1x0XHQvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqL1xuIFx0dTE2ICoqcGJhX3RvX2xiYTtcdFx0LyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi9cbitcbitcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuIFx0dW5zaWduZWQgY2hhciBzZW5zZV9rZXk7XG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzYztcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2NxO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqL1xuLVxuLVx0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpXHUwMDNjXHUwMDNjOCApIClcbkBAIC00NzEsNiArNDcxLDcgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHR8fCAoKHN0YXR1c1sxXSBcdTAwMjYgMHgwMSkgPT0gMCkpIHtcbiBcdFx0dXNiX3N0b3JfZGJnKHVzLCBcIk5vIG1lZGlhLCBvciBkb29yIG9wZW5cXG5cIik7XG4gXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC00NzgsMTIgKzQ3OSwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4rXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCIpO1xuIFx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XG4gXHRcdGlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi1cdFx0XHRpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbitcdFx0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgyODtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjM1LjkzMjAwNjc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyODYxOTIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVVNCIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY2AuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHByZXR0eSBmb2N1c2VkLCBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBgYWxhdWRhX2luZm9gIHN0cnVjdCB0byBgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgY29kZSBhbHNvIHVwZGF0ZXMgYGFsYXVkYV9jaGVja19tZWRpYWAgdG8gcmVmbGVjdCB0aGlzIGNoYW5nZSBhbmQgZW5zdXJlcyB0aGUgZmxhZyBpcyBwcm9wZXJseSByZXNldCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG5cbk5vdywgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIGNvZGUgcGF0aCB3b3J0aCBwdXJzdWluZy4gSXQncyBhIFVTQiBzdG9yYWdlIGRyaXZlciBmb3Igc29tZXRoaW5nIGNhbGxlZCBcIkFsYXVkYS5cIiBPa2F5LCB0aGF0IG5hcnJvd3MgaXQgZG93biwgYW5kIFVTQiBkcml2ZXJzIGFyZSBkZWZpbml0ZWx5IGF0dHJhY3RpdmUgZnV6emluZyB0YXJnZXRzLiBXZSd2ZSBnb3QgdG9vbHMgZm9yIHRoYXQ7IGR1bW15X2hjZCBvciBzeXprYWxsZXIncyBVU0IgZnV6emVyIGNvdWxkIHdvcmsgaGVyZS5cblxuVGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IGxvY2F0aW5nIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgdGhpcyBzcGVjaWZpYyBkcml2ZXIuIEtub3dpbmcgdGhlIGNvbmZpZyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGRyaXZlciBpcyB1c2VkIGFuZCBlbmFibGUgaXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0MS4yMTgyMDE4OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MjU1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxhdWRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NDEuMjYyODUxOTExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNzU1OTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBhIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlnIEknbSBsb29raW5nIGF0IGlzIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBUaGF0IHJpbmdzIGEgYmVsbCwgYnV0IEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpY3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gTXkgZ28tdG8gZm9yIHRoZXNlIHRoaW5ncyBpcyBhbHdheXMgdGhlIEtjb25maWcgZmlsZSBpbiB0aGUgZHJpdmVyJ3MgZGlyZWN0b3J5LiBMZXQncyBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIGJlIGRlZmluZWQgZm9yIFVTQiBzdG9yYWdlLCBpbmNsdWRpbmcgdGhpcyBzcGVjaWZpYyBvcHRpb24uIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuIExldCdzIHNlZSBpZiB0aGlzIG9wdGlvbiBkZXBlbmRzIG9uIG90aGVyIGNvbmZpZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0NC43NzA0MTQyNzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdFxcbiAxMjM6XFx0XFx0ICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci5cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4gMTI4OlxcdFxcdHRyaXN0YXRlIFxcXCJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnRcXFwiXFxuIDEyOTpcXHRcXHRoZWxwXFxuIDEzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxcbiAxMzE6XFx0XFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aFxcbiAxMzQ6XFx0XFx0ICBYRCBhbmQgU21hcnRNZWRpYSBjYXJkcy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLlxcbiAxMzc6XFx0XFxuIDEzODpcXHRjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG4gMTM5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjQ0Ljc3MDQ3MTczMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjEyNzk0NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGl0IGhhbmdzIG9mZiB0aGUgYFVTQl9TVE9SQUdFYCBwYXJlbnQuIFRoYXQncyB0aGUga2V5LiBCZWZvcmUgSSBjYW4gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggKnRoaXMqIGZlYXR1cmUsIEkgKmhhdmUqIHRvIGdldCBhIGdyaXAgb24gYFVTQl9TVE9SQUdFYCBpdHNlbGYuIEl0J3MgdGhlIGZvdW5kYXRpb24uIFRpbWUgdG8gZ28gY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhbmQgc2VlIHdoYXQncyBjb250cm9sbGluZyBpdHMgYnVpbGQgYW5kIGludGVncmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dCBiZWZvcmUgSSBwcm9jZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTQ2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MDo0OC4zMzE3NTI5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NTg2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9TVE9SQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9Nj1jb21tZW50IFxcXCJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo4OmNvbmZpZyBVU0JfU1RPUkFHRVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy05LVxcdHRyaXN0YXRlIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MjY9aWYgVVNCX1NUT1JBR0VcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMjctXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjI4OmNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0yOS1cXHRib29sIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMzMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjM0OmNvbmZpZyBVU0JfU1RPUkFHRV9SRUFMVEVLXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIENhcmQgUmVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9NDI9Y29uZmlnIFJFQUxURUtfQVVUT1BNXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNDYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjQ3OmNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNTQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjU1OmNvbmZpZyBVU0JfU1RPUkFHRV9GUkVFQ09NXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU2LVxcdHRyaXN0YXRlIFxcXCJGcmVlY29tIFVTQi9BVEFQSSBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy02Mi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6NjM6Y29uZmlnIFVTQl9TVE9SQUdFX0lTRDIwMFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiSVNELTIwMCBVU0IvQVRBIEJyaWRnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTc5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo4MDpjb25maWcgVVNCX1NUT1JBR0VfVVNCQVRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctODEtXFx0dHJpc3RhdGUgXFxcIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTAyOmNvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTAzLVxcdHRyaXN0YXRlIFxcXCJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExMTpjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTExMi1cXHR0cmlzdGF0ZSBcXFwiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjExOTpjb25maWcgVVNCX1NUT1JBR0VfSlVNUFNIT1RcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTIwLVxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEyNzpjb25maWcgVVNCX1NUT1JBR0VfQUxBVURBXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyOC1cXHR0cmlzdGF0ZSBcXFwiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTM4OmNvbmZpZyBVU0JfU1RPUkFHRV9PTkVUT1VDSFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzktXFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNTEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE1Mjpjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTUzLVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTY1OmNvbmZpZyBVU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiU0FUIGVtdWxhdGlvbiBvbiBDeXByZXNzIFVTQi9BVEEgQnJpZGdlIHdpdGggQVRBQ0JcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTc2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNzc6Y29uZmlnIFVTQl9TVE9SQUdFX0VORV9VQjYyNTBcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTc4LVxcdHRyaXN0YXRlIFxcXCJVU0IgRU5FIGNhcmQgcmVhZGVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjQ4LjM3NzMxNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTE2NTA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBVU0IgU3RvcmFnZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGNvbmZpZyBVU0JfU1RPUkFHRWAgc2V0dGluZ3MuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCB3aGF0IGl0IGRvZXMsIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIE5vIHBvaW50IGluIHRyeWluZyB0byBjb25maWd1cmUgdGhpcyBpZiBpdCByZWxpZXMgb24gc29tZSBmdW5kYW1lbnRhbCBwaWVjZSB0aGF0J3MgZWl0aGVyIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgbWFraW5nIHN1cmUgSSBrbm93IHdoaWNoIG90aGVyIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGFuZCB3aGF0IHRoZSBwb3RlbnRpYWwgY29uZmxpY3RzIG1pZ2h0IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSwgc28gSSBkb24ndCBnbyBkb3duIGEgcmFiYml0IGhvbGUgdHJ5aW5nIHRvIGdldCBzb21ldGhpbmcgd29ya2luZyB0aGF0J3MgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZXhpc3Rpbmcgc3lzdGVtLiBUaGlzIGlzIGFib3V0IG1ha2luZyBzdXJlIGFsbCB0aGUgZHVja3MgYXJlIGluIGEgcm93IGJlZm9yZSBJIHN0YXJ0IHR3ZWFraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NTIuMTY4OTY3OTk2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29tbWVudCBcXFwiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb1xcXCJcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIFVTQl9TVE9SQUdFXFxuICAgOTpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0XFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBTQ1NJXFxuICAxMTpcXHRcXHRoZWxwXFxuICAxMjpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBVU0IgbWFzcyBzdG9yYWdlIGRldmljZXMgdG8geW91clxcbiAgMTM6XFx0XFx0ICBjb21wdXRlcidzIFVTQiBwb3J0LiBUaGlzIGlzIHRoZSBkcml2ZXIgeW91IG5lZWQgZm9yIFVTQlxcbiAgMTQ6XFx0XFx0ICBmbG9wcHkgZHJpdmVzLCBVU0IgaGFyZCBkaXNrcywgVVNCIHRhcGUgZHJpdmVzLCBVU0IgQ0QtUk9NcyxcXG4gIDE1OlxcdFxcdCAgVVNCIGZsYXNoIGRldmljZXMsIGFuZCBtZW1vcnkgc3RpY2tzLCBhbG9uZyB3aXRoXFxuICAxNjpcXHRcXHQgIHNpbWlsYXIgZGV2aWNlcy4gVGhpcyBkcml2ZXIgbWF5IGFsc28gYmUgdXNlZCBmb3Igc29tZSBjYW1lcmFzXFxuICAxNzpcXHRcXHQgIGFuZCBjYXJkIHJlYWRlcnMuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAnU0NTSScgc3VwcG9ydCBiZWluZyBlbmFibGVkLCBidXQgeW91XFxuICAyMDpcXHRcXHQgIHByb2JhYmx5IGFsc28gbmVlZCAnU0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjUyLjE2OTAzMzU0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjY3OTA3NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgUGxhbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYFVTQl9TVE9SQUdFYCByZWxpZXMgb24gdGhlIGBTQ1NJYCBzdWJzeXN0ZW0uIE1ha2VzIHNlbnNlLCB0aGF0J3MgYSBjb21tb24gZGVwZW5kZW5jeS4gTm93LCB0aGUgY29uZmlnIG9wdGlvbiB0byBlbmFibGUgdGhlIHNwZWNpZmljIHBpZWNlIEknbSBpbnRlcmVzdGVkIGluLCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgaXMgdGhlIGtleS4gTGV0J3MgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlLiBUaGUgcGF0Y2ggaW4gcXVlc3Rpb24gaXMgbW9kaWZ5aW5nIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLiBUaGVyZWZvcmUsIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gZnVuY3Rpb25zIHJlbGF0ZWQgdG8gYGFsYXVkYV9jaGVja19tZWRpYWAuIFRoYXQncyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIHdpbGwgbW9zdCBsaWtlbHkgYmUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGlucHV0cyBhbmQgY29uZGl0aW9ucyB3aXRoaW4gdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTA6NTYuODM2OTQzMzk5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM4Mj1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU2LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExMzI9c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ5LVxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlRFU1RfVU5JVF9SRUFEWVxcXFxuXFxcIik7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOlxcdFxcdHJldHVybiBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTU3OlxcdFxcdHJjID0gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTgtXFx0XFx0aWYgKHJjICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3ODpcXHRcXHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc5LVxcdFxcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExOTU6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5Ni1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUwOjU2Ljg4MjU3MjMwOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTkwMzU4MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBQZXJzcGVjdGl2ZSBvbiB0aGUgQWxhdWRhIFRyYW5zcG9ydCBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYXJjaGl0ZWN0dXJlIGhlcmUgaXMgY2xlYXIuIFdlJ3ZlIGdvdCBgYWxhdWRhX3RyYW5zcG9ydGAgYXMgdGhlIGNlbnRyYWwgaHViIOKAkyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBkYXRhIG1vdmVtZW50IHdpdGhpbiB0aGlzIGRyaXZlci4gSXQncyB0aGUgY29yZSB0cmFuc3BvcnQgbWVjaGFuaXNtLCB0aGUgbWFpbiBldmVudC4gQW5kIGZyb20gd2hhdCBJIHNlZSwgaXQgbG9va3MgbGlrZSBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYGFsYXVkYV90cmFuc3BvcnRgLiBUaGF0IGltcGxpZXMgYGFsYXVkYV9jaGVja19tZWRpYWAgaXMgYSBjcml0aWNhbCBzdWJyb3V0aW5lLCBhIHN1cHBvcnRpbmcgY2FzdCBtZW1iZXIsIHRoYXQgaXMgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBhc3Nlc3NpbmcgbWVkaWEgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIG9yIHBlcmhhcHMgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGludGVuZGVkIG1lZGlhIHRvIGhhbmRsZSB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uJ3MgbmVlZHMuIEl0IGlzIGxpa2VseSBhbiBlc3NlbnRpYWwgcHJlY29uZGl0aW9uIGNoZWNrIG9yIGEgcG9zdC10cmFuc3BvcnQgdmVyaWZpY2F0aW9uIHN0ZXAsIGVuc3VyaW5nIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHByb2Nlc3MgbWFuYWdlZCBieSBgYWxhdWRhX3RyYW5zcG9ydGAuIFRoZSBpbnRlZ3JhdGlvbiBpcyB0eXBpY2FsIGFuZCBlZmZpY2llbnQgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDEzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTE6MDEuMDcyOTMzNjg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzgwNjEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTEyPXN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI0MT1zdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI1My1cXHR1cy1cXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXFxcIkFsYXVkYSBDb250cm9sL0J1bGtcXFwiO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI1NDpcXHR1cy1cXHUwMDNldHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNTUtXFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjAxLjExNjc0MjYzOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1NTQ2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGFsYXVkYV90cmFuc3BvcnRgIENhbGxiYWNrKipcblxuT2theSwgc28gYGFsYXVkYV90cmFuc3BvcnRgIGlzIHRoZSBgdXMtXHUwMDNldHJhbnNwb3J0YCBjYWxsYmFjaywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgY3JpdGljYWwgZm9yIFVTQiBzdG9yYWdlLiBJdCdzIGVzc2VudGlhbGx5IHRoZSBtYWluIGludGVyZmFjZS4gR2l2ZW4gaXRzIGNvbm5lY3Rpb24gdG8gdGhlIFVTQiBzdG9yYWdlIGNvcmUsIGl0J3MgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uIGZvciBub3cuIE15IGludHVpdGlvbiBzYXlzIHRoZXJlIGlzIGEgcGF0aCBoZXJlLCBzbyBpdCdzIHRoZSByaWdodCBjaG9pY2UgZm9yIHRoZSBkZWVwIGRpdmUuXG5cbk5vdywgSSdtIG5vdGluZyBgYWxhdWRhX2NoZWNrX21lZGlhYC4gSXQncyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgc3VnZ2VzdHMgaXQncyAqbm90KiBpbmxpbmVkLCBvciBwZXJoYXBzIGlzIGlubGluZWQgYnV0IHJlbWFpbnMgcmVsYXRpdmVseSBsYXJnZS4gSSB0aGluayBpdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBzbyBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGl0cyBzaXplIHRvIHVuZGVyc3RhbmQgaXRzIGZvb3RwcmludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjA2LjIzMjI5MTEyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1NixcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1NjpcXHQgKi9cXG4gNDU3OlxcdHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gNDU4OlxcdHtcXG4gNDU5OlxcdFxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXFx1MDAzZWV4dHJhO1xcbiA0NjA6XFx0XFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbiA0NjE6XFx0XFx0aW50IHJjO1xcbiA0NjI6XFx0XFxuIDQ2MzpcXHRcXHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xcbiA0NjQ6XFx0XFx0aWYgKHJjICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xcbiA0NjU6XFx0XFx0XFx0c3RhdHVzWzBdID0gMHhGMDtcXHQvKiBQcmV0ZW5kIHRoZXJlJ3Mgbm8gbWVkaWEgKi9cXG4gNDY2OlxcdFxcdFxcdHN0YXR1c1sxXSA9IDA7XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXG4gNDY5OlxcdFxcdC8qIENoZWNrIGZvciBubyBtZWRpYSBvciBkb29yIG9wZW4gKi9cXG4gNDcwOlxcdFxcdGlmICgoc3RhdHVzWzBdIFxcdTAwMjYgMHg4MCkgfHwgKChzdGF0dXNbMF0gXFx1MDAyNiAweDFGKSA9PSAweDEwKVxcbiA0NzE6XFx0XFx0XFx0fHwgKChzdGF0dXNbMV0gXFx1MDAyNiAweDAxKSA9PSAwKSkge1xcbiA0NzI6XFx0XFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcXFxuXFxcIik7XFxuIDQ3MzpcXHRcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIDQ3NDpcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA0NzU6XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcXG4gNDc2OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XFxuIDQ3NzpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG4gNDc4OlxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xcbiA0Nzk6XFx0XFx0fVxcbiA0ODA6XFx0XFxuIDQ4MTpcXHRcXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuIDQ4MjpcXHRcXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhTUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4gNDgzOlxcdFxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIGNoYW5nZSBkZXRlY3RlZFxcXFxuXFxcIik7XFxuIDQ4NDpcXHRcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIDQ4NTpcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbiA0ODY6XFx0XFx0XFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XFxuIDQ4NzpcXHRcXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuIDQ4ODpcXHRcXHRcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuIDQ4OTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcXG4gNDkwOlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XFxuIDQ5MTpcXHRcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG4gNDkyOlxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEO1xcbiA0OTM6XFx0XFx0fVxcbiA0OTQ6XFx0XFxuIDQ5NTpcXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjA2LjIzMjM4OTAyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI0OTg3MjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFsYXVkYSBEcml2ZXIncyBDb3JlIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRpYyBmdW5jdGlvbiwgbm90aGluZyB0b28gZXhjaXRpbmcgdGhlcmUuIEJ1dCBgYWxhdWRhX3RyYW5zcG9ydGAgaXMgYWxzbyBzdGF0aWMsIHlldCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciDigJMgdGhhdCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgdGhlIGtleS4gTGV0IG1lIGNvbmZpcm0gaWYgYGFsYXVkYV90cmFuc3BvcnRgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2wuIEFoYSwgeWVzLCBpdCBhcHBlYXJzIHRvIGJlIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBTQ1NJIGNvbW1hbmQgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBkcml2ZXIsIGFzIEkgc3VzcGVjdGVkLiBUaGF0J3MgZ29vZCB0byBrbm93LiBOb3csIHdoYXQncyB0aGlzIGBhbGF1ZGFfcHJvYmVgIGZ1bmN0aW9uIGRvaW5nIGhlcmU/IEl0IGNvdWxkIHByb3ZpZGUgdXNlZnVsIGNvbnRleHQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBkZWx2ZSBpbnRvIGBhbGF1ZGFfcHJvYmVgIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjIxLjQ4MjI2NjgxOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzY0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcbjEyNDE6XFx0c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuMTI0MjpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbjEyNDM6XFx0e1xcbjEyNDQ6XFx0XFx0c3RydWN0IHVzX2RhdGEgKnVzO1xcbjEyNDU6XFx0XFx0aW50IHJlc3VsdDtcXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuMTI0ODpcXHRcXHRcXHRcXHQoaWQgLSBhbGF1ZGFfdXNiX2lkcykgKyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcXG4xMjQ5OlxcdFxcdFxcdFxcdFxcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XFxuMTI1MDpcXHRcXHRpZiAocmVzdWx0KVxcbjEyNTE6XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4xMjUyOlxcdFxcbjEyNTM6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFxcXCJBbGF1ZGEgQ29udHJvbC9CdWxrXFxcIjtcXG4xMjU0OlxcdFxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbjEyNTU6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuMTI1NjpcXHRcXHR1cy1cXHUwMDNlbWF4X2x1biA9IDE7XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7XFxuMTI1OTpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjEyNjA6XFx0fVxcbjEyNjE6XFx0XFxuMTI2MjpcXHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcXG4xMjYzOlxcdFxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG4xMjY0OlxcdFxcdC5wcm9iZSA9XFx0YWxhdWRhX3Byb2JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MToyMS40ODI0MDY3ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIyNjI3MjUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBBbGF1ZGEgZm9yIFVTQiBTdG9yYWdlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBoYW5kbGUgdGhlIEFsYXVkYSBwcm9iZSBhbmQgdHJhbnNwb3J0IGZ1bmN0aW9ucywgYGFsYXVkYV9wcm9iZWAgYW5kIGBhbGF1ZGFfdHJhbnNwb3J0YC4gVGhvc2Ugc2VlbSBsaWtlIGdvb2Qga2V5IHN5bWJvbHMgdG8gd29yayB3aXRoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIHNldC4gSSBrbm93IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYFVTQl9TVE9SQUdFX0FMQVVEQWAgYW5kIGBVU0JfU1RPUkFHRWAuIFdhaXQuLi4gSSBzZWUgdGhhdCBgVVNCX1NUT1JBR0VgIGRlcGVuZHMgb24gYFNDU0lgLCBzbyBJIHNob3VsZCBwcm9iYWJseSBtYWtlIHN1cmUgYFNDU0lgIGlzIGluY2x1ZGVkIGFzIHdlbGwuIEFoLCBJIHNlZSwgdGhlIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgYFVTQl9TVE9SQUdFX0FMQVVEQWAsICpzaG91bGQqIGJlIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBLYnVpbGQgc3lzdGVtIHRvIGNvbXBpbGUgYGFsYXVkYS5jYCwgcHJvdmlkZWQgYFVTQl9TVE9SQUdFYCBpcyBlbmFibGVkIGluIGdlbmVyYWwuIEp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkZXBlbmRlbmNpZXMgdGhhdCBJJ3ZlIG92ZXJsb29rZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZydzIHNldCB1cCBjb3JyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MToyNS43MDg2ODE3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwOTg3ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsYXVkYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZT0xOT11c2Itc3RvcmFnZS0kKENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRykgKz0gZGVidWcub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZToyMTpvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKVxcdCs9IHVtcy1hbGF1ZGEub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjItb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpICs9IHVtcy1jeXByZXNzLm9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKVxcdFxcdCs9IHVtcy11c2JhdC5vXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjM1OnVtcy1hbGF1ZGEteVxcdFxcdDo9IGFsYXVkYS5vXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNi11bXMtY3lwcmVzcy15XFx0XFx0Oj0gY3lwcmVzc19hdGFjYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjI1Ljc4OTY3NDgwNloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUxNjcxMDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgb2JqZWN0aXZlIGlzIHRvIGVuYWJsZSBgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQWAuICBPa2F5LCBsb29rcyBsaWtlIHRoYXQgb3B0aW9uIGlzIHRoZSBrZXkgdG8gYWN0aXZhdGluZyB0aGUgZmVhdHVyZSBJJ20gaW50ZXJlc3RlZCBpbiwgYnV0IGl0IGhpbmdlcyBvbiBhIGZldyBwcmVyZXF1aXNpdGVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfVVNCX1NUT1JBR0VgIGlzIGFsc28gZW5hYmxlZCBiZWNhdXNlIGBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBYCByZXF1aXJlcyBpdC4gQWgsIGFuZCBgQ09ORklHX1VTQl9TVE9SQUdFYCBpbiB0dXJuIGRlcGVuZHMgb24gYENPTkZJR19TQ1NJYC4gR290IGl0LiBTbyB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaXQgc2hvdWxkLCBteSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBuZWVkcyB0byBpbmNsdWRlIGBVU0JfU1RPUkFHRV9BTEFVREFgLCBgVVNCX1NUT1JBR0VgLCBhbmQgYFNDU0lgLlxuXG5XYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCBgVVNCX1NUT1JBR0VgIHJlcXVpcmVzIGBVU0JgLiBJJ2xsIHJldmlzaXQgdGhlIGRlcGVuZGVuY2llcyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc2NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUxOjU2LjMwNjM4Nzg1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMjk0MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfU1RPUkFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTY9Y29tbWVudCBcXFwiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb1xcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6ODpjb25maWcgVVNCX1NUT1JBR0VcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctOS1cXHR0cmlzdGF0ZSBcXFwiVVNCIE1hc3MgU3RvcmFnZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTI2PWlmIFVTQl9TVE9SQUdFXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTI3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoyODpjb25maWcgVVNCX1NUT1JBR0VfREVCVUdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMjktXFx0Ym9vbCBcXFwiVVNCIE1hc3MgU3RvcmFnZSB2ZXJib3NlIGRlYnVnXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzozNDpjb25maWcgVVNCX1NUT1JBR0VfUkVBTFRFS1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0zNS1cXHR0cmlzdGF0ZSBcXFwiUmVhbHRlayBDYXJkIFJlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnPTQyPWNvbmZpZyBSRUFMVEVLX0FVVE9QTVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTQ2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo0Nzpjb25maWcgVVNCX1NUT1JBR0VfREFUQUZBQlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy00OC1cXHR0cmlzdGF0ZSBcXFwiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTU0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzo1NTpjb25maWcgVVNCX1NUT1JBR0VfRlJFRUNPTVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjYzOmNvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDBcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctNjQtXFx0dHJpc3RhdGUgXFxcIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy03OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6ODA6Y29uZmlnIFVTQl9TVE9SQUdFX1VTQkFUXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTgxLVxcdHRyaXN0YXRlIFxcXCJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMDEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEwMjpjb25maWcgVVNCX1NUT1JBR0VfU0REUjA5XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEwMy1cXHR0cmlzdGF0ZSBcXFwiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTEwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMTE6Y29uZmlnIFVTQl9TVE9SQUdFX1NERFI1NVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMTItXFx0dHJpc3RhdGUgXFxcIlNhbkRpc2sgU0REUi01NSBTbWFydE1lZGlhIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTE4LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMTk6Y29uZmlnIFVTQl9TVE9SQUdFX0pVTVBTSE9UXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEyMC1cXHR0cmlzdGF0ZSBcXFwiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTI2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxMjc6Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMjgtXFx0dHJpc3RhdGUgXFxcIk9seW1wdXMgTUFVU0ItMTAvRnVqaSBEUEMtUjEgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzODpjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM5LVxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTUxLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZzoxNTI6Y29uZmlnIFVTQl9TVE9SQUdFX0tBUk1BXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE1My1cXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllclxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNjQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjE2NTpjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCXFxcIlxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3Ni1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc6MTc3OmNvbmZpZyBVU0JfU1RPUkFHRV9FTkVfVUI2MjUwXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTE3OC1cXHR0cmlzdGF0ZSBcXFwiVVNCIEVORSBjYXJkIHJlYWRlciBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MTo1Ni40MTg2ODYxMzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNjgxNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgVVNCIFN0b3JhZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUgcmVsYXRlZCB0byBgVVNCX1NUT1JBR0VgLCBhbmQgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBidWlsdCBvbiB0b3Agb2YgYFNDU0lgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHRoaXMgdHlwZSBvZiBkZXZpY2UuIFRoZSBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiBgYWxhdWRhX2NoZWNrX21lZGlhYC4gQXBwYXJlbnRseSwgdGhlcmUncyBhIGJ1ZyBpbiBob3cgYG1lZGlhX2luaXRpYWxpemVkYCBpcyBhY2Nlc3NlZDsgaXQncyBiZWluZyBwdWxsZWQgZnJvbSB0aGUgd3Jvbmcgc3RydWN0dXJlIChgaW5mb2AgaW5zdGVhZCBvZiBgTUVESUFfSU5GTyh1cylgKS4gVGhhdCBzY3JlYW1zIHBvdGVudGlhbCBjcmFzaCBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHVucHJlZGljdGFibGUgYmVoYXZpb3Ig4oCTIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBpc3N1ZS4gVGhpcyBpcyBjbGVhcmx5IGEgYnVnIGZpeCwgYW5kIHRoZSBjaGFuZ2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGEgc3VidGxlIHJlZ3Jlc3Npb24uXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgc2V2ZXJpdHkgb2YgYSBjcmFzaCBpbiBzdG9yYWdlIGNvZGUsIEknbSB0aGlua2luZyB0aGlzIGlzIHdvcnRoIGEgZnV6emluZyBjYW1wYWlnbiB0byByZWFsbHkgcHV0IGl0IHRocm91Z2ggaXRzIHBhY2VzLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyBhIGNyaXRpY2FsIGFjY2VzcyBlcnJvci4gSWYgSSB3ZXJlIGZ1enppbmcgdGhpcywgSSdkIHdhbnQgdG8gZm9jdXMgb24gdGhlIGBhbGF1ZGFfdHJhbnNwb3J0YCBhbmQgYGFsYXVkYV9wcm9iZWAgc3ltYm9scyBhcyB0aG9zZSBzZWVtIG1vc3QgcmVsYXRlZCB0byBob3cgdGhlIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIOKAkyBJJ2xsIG5lZWQgdG8gY2hlY2sgYFVTQl9TVE9SQUdFX0FMQVVEQWAsIGBVU0JfU1RPUkFHRWAsIGFuZCBgU0NTSWAgdG8gbWFrZSBzdXJlIG15IHRlc3RpbmcgZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGZ1enppbmcgY2FtcGFpZ25zIGluY2x1ZGUgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBtZWRpYSBzdGF0ZXMgYW5kIGRldmljZSBkaXNjb25uZWN0aW9ucy9yZWNvbm5lY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1NiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuNjQ1NTA1MDUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDkwOTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIEFsYXVkYSBVU0Igc3RvcmFnZSBkcml2ZXIgYnkgY29ycmVjdGx5IGFjY2Vzc2luZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBmcm9tIGBNRURJQV9JTkZPKHVzKWAgaW5zdGVhZCBvZiBgaW5mb2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIFVTQiBkcml2ZXIgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgZnV6emVkIHZpYSBVU0IgZW11bGF0aW9uIChlLmcuLCBkdW1teV9oY2QpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9TVE9SQUdFX0FMQVVEQVwiLFxuICAgIFwiVVNCX1NUT1JBR0VcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImFsYXVkYV90cmFuc3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciBieSBjb3JyZWN0bHkgYWNjZXNzaW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZpZWxkIGZyb20gYE1FRElBX0lORk8odXMpYCBpbnN0ZWFkIG9mIGBpbmZvYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgVVNCIGRyaXZlciB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiBlbXVsYXRpb24gKGUuZy4sIGR1bW15X2hjZCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjAyLjgwMDAwNjM2OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3OTgxMTI1NDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuODAwODc0MDI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyNzk4MDI1MjI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwN2JiNGMzMGIwZTkwMGI0M2JjZmU5NTljZGQ4YWI5OGMwOTg1NmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjo1MDozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5pbmRleCA2OTFmZTQ3MDA5Y2Y2Li44MDc0OTJmNzU0YTc2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuQEAgLTk2LDYgKzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHtcbiBcbiBcdHUxNiAqKmxiYV90b19wYmE7XHRcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXG4gXHR1MTYgKipwYmFfdG9fbGJhO1x0XHQvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqL1xuK1xuK1x0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4gXHR1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTtcbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovXG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovXG4tXG4tXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSlcdTAwM2NcdTAwM2M4ICkgKVxuQEAgLTQ3MSw2ICs0NzEsNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwiKTtcbiBcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4rXHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDNBO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTQ3OCwxMiArNDc5LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbi1cdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIWluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcbitcdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cIik7XG4gXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuK1x0XHRcdE1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6NTI6MDIuODAwODc1NTY4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3Njg4ODAwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBNZWRpYSBJbml0aWFsaXphdGlvbiBGbGFnKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkb2luZyBzb21lIHJlZmFjdG9yaW5nLCBzcGVjaWZpY2FsbHkgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgc2hpZnRpbmcgaXQgZnJvbSB0aGUgbWFpbiBgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byBhIG1vcmUgc3BlY2lmaWMgYGFsYXVkYV9tZWRpYV9pbmZvYCBzdHJ1Y3R1cmUuIFRoYXQgbWFrZXMgc2Vuc2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgZm9yIGZ1dHVyZSBleHBhbnNpb24gcmVsYXRlZCB0byBtZWRpYS1zcGVjaWZpYyBpbmZvcm1hdGlvbi5cblxuSXQgYWxzbyBtZWFucyB0aGF0IHRoZSBgYWxhdWRhX2NoZWNrX21lZGlhYCBmdW5jdGlvbiBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcyBjaGFuZ2UgaW4gbG9jYXRpb24uIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBjb2RlJ3MgdXNpbmcgYGluZm9gIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgc3RydWN0IGFuZCBub3csIHRvIGdldCB0aGUgbmV3IG9uZSwgaXQgbG9va3MgbGlrZSBpdCBpcyB1c2luZyBgTUVESUFfSU5GTyh1cylgLiBUaGF0J3MgdGhlIGtleS5cblxuSGFuZyBvbiBhIHNlY29uZOKApiBJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcuIElzIGBhbGF1ZGFfbWVkaWFfaW5mb2AgYSAqbWVtYmVyKiB3aXRoaW4gYGFsYXVkYV9pbmZvYCwgb3IgaXMgaXQgc29tZWhvdyBhY2Nlc3NlZCB0aHJvdWdoIGB1cy1cdTAwM2VleHRyYWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbnMuIEJldHRlciBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgIGFuZCBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlIGNvcnJlY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHN0cnVjdHMgc3RyYWlnaHQgaW4gbXkgaGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjIwLjQ4OTY4MDE3NloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwNzc3MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FRElBX0lORk9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTEwMz1zdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cXHUwMDNlc3JiLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWx1blxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3OiNkZWZpbmUgTUVESUFfSU5GTyh1cykgKChzdHJ1Y3QgYWxhdWRhX2luZm8gKil1cy1cXHUwMDNlZXh0cmEpLVxcdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE4LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zODI9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQyNTpcXHRNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlY2hpcHNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI2LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIkZvdW5kIG1lZGlhIHdpdGggY2FwYWNpdHk6ICVsZE1CXFxcXG5cXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI3OlxcdFxcdCAgICAgTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgMjApO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI4LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI5OlxcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXFx1MDAzZXBhZ2VzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMDpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cXHUwMDNlYmxvY2tzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMTpcXHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVxcdTAwM2V6b25lc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzM6XFx0TUVESUFfSU5GTyh1cykucGFnZXNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZXBhZ2VzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNDpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZWJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzU6XFx0TUVESUFfSU5GTyh1cykuem9uZXNpemUgPSAxIFxcdTAwM2NcXHUwMDNjIG1lZGlhX2luZm8tXFx1MDAzZXpvbmVzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNzpcXHRNRURJQV9JTkZPKHVzKS51em9uZXNpemUgPSAoKDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlem9uZXNoaWZ0KSAvIDEyOCkgKiAxMjU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XFx0TUVESUFfSU5GTyh1cykuYmxvY2ttYXNrID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplIC0gMTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MDpcXHRudW1fem9uZXMgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDE6XFx0XFx0KyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MjpcXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQzOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDQ6XFx0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NDUtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcyLVxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk5vIG1lZGlhLCBvciBkb29yIG9wZW5cXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDczOlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODI6XFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODMtXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NDpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XFx0XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg5LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz01NzA9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTc0LVxcdGludCBpLCBqO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTc1OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTc2OlxcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NzctXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQsIGxiYV9yZWFsLCBibG9ja251bTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc4OlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPSBsYmFfdG9fcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Njc5OlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPSBwYmFfdG9fbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjgwLVxcdHJlc3VsdCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTY5ND1zdGF0aWMgdm9pZCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk1LXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY5NjpcXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTc6XFx0XFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjk4LVxcdFxcdGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTczMz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrX3JhdyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc0OS1cXHRyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLVxcdTAwM2VyZWN2X2J1bGtfcGlwZSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc1MDpcXHRcXHRkYXRhLCAoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBwYWdlcywgTlVMTCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NTEtfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03NTk9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Mi1cXHRpbnQgaSwgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3NjM6XFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc4ND1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMC1cXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVxcdTAwM2V3cl9lcCwgZGF0YSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgwMTpcXHRcXHQoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDItXFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgxMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MTktXFx0aW50IGksIHJlc3VsdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyMDpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIxOlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIyOlxcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODIzOlxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjQtXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVxcdGlmIChwYmEgPT0gMSkge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NDAtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDE6XFx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXFx1MDAyNk1FRElBX0lORk8odXMpLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0Mi1cXHRpZiAoIW5ld19wYmEpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODk5LVxcdG5ld19wYmFfb2Zmc2V0ID0gbmV3X3BiYSAtICh6b25lICogem9uZXNpemUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTAwOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTAxOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF0gPSBuZXdfcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTAyLVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlJlbWFwcGVkIExCQSAlZCB0byBQQkEgJWRcXFxcblxcXCIsIGxiYSwgbmV3X3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkwOC1cXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTA5OlxcdFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bcGJhX29mZnNldF0gPSBVTkRFRjtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkxMC1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTkxOD1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMy1cXHR1bnNpZ25lZCBpbnQgcGFnZSwgbGVuLCBvZmZzZXQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjQ6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI1OlxcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MjY6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNzpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyODpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI5LVxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0Ni1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDc6XFx0cGFnZSA9IChhZGRyZXNzIFxcdTAwMjYgTUVESUFfSU5GTyh1cykuYmxvY2ttYXNrKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0ODpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKGJsb2Nrc2hpZnQgKyBwYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ5LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NzMtXFx0XFx0LyogRmluZCB3aGVyZSB0aGlzIGxiYSBsaXZlcyBvbiBkaXNrICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NzQ6XFx0XFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3NS1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAxMz1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDE3LVxcdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMTg6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAxOTpcXHR1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0ID0gTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAyMDpcXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAyMTpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjItXFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OC1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ5OlxcdHBhZ2UgPSAoYWRkcmVzcyBcXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDUwOlxcdG1heF9sYmEgPSBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAocGFnZXNoaWZ0ICsgYmxvY2tzaGlmdCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUxLVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTMyPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XFx0XFx0bnVtX3pvbmVzID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKE1FRElBX0lORk8odXMpLnpvbmVzaGlmdFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE2MjpcXHRcXHRcXHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2My1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjQ6XFx0XFx0Y2FwYWNpdHkgPSBudW1fem9uZXMgKiBNRURJQV9JTkZPKHVzKS51em9uZXNpemVcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjU6XFx0XFx0XFx0KiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MjoyMC42MjA0NjE2NjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNDE1ODMzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgRmxhZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzdHJhaWdodGZvcndhcmQgYWRqdXN0bWVudC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBtb3ZpbmcgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgYm9vbGVhbiBmbGFnIGZyb20gdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHN0cnVjdHVyZSB0byB0aGUgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2Agc3RydWN0dXJlLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgY29uZmlybXMgdGhhdCwgc2hpZnRpbmcgdGhlIGZpZWxkIGRvd24gaW50byB0aGUgbWVkaWEtc3BlY2lmaWMgaW5mbywgYXMgaW50ZW5kZWQuIFRoaXMgbWFrZXMgcGVyZmVjdCBzZW5zZTsgYGFsYXVkYV9pbmZvYCBsaWtlbHkgY29udGFpbnMgZGV2aWNlLWxldmVsIGluZm9ybWF0aW9uLCB3aGlsZSBgYWxhdWRhX21lZGlhX2luZm9gIGNsZWFybHkgZGVhbHMgd2l0aCB0aGUgc3BlY2lmaWNzIG9mIGEgcGFydGljdWxhciBtZWRpYSBpbnN0YW5jZSBvciwgYXMgdGhlIGBwb3J0WzJdYCBhcnJheSBzdWdnZXN0cywgYSBzcGVjaWZpYyBwb3J0IG9uIHRoZSBkZXZpY2UuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0IHNlZW1zIHVubGlrZWx5LCBhcyB3ZSdyZSBqdXN0IHJlbG9jYXRpbmcgYSBib29sZWFuIGZsYWcuIFRoZSBjb2RlIGluIGBhbGF1ZGFfY2hlY2tfbWVkaWFgIHVzZXMgdGhpcyBmbGFnIHRvIGRldGVybWluZSBpZiBtZWRpYSBpcyBpbml0aWFsaXplZC4gSWYgdGhlIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCB0byB6ZXJvIG9uIGFsbG9jYXRpb24gYXMgaXMgdHlwaWNhbCBmb3IgVVNCIHN0b3JhZ2UtcmVsYXRlZCBzdHJ1Y3R1cmVzLCB0aGUgbmV3IGZpZWxkIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdXRvbWF0aWNhbGx5LiBUaGUgbG9naWMgaW4gYGFsYXVkYV9jaGVja19tZWRpYWAgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIG1lZGlhIGNoYW5nZSBkZXRlY3Rpb24uIFRoaXMgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtZWRpYSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYXJlZCBpZiBtZWRpYSBpcyByZW1vdmVkIG9yIGNoYW5nZWQuIEl0IHNldHMgdGhlIGZsYWcgdG8gYGZhbHNlYCB3aGVuIHRoZSBtZWRpYSBpcyBub3QgaW5pdGlhbGl6ZWQgb3Igd2hlbiBtZWRpYSBpcyBjaGFuZ2VkLiBUaGVyZWZvcmUsIHRoZSBpbml0aWFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgZmllbGQgc2hvdWxkIGJlIGhhbmRsZWQgY29ycmVjdGx5IGFmdGVyIHRoZSBwYXRjaC5cblxuSSB3aWxsIGRvdWJsZS1jaGVjayBob3cgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWN0dWFsbHkgYWxsb2NhdGVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9uIGFib3V0IHplcm8taW5pdGlhbGl6YXRpb24gaXMgdmFsaWQsIGJ1dCBmcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgc2Vuc2libGUgY2hhbmdlIHRvIGltcHJvdmUgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBtZWRpYSBpbml0aWFsaXphdGlvbiB0cmFja2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1Mjo0Ni45NjIwNDc3MDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzQyMDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2MuKmFsYXVkYV9pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTEyPXN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTE3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTExODpcXHR1cy1cXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMTktXFx0aWYgKCF1cy1cXHUwMDNlZXh0cmEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUyOjQ3LjAyMzgwNDA2N1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTIxMTcwMzkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjcwNjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjUzOjAyLjIzNTUxMDk0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTk4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVkaWFfaW5pdGlhbGl6ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTg1PXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAwOlxcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDEtfTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDU3PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDczLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3NDpcXHRcXHRNRURJQV9JTkZPKHVzKS5tZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4MS1cXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODI6XFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIU1FRElBX0lORk8odXMpLm1lZGlhX2luaXRpYWxpemVkKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODMtXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4NC1cXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODU6XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ni1cXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4Ny1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0ODg6XFx0XFx0XFx0TUVESUFfSU5GTyh1cykubWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg5LVxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjo1MzowMi4zMDU2MzU4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ3NTQzNzI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQWxhdWRhIFN0b3JhZ2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIHRhc2tlZCB3aXRoIHJldmlld2luZyB0aGlzIHBhdGNoLCBhbmQgaGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcy4gVGhlIGNvcmUgb2YgaXQgaW52b2x2ZXMgbW92aW5nIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGJvb2xlYW4gZnJvbSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGNvbnRhaW5zIGFuIGFycmF5IG9mIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYmUgYSBkdWFsLXBvcnQgZGV2aWNlLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2UuIFRoZSBpbml0aWFsIHN0cnVjdHVyZSBkZWZpbml0aW9uIGhhZCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGF0IHRoZSBnbG9iYWwgbGV2ZWwgZm9yIHRoZSBkZXZpY2UuICBUaGUgcGF0Y2ggcmlnaHRseSBtb3ZlcyBpdCAqaW50byogdGhlIHBlci1wb3J0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIE15IGh5cG90aGVzaXMgaXMgdGhlIG9yaWdpbmFsIGNvZGUgc3VmZmVyZWQgZnJvbSBhIGJ1ZyB3aGVyZSB0aGUgaW5pdGlhbGl6YXRpb24gc3RhdGUgb2Ygb25lIHBvcnQgd2FzIGFmZmVjdGluZyB0aGUgYXNzdW1lZCBzdGF0ZSBvZiB0aGUgb3RoZXIuIFRoZSBpbnRlbnRpb24gaXMgY2xlYXJseSB0byB0cmFjayB0aGUgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdHVzIHBlciBwb3J0LCBub3QgZm9yIHRoZSBlbnRpcmUgZGV2aWNlLlxuXG5Ob3csIGxvb2tpbmcgYXQgYGFsYXVkYV9jaGVja19tZWRpYWAsIHRoZSBjb2RlIHByZXZpb3VzbHkgY2hlY2tlZCBhIGdsb2JhbCBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcuICBXaXRoIHRoaXMgY2hhbmdlLCBpdCBjaGVja3MgdGhlIHBvcnQtc3BlY2lmaWMgZmxhZywgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgY29ycmVjdCBiZWhhdmlvci4gV2hlbiBtZWRpYSBpcyBub3QgcHJlc2VudCBvciBhIGNoYW5nZSBpcyBkZXRlY3RlZCwgd2UgZnJlZSB0aGUgbWFwcyBhbmQgKmV4cGxpY2l0bHkqIHNldCBgbWVkaWFfaW5pdGlhbGl6ZWRgIHRvIGZhbHNlLiBUaGVuLCBpZiB0aGVyZSdzIGEgbWVkaWEgY2hhbmdlLCB0aGUgY29kZSBhdHRlbXB0cyB0byBpbml0aWFsaXplIGl0LiBUaGUgZml4IGV4cGxpY2l0bHkgcmVzZXRzIHRoZSBtZWRpYSBpbml0aWFsaXplZCBmbGFnIHRvIGZhbHNlLiAgQ3JpdGljYWxseSwgaW5pdGlhbGl6YXRpb24gKnNldHMqIHRoZSBmbGFnIHRvIHRydWUuXG5cblRoZSBrZXkgaGVyZSBpcyBob3cgdGhlc2Ugc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jYCwgbWVhbmluZyB0aGUgYG1lZGlhX2luaXRpYWxpemVkYCBmaWVsZCBzdGFydHMgYXQgemVybyAoZmFsc2UpLiAgVGhlIGZpeCBpcyBwcm9iYWJseSB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpbml0aWFsaXplcyB0aGUgcG9ydHMgaW5kZXBlbmRlbnRseSwgYW5kIHRoYXQgdGhlIHN0YXRlIG9mIG9uZSBwb3J0IGRvZXNuJ3QgaW1wcm9wZXJseSBhZmZlY3QgdGhlIG90aGVyLlxuXG5NeSBpbml0aWFsIGFzc3VtcHRpb24gd2FzIHRoYXQgdGhpcyBtaWdodCBpbnZvbHZlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQsIGJ1dCBJJ20gbm8gbG9uZ2VyIHN1cmUgb2YgdGhhdC4gR2l2ZW4gdGhhdCBga3phbGxvY2AgaXMgYmVpbmcgdXNlZCwgZXZlcnl0aGluZyBpcyB6ZXJvLWluaXRpYWxpemVkLiBJIHdhcyBtb21lbnRhcmlseSBjb25mdXNlZCBieSB0aGUgbm9uLXN0YW5kYXJkIGBremFsbG9jX29iamAsIGJ1dCBga3phbGxvY2AgaXMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gY2FsbC5cblxuVGhlIHByZXZpb3VzIGJ1ZyBtaWdodCBoYXZlIGxlZCB0byBjYXNlcyB3aGVyZSBhIHBvcnQncyBkYXRhIG1hcHMgd2VyZSBuZXZlciBwcm9wZXJseSBpbml0aWFsaXplZC4gIElmIGBtZWRpYV9pbml0aWFsaXplZGAgd2FzIGluY29ycmVjdGx5IHRydWUsIHRoZSBkcml2ZXIgd291bGQgYXNzdW1lIHRoZSBtYXBzIHdlcmUgdmFsaWQgd2hlbiB0aGV5IHdlcmUgaW4gZmFjdCBudWxsLiBBY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtYXBzIG1lYW5zIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVycywgd2hpY2ggd291bGQgcmVzdWx0IGluIGEga2VybmVsIHBhbmljIChhbiBPb3BzKSwgb3IsIG1vcmUgbGlrZWx5LCBiZSBjYXVnaHQgYnkgS0FTQU4uIEZ1cnRoZXJtb3JlLCBjYXBhY2l0eSBvciBvdGhlciB2YWx1ZXMgd291bGQgYmUgemVyby5cblxuU28sIHRoaXMgY2hhbmdlIGZpeGVzIGEgbG9naWNhbCBidWcgd2hlcmUgbWVkaWEgaW5pdGlhbGl6YXRpb24gd2FzIHRyYWNrZWQgaW5jb3JyZWN0bHkgYW5kIHByb2JhYmx5IHNoYXJlZCBhY3Jvc3MgdGhlIGR1YWwgcG9ydHMsIGxlYWRpbmcgdG8gcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGl2aXNpb24gYnkgemVybyBlcnJvcnMsIHdoaWNoIGFyZSAqYWxyZWFkeSogYWRkcmVzc2VkIGJ5IHRoZSBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyAoS0FTQU4sIGtlcm5lbCBPb3BzLCBhbmQgcG90ZW50aWFsbHkgVUJTQU4pLlxuXG5JbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGEgZ29vZCBsb2dpYyBjb3JyZWN0aW9uLCBhbmQgdGhlcmUgaXMgbm8gb2J2aW91cyByaXNrIG9mICpyZWFkaW5nKiB1bmluaXRpYWxpemVkIG1lbW9yeS4gS0FTQU4gaXMgYWxyZWFkeSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU4NywiT3V0cHV0VG9rZW5zIjoyMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjU0OjEwLjc4MTA3NzAyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZyBmcm9tIHRoZSBnbG9iYWwgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gdGhlIHBlci1wb3J0IGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLiBUaGUgcHJldmlvdXMgbG9naWMgc2hhcmVkIGEgc2luZ2xlIGluaXRpYWxpemF0aW9uIGZsYWcgYmV0d2VlbiB0d28gcG9ydHMsIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBkcml2ZXIgdG8gc2tpcCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHNlY29uZCBwb3J0IGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBpbml0aWFsaXplZC4gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIGRyaXZlciB1c2luZyB6ZXJvLWluaXRpYWxpemVkIGZpZWxkcyAoZS5nLiwgMCBjYXBhY2l0eSwgTlVMTCBwb2ludGVycyBmb3IgYmxvY2sgbWFwcykgZm9yIHRoZSBzZWNvbmQgcG9ydCwgbGVhZGluZyB0byBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBkaXZpc2lvbiBieSB6ZXJvLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBTaW5jZSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgLCBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCBtZWFuaW5nIHRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBBbnkgYnVncyByZXN1bHRpbmcgZnJvbSB0aGUgc2tpcHBlZCBpbml0aWFsaXphdGlvbiAobGlrZSBOVUxMIGRlcmVmcykgYXJlIHJlbGlhYmx5IGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgT29wcywgS0FTQU4sIG9yIFVCU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vdmVzIHRoZSBgbWVkaWFfaW5pdGlhbGl6ZWRgIGZsYWcgZnJvbSB0aGUgZ2xvYmFsIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIHRvIHRoZSBwZXItcG9ydCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4gVGhlIHByZXZpb3VzIGxvZ2ljIHNoYXJlZCBhIHNpbmdsZSBpbml0aWFsaXphdGlvbiBmbGFnIGJldHdlZW4gdHdvIHBvcnRzLCB3aGljaCBjb3VsZCBjYXVzZSB0aGUgZHJpdmVyIHRvIHNraXAgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBzZWNvbmQgcG9ydCBpZiB0aGUgZmlyc3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoaXMgd291bGQgcmVzdWx0IGluIHRoZSBkcml2ZXIgdXNpbmcgemVyby1pbml0aWFsaXplZCBmaWVsZHMgKGUuZy4sIDAgY2FwYWNpdHksIE5VTEwgcG9pbnRlcnMgZm9yIGJsb2NrIG1hcHMpIGZvciB0aGUgc2Vjb25kIHBvcnQsIGxlYWRpbmcgdG8gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGl2aXNpb24gYnkgemVybywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gU2luY2UgdGhlIGBzdHJ1Y3QgYWxhdWRhX2luZm9gIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCwgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZCwgbWVhbmluZyB0aGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gQW55IGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhlIHNraXBwZWQgaW5pdGlhbGl6YXRpb24gKGxpa2UgTlVMTCBkZXJlZnMpIGFyZSByZWxpYWJseSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIE9vcHMsIEtBU0FOLCBvciBVQlNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[1] Phase: Succeeded StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 12:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 12:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2] Phase: Succeeded StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 12:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 12:54:22 +0000 UTC FinishedAt: 2026-08-26 12:54:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowfzkh9/series-workflowfzkh9-convert-artifact-3730229466/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 12:54:32 +0000 UTC FinishedAt: 2026-08-26 13:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 12:54:32 +0000 UTC FinishedAt: 2026-08-26 13:12:05 +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:*e5a960ee-3e68-4dc0-858a-079098e2601a,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-workflowfzkh9/series-workflowfzkh9-convert-artifact-3730229466/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": "07795fac-d196-4dca-9ced-2489257aca75", "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-workflowfzkh9/series-workflowfzkh9-build-action-2072313224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 12:54:32 +0000 UTC FinishedAt: 2026-08-26 13:11:55 +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:*e5a960ee-3e68-4dc0-858a-079098e2601a,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-workflowfzkh9/series-workflowfzkh9-convert-artifact-3730229466/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": "07795fac-d196-4dca-9ced-2489257aca75", "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-workflowfzkh9/series-workflowfzkh9-build-action-2072313224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 13:12:05 +0000 UTC FinishedAt: 2026-08-26 13:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 13:12:05 +0000 UTC FinishedAt: 2026-08-26 13:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 13:12:05 +0000 UTC FinishedAt: 2026-08-26 13:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 13:12:05 +0000 UTC FinishedAt: 2026-08-26 13:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowfzkh9/series-workflowfzkh9-convert-artifact-411260469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 13:12:15 +0000 UTC FinishedAt: 2026-08-26 13:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 13:12:15 +0000 UTC FinishedAt: 2026-08-26 13:14:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07795fac-d196-4dca-9ced-2489257aca75,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-workflowfzkh9/series-workflowfzkh9-build-action-2072313224/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-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 13:14:17 +0000 UTC FinishedAt: 2026-08-26 13:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 13:14:17 +0000 UTC FinishedAt: 2026-08-26 13:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 13:14:17 +0000 UTC FinishedAt: 2026-08-26 13:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 13:14:17 +0000 UTC FinishedAt: 2026-08-26 13:31:13 +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:*e5a960ee-3e68-4dc0-858a-079098e2601a,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-workflowfzkh9/series-workflowfzkh9-convert-artifact-411260469/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": "2627988f-6e7f-4917-ab42-53dfaf225a34", "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-workflowfzkh9/series-workflowfzkh9-build-action-2903476033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 13:14:17 +0000 UTC FinishedAt: 2026-08-26 13:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e5a960ee-3e68-4dc0-858a-079098e2601a,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-workflowfzkh9/series-workflowfzkh9-convert-artifact-411260469/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": "2627988f-6e7f-4917-ab42-53dfaf225a34", "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-workflowfzkh9/series-workflowfzkh9-build-action-2903476033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 13:31:13 +0000 UTC FinishedAt: 2026-08-26 13:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 13:31:13 +0000 UTC FinishedAt: 2026-08-26 13:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 13:31:13 +0000 UTC FinishedAt: 2026-08-26 13:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 13:31:13 +0000 UTC FinishedAt: 2026-08-26 13:33:13 +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:*2627988f-6e7f-4917-ab42-53dfaf225a34,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-workflowfzkh9/series-workflowfzkh9-build-action-2903476033/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-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"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:*07795fac-d196-4dca-9ced-2489257aca75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2627988f-6e7f-4917-ab42-53dfaf225a34,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-workflowfzkh9/series-workflowfzkh9-build-action-2072313224/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-workflowfzkh9/series-workflowfzkh9-build-action-2903476033/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 13:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 13:33:28 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"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-workflowfzkh9/series-workflowfzkh9-convert-artifact-2607874842/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 13:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 13:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 13:33:23 +0000 UTC FinishedAt: 2026-08-26 13:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 13:33:33 +0000 UTC FinishedAt: 2026-08-26 16:35:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfzkh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_probe","alauda_transport"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","SCSI"],"series_id":"f786a09c-7d70-4c1d-bc01-c5c7fc6ba6ad","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 13:33:33 +0000 UTC FinishedAt: 2026-08-26 16:35:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*07795fac-d196-4dca-9ced-2489257aca75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2627988f-6e7f-4917-ab42-53dfaf225a34,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-workflowfzkh9/series-workflowfzkh9-build-action-2072313224/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-workflowfzkh9/series-workflowfzkh9-build-action-2903476033/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-workflowfzkh9/series-workflowfzkh9-convert-artifact-2607874842/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,}