Name: series-workflow8n6fs Phase: Succeeded StartedAt: 2026-07-28 21:32:33 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[0] Phase: Succeeded StartedAt: 2026-07-28 21:32:33 +0000 UTC FinishedAt: 2026-07-28 21:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 21:32:33 +0000 UTC FinishedAt: 2026-07-28 21:57:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PROC_FS" ], "series_id": "95306a6d-5ca9-4a59-badd-a3629eabcecb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__sys_bpf", "bpf_link_show_fdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZTVlMGQxN2Q0MDJiNGI5MDM4MzRkMWUwYzMyZDdlMjVhZGJlZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjE6NTY6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTM0NzEsOSAmIzQzOzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVx1MDAzZXByb2c7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVx1MDAzZXR5cGU7XG4gXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVx1MDAzZXRhZykgKiAyICYjNDM7IDFdID0geyB9O1xuJiM0MztcdHUzMiBwcm9nX2lkID0gMDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zeXNfYnBmJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVx1MDAzZXByb2dgIGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYnkgYWRkaW5nIFJDVSByZWFkIGxvY2tzIGFuZCBgUkVBRF9PTkNFYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3NlbGYvZmRpbmZvL2AgaW50ZXJmYWNlIGFuZCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIxOjU2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Li43MGRjYTE0Mzc4YmJhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMzQ3MSw5ICYjNDM7MzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7CiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKLQljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLSZndDtwcm9nOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctJmd0O3RhZykgKiAyICYjNDM7IDFdID0geyB9OwomIzQzOwl1MzIgcHJvZ19pZCA9IDA7CiAKIAlpZiAodHlwZSAmbHQ7IEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSAmYW1wOyZhbXA7IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkgewogCQlpZiAobGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSkKQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiAJfQogCXNlcV9wcmludGYobSwgJiMzNDtsaW5rX2lkOlx0JXVcbiYjMzQ7LCBsaW5rLSZndDtpZCk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwogCWlmIChwcm9nKSB7CiAJCWJpbjJoZXgocHJvZ190YWcsIHByb2ctJmd0O3RhZywgc2l6ZW9mKHByb2ctJmd0O3RhZykpOwomIzQzOwkJcHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nKSB7CiAJCXNlcV9wcmludGYobSwKIAkJCSAgICYjMzQ7cHJvZ190YWc6XHQlc1xuJiMzNDsKIAkJCSAgICYjMzQ7cHJvZ19pZDpcdCV1XG4mIzM0OywKIAkJCSAgIHByb2dfdGFnLAotCQkJICAgcHJvZy0mZ3Q7YXV4LSZndDtpZCk7CiYjNDM7CQkJICAgcHJvZ19pZCk7CiAJfQogCWlmIChsaW5rLSZndDtvcHMtJmd0O3Nob3dfZmRpbmZvKQogCQlsaW5rLSZndDtvcHMtJmd0O3Nob3dfZmRpbmZvKGxpbmssIG0pOwpAQCAtNTUzNSw2ICYjNDM7NTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiB7CiAJc3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLSZndDtpbmZvLmluZm8pOwogCXN0cnVjdCBicGZfbGlua19pbmZvIGluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAl1MzIgaW5mb19sZW4gPSBhdHRyLSZndDtpbmZvLmluZm9fbGVuOwogCWludCBlcnI7CiAKQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWluZm8udHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJaW5mby5pZCA9IGxpbmstJmd0O2lkOwotCWlmIChsaW5rLSZndDtwcm9nKQotCQlpbmZvLnByb2dfaWQgPSBsaW5rLSZndDtwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXByb2cgPSBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nKQomIzQzOwkJaW5mby5wcm9nX2lkID0gcHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAobGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbykgewogCQllcnIgPSBsaW5rLSZndDtvcHMtJmd0O2ZpbGxfbGlua19pbmZvKGxpbmssICZhbXA7aW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYWNjZXNzZXMgdG8gYGxpbmstJmd0O3Byb2dgIGFuZCBgcHJvZy0mZ3Q7YXV4LSZndDtpZGAsIGFsb25nc2lkZSB0aGUgdXNlIG9mIGBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZylgLiBUaGlzIHNpZ25hbHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiByZWFkaW5nIGBsaW5rLSZndDtwcm9nYCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBhIHZlcnkgY29tbW9uIHZ1bG5lcmFiaWxpdHksIEkmIzM5O2Qgc2F5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gT25lIGlzIHRocm91Z2ggdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9YYCBpbnRlcmZhY2UgZm9yIEJQRiBsaW5rIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHRoZSBvdGhlciBpcyB0aHJvdWdoIHRoZSBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAgY29tbWFuZCB3aXRoaW4gdGhlIGBicGZgIHN5c2NhbGwuCgpUaW1lIHRvIGNvbmZpcm0gdGhpcy4gVG8ga25vdyBpZiB0aGlzIGNvZGUgaXMgaW4gdXNlIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBsb29rIGZvciB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9uLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IHRvb2xzIGFyZSBpbiBwbGF5IGhlcmUuIEkmIzM5O2xsIGNoZWNrIG15IHRvb2xzZXQgdG8gZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgQlBGIExpbmsgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHR3byBrZXkgZnVuY3Rpb25zIGhlcmU6IGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgY3JpdGljYWwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIHRoZSBoZWFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBsaW5rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMuIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTUyMz1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mzk6c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXHRcdFx0XHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE3LVx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHMgfHwgZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU2MTg6XHRcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXHRcdFx0XHRcdCAgICAgIGF0dHIsIHVhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbGluayBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXRyaWV2ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemUgdGhhdCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGlzICpzdGF0aWMqIGFuZCBjYWxsZWQgYnkgdGhlIHByb2Nmcywgd2hpY2ggbGltaXRzIGl0cyBicm9hZGVyIGltcGFjdC4gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLgoKR2l2ZW4gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhvc2UgdHdvLCB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QgYmVjb21lcyBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgaG93IGl0IGhhbmRsZXMgcmV0cmlldmluZyB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IG9mIHRoaXMgcmV0cmlldmFsIHByb2Nlc3MuCgpIbW0sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWJvdXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gT2theSwgaXQgaXMgc3RhdGljIGFuZCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHNob3dfZmRpbmZvYCBmaWxlIG9wZXJhdGlvbi4KClNvLCBhbSBJIG1pc3NpbmcgYW55dGhpbmc/IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCBtaWdodCBiZSBzdGF0aWMgdG9vPyBMZXQmIzM5O3MgY29uZmlybSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfb2JqX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTU4Mj1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1OTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTk5OnN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MDAtXHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM2Nz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2OS1cdGNhc2UgQlBGX09CSl9HRVRfSU5GT19CWV9GRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NzA6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgYXJvdW5kIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHVzZSBpdCBhcyBhIHRhcmdldC4gVGhlIGxpa2VseSBlbnRyeSBwb2ludCB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgQlBGIHN1YnN5c3RlbSBpcyBgX19zeXNfYnBmYCBvciBgc3lzX2JwZmAuIFRoZXJlZm9yZSwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBgX19zeXNfYnBmYC4KCkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgVkZTIG1lY2hhbmlzbSB2aWEgYHNob3dfZmRpbmZvYC4gSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGZhbWlseT8KCkxldCBtZSBkb3VibGUtY2hlY2sgLSBpcyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBMb29rcyBsaWtlIGBfX3N5c19icGZgIGlzIHN0aWxsIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0LgoKQnV0IHdhaXQsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB3aGVyZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGdldHMgY2FsbGVkIGZyb20sIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGBzZXFfc2hvd2AgaW4gYGZzL3Byb2MvZmQuY2AuIFRoYXQgY2hhbmdlcyB0aGluZ3MsIEkgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIGFuZCBjaGVjayBgZnMvcHJvYy9mZC5jYCBmb3IgYHNob3dfZmRpbmZvYCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3dfZmRpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9mZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvZmQuYz0yMz1zdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5mcy9wcm9jL2ZkLmMtNjYtXG5mcy9wcm9jL2ZkLmM6Njc6XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZXNob3dfZmRpbmZvKVxuZnMvcHJvYy9mZC5jOjY4Olx0XHRmaWxlLVx1MDAzZWZfb3AtXHUwMDNlc2hvd19mZGluZm8obSwgZmlsZSk7XG5mcy9wcm9jL2ZkLmMtNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBzaG93X2ZkaW5mb2AgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzaG93X2ZkaW5mb2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5IGlzIHRoYXQgYHNlcV9zaG93YCBmdW5jdGlvbiBpbiBgZnMvcHJvYy9mZC5jYC4gVGhhdCYjMzk7cyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCB0aGUgKm1haW4qIGZ1bmN0aW9uLCB3aGljaCBJIGFscmVhZHkgc3VzcGVjdGVkLiBNeSBtaW5kIGlzIGFscmVhZHkgbW92aW5nIHRvd2FyZCBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxpbmcgYHNlcV9zaG93YCwgbGlrZWx5IHNvbWV0aGluZyBpbiB0aGUgdmVpbiBvZiBgcHJvY19mZGluZm9fb3BlcmF0aW9uc2AuCgpCdXQgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBoZXJlLiBJIGNhbiBza2lwIGRpcmVjdGx5IHRvIGZvY3VzaW5nIG9uIHRoZSBgX19zeXNfYnBmYCBmdW5jdGlvbiB3aGljaCBpcyByZWxhdGVkIHRvIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCwgdGhlIHJlbGV2YW50IHBhcnQgZm9yIG15IG5lZWRzLgoKQW5kIEkmIzM5O2xsIGtlZXAgdGhlIGBmZGluZm9gIHBhcnQgaW4gbWluZC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYHByb2NfZmRfaW5mb19zaG93YCwgb3Igd2hhdGV2ZXIgdGhlIG5hbWluZyBpcy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgc2VxX3Nob3dgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyBub3cgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgY2FsbCBgc2VxX3Nob3dgPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9mZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvZmQuYy0yMi1cbmZzL3Byb2MvZmQuYzoyMzpzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmZzL3Byb2MvZmQuYy0yNC17XG4tLVxuZnMvcHJvYy9mZC5jPTc1PXN0YXRpYyBpbnQgc2VxX2ZkaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9mZC5jLTc2LXtcbmZzL3Byb2MvZmQuYzo3NzpcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZXFfc2hvdywgaW5vZGUpO1xuZnMvcHJvYy9mZC5jLTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCUEYgU3lzdGVtIENhbGwgRW50cnlwb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcy4gSSBpbml0aWFsbHkgbm90ZWQgdGhhdCBgc2VxX2ZkaW5mb19vcGVuYCBpcyBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCBpZGVhbCBmb3Igb3VyIHB1cnBvc2VzLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGluc3RydWN0aW9uIGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaW50ZXJuYWwgaGVscGVycy4gRm9jdXNpbmcgb24gYF9fc3lzX2JwZmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcmVjYWxsIHRoYXQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCB3ZXJlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQuCgpOb3csIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gSSB0aG91Z2h0IG1heWJlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgbWlnaHQgYmUgc3RhdGljLCBidXQgd2UgY2FuIHN0aWxsIGNvbnNpZGVyIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG9wcG9ydHVuaXRpZXMgZm9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2Ugd2l0aCBhIGNsZWFyIHN5bWJvbCBhZGRyZXNzLiBJIGNoZWNrZWQsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgICppcyogbm90IGlubGluZWQsIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIHF1aXRlIGxhcmdlLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlbiwgSSBmb3VuZCBpdCEgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCYjMzk7cyBhZGRyZXNzIGlzIHRha2VuOiBgLnNob3dfZmRpbmZvID0gYnBmX2xpbmtfc2hvd19mZGluZm9gLCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IGFkZHJlc3MuCgpJIGNoZWNrZWQgYWdhaW4gb24gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGJ1dCBjb3VsZCBiZSBpbnRlcmVzdGluZywgc2luY2UgaXQmIzM5O3MgcXVpdGUgbGFyZ2UuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGFkZHJlc3Mgb2YgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyB0YWtlbi4gSXQmIzM5O3Mgbm90LiBCdXQgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgICppcyogY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuCgpBbHJpZ2h0LCBJIHRoaW5rIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0byBsaXN0IGJvdGggYF9fc3lzX2JwZmAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2AuIEkmIzM5O2xsIGFsc28gd2FudCB0byByZXZpZXcgdGhlIGBLY29uZmlnYCBvcHRpb25zIGZvciBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC4gR29vZCwgbm93IHRoYXQgd2Uga25vdyB0aGF0LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3IgdGhvc2UgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGhlcmUmIzM5O3Mgb25lISBMb29rcyBsaWtlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCB3aXRoaW4gYGJwZl9saW5rX2ZvcHNgLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCwgdGhvc2UgZGVwZW5kZW5jaWVzIGNhbiBiZSByZWFsbHkgY3J1Y2lhbC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz05ODg9c3RhdGljIGZtb2RlX3QgbWFwX2dldF9zeXNfcGVybXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZkIGYpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTk5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTAwMDojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwMDEtLyogU2hvdyB0aGUgbWVtb3J5IHVzYWdlIG9mIGEgYnBmIG1hcCAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExNjg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbWFwX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTY5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE3MC1cdC5zaG93X2ZkaW5mb1x0PSBicGZfbWFwX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MzE9c3RhdGljIHZvaWQgYnBmX3Byb2dfZ2V0X3N0YXRzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTU3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU1ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NTktc3RhdGljIHZvaWQgYnBmX3Byb2dfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTg5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX3Byb2dfZm9wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1OTA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTkxLVx0LnNob3dfZmRpbmZvXHQ9IGJwZl9wcm9nX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NTE9c3RhdGljIGludCBicGZfbGlua19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDU5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2MC0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyMy1cdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHNfcG9sbCA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzE6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMyLVx0LnNob3dfZmRpbmZvXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIExpbmsgRkQgSW5mbyoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgYENPTkZJR19QUk9DX0ZTYCBlbmFibGVkIGZvciBgYnBmX2xpbmtfc2hvd19mZGluZm9gLiBOb3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBgL3Byb2NgIGFuZCBpdHMgcm9sZSBpbiBleHBvc2luZyBrZXJuZWwgZGF0YS4gQnV0IGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIGZpZ3VyaW5nIG91dCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmLiBJcyBpdCBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZT8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgb3IgZW5hYmxlIGl0IGF1dG9tYXRpY2FsbHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgYSBtaW5pbWFsIG9yIG9wdGltaXplZCBrZXJuZWwgYnVpbGQsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIGJyaW5nIGluIHVubmVjZXNzYXJ5IGJsb2F0IG9yIGNvbXBsZXhpdHkuIEdvdHRhIHRyYWNrIGRvd24gKmV2ZXJ5KiByZXF1aXJlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZWZpbmVkIGFuZCBjb250cm9sbGVkIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFNvLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZXMsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9LY29uZmlnYCwgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCB0aGF0IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbiB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgb3B0aW9ucyBtaWdodCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcywgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGtlcm5lbCYjMzk7cyBCUEYgS2NvbmZpZywgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMjcuCgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMjcuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLCB3aGF0IGZ1bmRhbWVudGFsIEJQRiBvcHRpb25zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgQlBGIHN1YnN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgb3IgZGVwZW5kZW5jaWVzIGl04oCZcyBzZXR0aW5nIHVwLiBJcyBpdCByZWxhdGVkIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIHNlY3VyaXR5LCBvciBwZXJoYXBzIGEgbW9yZSBnZW5lcmFsIGVuYWJsaW5nIGZsYWc/IFdoYXQgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcmUgd2UgZ2V0dGluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyBpdCYjMzk7cyBwcm9iYWJseSBhIGNydWNpYWwgc2V0dGluZy4gSSYjMzk7bSByZWFkeSB0byBkaWdlc3QgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBpdCwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBCUEYgaXMgdXNlZCBvciBtYW5hZ2VkIHdpdGhpbiBhIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgZ290Y2hhcyBvciBub24tb2J2aW91cyBkZWZhdWx0cyB0aGF0IG1pZ2h0IGNhdGNoIHNvbWVvbmUgb3V0LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSwgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTGluayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBXZSYjMzk7bGwgYWxzbyBuZWVkIGBQUk9DX0ZTYCBlbmFibGVkIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGFzcGVjdCBvZiB0aGluZ3MuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBJdCBkb2VzIHRoaXMgYnkgaW1wbGVtZW50aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpYCB3aGVuIGFjY2Vzc2luZyBgbGluay0mZ3Q7cHJvZ2Agd2l0aGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoaXMgZml4IGxvb2tzIHNvbGlkIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBhIGZldyBrZXkgc3ltYm9sczogYF9fc3lzX2JwZmAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2AuIFdlJiMzOTt2ZSBjb25maXJtZWQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBzdGF0aWMgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBzdG9yZWQgaW4gYGJwZl9saW5rX2ZvcHMuc2hvd19mZGluZm9gLiBTbyB3ZSB3b24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbmxpbmluZywgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGZ1enovdHJhY2UuIGBfX3N5c19icGZgIGlzIHRoZSBnYXRld2F5IGZ1bmN0aW9uIGZvciB0aGUgYGJwZigpYCBzeXNjYWxsLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLCB3aGljaCBmdXJ0aGVyIGNhbGxzIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQsIGFuZCBgQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSBuZWVkLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGFjY2Vzc2luZyBgbGluay0mZ3Q7cHJvZ2AgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSwgZXNwZWNpYWxseSBzaW5jZSBib3RoIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHZpYSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgZnVuY3Rpb24gbmFtZXMgYXJlIGNvcnJlY3QuIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgX19zeXNfYnBmYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxMC4zNTY2NTE5NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzcwNTYwNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3lzX2JwZlwiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVuIGFjY2Vzc2luZyBgbGluay1cXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjEwLjM1NjY1ODkyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDQzNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMTo1NjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTM0NzEsOSArMzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVxcdTAwM2Vwcm9nO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cXHUwMDNldGFnKSAqIDIgKyAxXSA9IHsgfTtcXG4rXFx0dTMyIHByb2dfaWQgPSAwO1xcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXFx1MDAyNlxcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XFxuIFxcdFxcdGlmIChsaW5rLVxcdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxcbkBAIC0zNDkwLDEzICszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdH1cXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwibGlua19pZDpcXFxcdCV1XFxcXG5cXFwiLCBsaW5rLVxcdTAwM2VpZCk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuIFxcdGlmIChwcm9nKSB7XFxuIFxcdFxcdGJpbjJoZXgocHJvZ190YWcsIHByb2ctXFx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykpO1xcbitcXHRcXHRwcm9nX2lkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuIFxcdFxcdHNlcV9wcmludGYobSxcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfdGFnOlxcXFx0JXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfaWQ6XFxcXHQldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcHJvZ190YWcsXFxuLVxcdFxcdFxcdCAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHQgICBwcm9nX2lkKTtcXG4gXFx0fVxcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbylcXG4gXFx0XFx0bGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbyhsaW5rLCBtKTtcXG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWluZm8uaW5mbyk7XFxuIFxcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0dTMyIGluZm9fbGVuID0gYXR0ci1cXHUwMDNlaW5mby5pbmZvX2xlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0aW5mby50eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0aW5mby5pZCA9IGxpbmstXFx1MDAzZWlkO1xcbi1cXHRpZiAobGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0aW5mby5wcm9nX2lkID0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cHJvZyA9IFJFQURfT05DRShsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0aWYgKHByb2cpXFxuK1xcdFxcdGluZm8ucHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcXG4gXFx0XFx0ZXJyID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2xpbmtfaW5mbyhsaW5rLCBcXHUwMDI2aW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjEwLjgwODUwNTMzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMjUzNzQyODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zeXNfYnBmXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVxcdTAwM2Vwcm9nYCBpbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGJ5IGFkZGluZyBSQ1UgcmVhZCBsb2NrcyBhbmQgYFJFQURfT05DRWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9gIGludGVyZmFjZSBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDIxOjU2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTM0NzEsOSArMzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XG4gc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstXHUwMDNlcHJvZztcbitcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiArIDFdID0geyB9O1xuK1x0dTMyIHByb2dfaWQgPSAwO1xuIFxuIFx0aWYgKHR5cGUgXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSBcdTAwMjZcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XG4gXHRcdGlmIChsaW5rLVx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcImxpbmtfaWQ6XFx0JXVcXG5cIiwgbGluay1cdTAwM2VpZCk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4rXHRcdHByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKHByb2cpIHtcbiBcdFx0c2VxX3ByaW50ZihtLFxuIFx0XHRcdCAgIFwicHJvZ190YWc6XFx0JXNcXG5cIlxuIFx0XHRcdCAgIFwicHJvZ19pZDpcXHQldVxcblwiLFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbitcdFx0XHQgICBwcm9nX2lkKTtcbiBcdH1cbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2VzaG93X2ZkaW5mbylcbiBcdFx0bGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlaW5mby5pbmZvKTtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aW5mby50eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0aW5mby5pZCA9IGxpbmstXHUwMDNlaWQ7XG4tXHRpZiAobGluay1cdTAwM2Vwcm9nKVxuLVx0XHRpbmZvLnByb2dfaWQgPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cpXG4rXHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcbiBcdFx0ZXJyID0gbGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXHUwMDI2aW5mbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxMC44MDg1MDY4NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA2MzY0MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZm9jdXNpbmcgb24gdGhlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBhY2Nlc3NlcyB0byBgbGluay1cdTAwM2Vwcm9nYCBhbmQgYHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkYCwgYWxvbmdzaWRlIHRoZSB1c2Ugb2YgYFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpYC4gVGhpcyBzaWduYWxzIGEgcG90ZW50aWFsIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdoZW4gcmVhZGluZyBgbGluay1cdTAwM2Vwcm9nYCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBhIHZlcnkgY29tbW9uIHZ1bG5lcmFiaWxpdHksIEknZCBzYXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBhcmUgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIE9uZSBpcyB0aHJvdWdoIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vWGAgaW50ZXJmYWNlIGZvciBCUEYgbGluayBmaWxlIGRlc2NyaXB0b3JzIGFuZCB0aGUgb3RoZXIgaXMgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgd2l0aGluIHRoZSBgYnBmYCBzeXNjYWxsLlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcy4gVG8ga25vdyBpZiB0aGlzIGNvZGUgaXMgaW4gdXNlIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBsb29rIGZvciB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdG9vbHMgYXJlIGluIHBsYXkgaGVyZS4gSSdsbCBjaGVjayBteSB0b29sc2V0IHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxNi4xMTQ4NzQ0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDYzPXN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ3MTpzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzIte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjItI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHNfcG9sbCA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzI6XFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxNi4xNjU4ODY0OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMDk5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEJQRiBMaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdHdvIGtleSBmdW5jdGlvbnMgaGVyZTogYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGNyaXRpY2FsIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIGhlYXJ0IG9mIHVuZGVyc3RhbmRpbmcgaG93IGxpbmsgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycy4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjE5LjQ2Nzk4ODUwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE0NzA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01NTIzPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUzOTpzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTctXFx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2YnBmX2xpbmtfZm9wcyB8fCBmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzX3BvbGwpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTYxODpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmRfZmlsZShmKSwgZmRfZmlsZShmKS1cXHUwMDNlcHJpdmF0ZV9kYXRhLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ciwgdWF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxOS41MjAxNDMyNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY0MTQ2OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBsaW5rIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBIb3dldmVyLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgKnN0YXRpYyogYW5kIGNhbGxlZCBieSB0aGUgcHJvY2ZzLCB3aGljaCBsaW1pdHMgaXRzIGJyb2FkZXIgaW1wYWN0LiBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guXG5cbkdpdmVuIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRob3NlIHR3bywgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGJlY29tZXMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLiBJJ2xsIHdhbnQgdG8gdHJhY2UgaG93IGl0IGhhbmRsZXMgcmV0cmlldmluZyB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0J3MgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdGhpcyByZXRyaWV2YWwgcHJvY2Vzcy5cblxuSG1tLCBsZXQncyBkb3VibGUtY2hlY2sgYWJvdXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gT2theSwgaXQgaXMgc3RhdGljIGFuZCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHNob3dfZmRpbmZvYCBmaWxlIG9wZXJhdGlvbi5cblxuU28sIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgIG1pZ2h0IGJlIHN0YXRpYyB0b28/IExldCdzIGNvbmZpcm0gdGhhdCwganVzdCB0byBiZSBzdXJlLiBJdCdzIGJlc3QgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoyNC43ODQyOTUzNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NTM5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX29ial9nZXRfaW5mb19ieV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01NTgyPXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1OTk6c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MDAtXFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM2Nz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDY5LVxcdGNhc2UgQlBGX09CSl9HRVRfSU5GT19CWV9GRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDcwOlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NzEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI0LjgzNzA1NjEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg4NDcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgYXJvdW5kIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIGl0IGFzIGEgdGFyZ2V0LiBUaGUgbGlrZWx5IGVudHJ5IHBvaW50IHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBCUEYgc3Vic3lzdGVtIGlzIGBfX3N5c19icGZgIG9yIGBzeXNfYnBmYC4gVGhlcmVmb3JlLCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGBfX3N5c19icGZgLlxuXG5Ib3dldmVyLCBub3cgSSByZW1lbWJlciB0aGF0IGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgY2FsbGVkIHRocm91Z2ggdGhlIFZGUyBtZWNoYW5pc20gdmlhIGBzaG93X2ZkaW5mb2AuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBmYW1pbHk/XG5cbkxldCBtZSBkb3VibGUtY2hlY2sgLSBpcyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBMb29rcyBsaWtlIGBfX3N5c19icGZgIGlzIHN0aWxsIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHdoZXJlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgZ2V0cyBjYWxsZWQgZnJvbSwgaXQncyBjYWxsZWQgdGhyb3VnaCBgc2VxX3Nob3dgIGluIGBmcy9wcm9jL2ZkLmNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzLCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhbmQgY2hlY2sgYGZzL3Byb2MvZmQuY2AgZm9yIGBzaG93X2ZkaW5mb2AgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI5LjAzNTkwNzE2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NTY2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvd19mZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9mZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvZmQuYz0yMz1zdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmZzL3Byb2MvZmQuYy02Ni1cXG5mcy9wcm9jL2ZkLmM6Njc6XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZXNob3dfZmRpbmZvKVxcbmZzL3Byb2MvZmQuYzo2ODpcXHRcXHRmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VzaG93X2ZkaW5mbyhtLCBmaWxlKTtcXG5mcy9wcm9jL2ZkLmMtNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI5LjA4NTc3MjQyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4MzMwNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgc2hvd19mZGluZm9gIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHNob3dfZmRpbmZvYCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkgaXMgdGhhdCBgc2VxX3Nob3dgIGZ1bmN0aW9uIGluIGBmcy9wcm9jL2ZkLmNgLiBUaGF0J3Mgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIG5vdCB0aGUgKm1haW4qIGZ1bmN0aW9uLCB3aGljaCBJIGFscmVhZHkgc3VzcGVjdGVkLiBNeSBtaW5kIGlzIGFscmVhZHkgbW92aW5nIHRvd2FyZCBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgY2FsbGluZyBgc2VxX3Nob3dgLCBsaWtlbHkgc29tZXRoaW5nIGluIHRoZSB2ZWluIG9mIGBwcm9jX2ZkaW5mb19vcGVyYXRpb25zYC5cblxuQnV0IGxldCdzIGJlIHN0cmF0ZWdpYyBoZXJlLiBJIGNhbiBza2lwIGRpcmVjdGx5IHRvIGZvY3VzaW5nIG9uIHRoZSBgX19zeXNfYnBmYCBmdW5jdGlvbiB3aGljaCBpcyByZWxhdGVkIHRvIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCwgdGhlIHJlbGV2YW50IHBhcnQgZm9yIG15IG5lZWRzLlxuXG5BbmQgSSdsbCBrZWVwIHRoZSBgZmRpbmZvYCBwYXJ0IGluIG1pbmQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBwcm9jX2ZkX2luZm9fc2hvd2AsIG9yIHdoYXRldmVyIHRoZSBuYW1pbmcgaXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgYHNlcV9zaG93YCBpcyBzdGF0aWMuIFNvLCB0aGUgcXVlc3Rpb24gaXMgbm93IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIGNhbGwgYHNlcV9zaG93YD8gTGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTY6MzMuNzQ0MTA2MTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyNjg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXFfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL2ZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9mZC5jLTIyLVxcbmZzL3Byb2MvZmQuYzoyMzpzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5mcy9wcm9jL2ZkLmMtMjQte1xcbi0tXFxuZnMvcHJvYy9mZC5jPTc1PXN0YXRpYyBpbnQgc2VxX2ZkaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvZmQuYy03Ni17XFxuZnMvcHJvYy9mZC5jOjc3OlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZXFfc2hvdywgaW5vZGUpO1xcbmZzL3Byb2MvZmQuYy03OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjMzLjc5NzIzOTczOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzEwNzgxODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEJQRiBTeXN0ZW0gQ2FsbCBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcy4gSSBpbml0aWFsbHkgbm90ZWQgdGhhdCBgc2VxX2ZkaW5mb19vcGVuYCBpcyBzdGF0aWMsIHdoaWNoIGlzbid0IGlkZWFsIGZvciBvdXIgcHVycG9zZXMuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgc3RhdGljIGludGVybmFsIGhlbHBlcnMuIEZvY3VzaW5nIG9uIGBfX3N5c19icGZgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHJlY2FsbCB0aGF0IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2Agd2VyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkLlxuXG5Ob3csIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gSSB0aG91Z2h0IG1heWJlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgbWlnaHQgYmUgc3RhdGljLCBidXQgd2UgY2FuIHN0aWxsIGNvbnNpZGVyIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG9wcG9ydHVuaXRpZXMgZm9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2Ugd2l0aCBhIGNsZWFyIHN5bWJvbCBhZGRyZXNzLiBJIGNoZWNrZWQsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgICppcyogbm90IGlubGluZWQsIHNpbmNlIGl0J3MgY2FsbGVkIGRpcmVjdGx5LCBidXQgaXQncyBxdWl0ZSBsYXJnZSwgYW5kIGl0J3Mgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlbiwgSSBmb3VuZCBpdCEgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCdzIGFkZHJlc3MgaXMgdGFrZW46IGAuc2hvd19mZGluZm8gPSBicGZfbGlua19zaG93X2ZkaW5mb2AsIHNvIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkIGFuZCBoYXMgYSBkaXN0aW5jdCBhZGRyZXNzLlxuXG5JIGNoZWNrZWQgYWdhaW4gb24gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQncyBjYWxsZWQgZGlyZWN0bHkgYnV0IGNvdWxkIGJlIGludGVyZXN0aW5nLCBzaW5jZSBpdCdzIHF1aXRlIGxhcmdlLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBhZGRyZXNzIG9mIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgdGFrZW4uIEl0J3Mgbm90LiBCdXQgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgICppcyogY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuXG5cbkFscmlnaHQsIEkgdGhpbmsgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGxpc3QgYm90aCBgX19zeXNfYnBmYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gSSdsbCBhbHNvIHdhbnQgdG8gcmV2aWV3IHRoZSBgS2NvbmZpZ2Agb3B0aW9ucyBmb3IgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0MC41MDgwMjUxMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTYwNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQwLjU2Mzk5NDI1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ0NTM5MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGZvY3VzaW5nIG9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LiBHb29kLCBub3cgdGhhdCB3ZSBrbm93IHRoYXQsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB3ZSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBhbHdheXMgbG9va2luZyBmb3IgdGhvc2UgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGhlcmUncyBvbmUhIExvb2tzIGxpa2UgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIHdpdGhpbiBgYnBmX2xpbmtfZm9wc2AuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLCB0aG9zZSBkZXBlbmRlbmNpZXMgY2FuIGJlIHJlYWxseSBjcnVjaWFsLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0NC4yMDg1MzcwMTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjYzMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19QUk9DX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTk4OD1zdGF0aWMgZm1vZGVfdCBtYXBfZ2V0X3N5c19wZXJtcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmQgZilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTk5OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDAwOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwMDEtLyogU2hvdyB0aGUgbWVtb3J5IHVzYWdlIG9mIGEgYnBmIG1hcCAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE2OD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9tYXBfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTY5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExNzAtXFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbWFwX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUzMT1zdGF0aWMgdm9pZCBicGZfcHJvZ19nZXRfc3RhdHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU1Ny1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNTU4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NTktc3RhdGljIHZvaWQgYnBmX3Byb2dfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1ODk9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfcHJvZ19mb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1OTA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU5MS1cXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9wcm9nX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ1MT1zdGF0aWMgaW50IGJwZl9saW5rX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDU4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2MC0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjMtXFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wc19wb2xsID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzE6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMi1cXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0NC4yNjEyMTgzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MjE5OTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgTGluayBGRCBJbmZvKipcblxuQWxyaWdodCwgc28gSSBuZWVkIGBDT05GSUdfUFJPQ19GU2AgZW5hYmxlZCBmb3IgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gTm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYC9wcm9jYCBhbmQgaXRzIHJvbGUgaW4gZXhwb3Npbmcga2VybmVsIGRhdGEuIEJ1dCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIGZpZ3VyaW5nIG91dCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgIGl0c2VsZi4gSXMgaXQgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2U/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0gY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIG9yIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGEgbWluaW1hbCBvciBvcHRpbWl6ZWQga2VybmVsIGJ1aWxkLCBhbmQgSSBkb24ndCB3YW50IHRvIGJyaW5nIGluIHVubmVjZXNzYXJ5IGJsb2F0IG9yIGNvbXBsZXhpdHkuIEdvdHRhIHRyYWNrIGRvd24gKmV2ZXJ5KiByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQ3LjY1MzQyMDEyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMzI0NzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQ3LjcwODQ2MzEwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODczODMxMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEJQRiBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgYXQgdGhlIHN5c3RlbSBsZXZlbC4gU28sIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgcGxhY2VzLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQgdGhhdCBkZWFscyB3aXRoIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgb3B0aW9ucyBtaWdodCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcywgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo1MC41ODIyOTcxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjU3NDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTY6NTIuNTE0ODc5MDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTY0MzExMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwncyBCUEYgS2NvbmZpZywgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMjcuXG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMjcuIEkgd2FudCB0byBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgdGhlcmUsIHdoYXQgZnVuZGFtZW50YWwgQlBGIG9wdGlvbnMgd2UncmUgdGFsa2luZyBhYm91dCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEJQRiBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgb3IgZGVwZW5kZW5jaWVzIGl04oCZcyBzZXR0aW5nIHVwLiBJcyBpdCByZWxhdGVkIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIHNlY3VyaXR5LCBvciBwZXJoYXBzIGEgbW9yZSBnZW5lcmFsIGVuYWJsaW5nIGZsYWc/IFdoYXQgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcmUgd2UgZ2V0dGluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uPyBJJ20gYW50aWNpcGF0aW5nIGl0J3MgcHJvYmFibHkgYSBjcnVjaWFsIHNldHRpbmcuIEknbSByZWFkeSB0byBkaWdlc3QgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBpdCwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBCUEYgaXMgdXNlZCBvciBtYW5hZ2VkIHdpdGhpbiBhIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEknbSBrZWVuIHRvIHNwb3QgYW55IGdvdGNoYXMgb3Igbm9uLW9idmlvdXMgZGVmYXVsdHMgdGhhdCBtaWdodCBjYXRjaCBzb21lb25lIG91dC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHksIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo1Ni4wMzEzMTI4MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjU2LjAzMTM4NDAyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTQ3NjE2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBMaW5rIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRha2U6IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGRlZmluaXRlbHkgYEJQRl9TWVNDQUxMYC4gV2UnbGwgYWxzbyBuZWVkIGBQUk9DX0ZTYCBlbmFibGVkIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGFzcGVjdCBvZiB0aGluZ3MuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIEl0IGRvZXMgdGhpcyBieSBpbXBsZW1lbnRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKWAgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2Agd2l0aGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoaXMgZml4IGxvb2tzIHNvbGlkIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgX19zeXNfYnBmYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gV2UndmUgY29uZmlybWVkIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgc3RhdGljIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgc3RvcmVkIGluIGBicGZfbGlua19mb3BzLnNob3dfZmRpbmZvYC4gU28gd2Ugd29uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbmxpbmluZywgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGZ1enovdHJhY2UuIGBfX3N5c19icGZgIGlzIHRoZSBnYXRld2F5IGZ1bmN0aW9uIGZvciB0aGUgYGJwZigpYCBzeXNjYWxsLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLCB3aGljaCBmdXJ0aGVyIGNhbGxzIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlIG5lZWQuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSwgZXNwZWNpYWxseSBzaW5jZSBib3RoIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHZpYSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei5cbkkndmUgdmVyaWZpZWQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0LiBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYF9fc3lzX2JwZmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTc6MDMuOTc5MDA1MzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMzkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zeXNfYnBmXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVxcdTAwM2Vwcm9nYCBpbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGJ5IGFkZGluZyBSQ1UgcmVhZCBsb2NrcyBhbmQgYFJFQURfT05DRWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9gIGludGVyZmFjZSBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3lzX2JwZlwiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVuIGFjY2Vzc2luZyBgbGluay1cXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 21:32:33 +0000 UTC FinishedAt: 2026-07-28 21:57:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "PROC_FS" ], "series_id": "95306a6d-5ca9-4a59-badd-a3629eabcecb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "__sys_bpf", "bpf_link_show_fdinfo" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZTVlMGQxN2Q0MDJiNGI5MDM4MzRkMWUwYzMyZDdlMjVhZGJlZWZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMjE6NTY6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTM0NzEsOSAmIzQzOzM0NzEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVx1MDAzZXByb2c7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nO1xuIFx0ZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLVx1MDAzZXR5cGU7XG4gXHRjaGFyIHByb2dfdGFnW3NpemVvZihwcm9nLVx1MDAzZXRhZykgKiAyICYjNDM7IDFdID0geyB9O1xuJiM0MztcdHUzMiBwcm9nX2lkID0gMDtcbiBcbiBcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXHUwMDI2XHUwMDI2IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkge1xuIFx0XHRpZiAobGluay1cdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxuQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHR9XG4gXHRzZXFfcHJpbnRmKG0sIFwmIzM0O2xpbmtfaWQ6XFx0JXVcXG5cJiMzNDssIGxpbmstXHUwMDNlaWQpO1xuIFxuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4mIzQzO1x0XHRwcm9nX2lkID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlaWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZykge1xuIFx0XHRzZXFfcHJpbnRmKG0sXG4gXHRcdFx0ICAgXCYjMzQ7cHJvZ190YWc6XFx0JXNcXG5cJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtwcm9nX2lkOlxcdCV1XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbiYjNDM7XHRcdFx0ICAgcHJvZ19pZCk7XG4gXHR9XG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8pXG4gXHRcdGxpbmstXHUwMDNlb3BzLVx1MDAzZXNob3dfZmRpbmZvKGxpbmssIG0pO1xuQEAgLTU1MzUsNiAmIzQzOzU1NDMsNyBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIHtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIF9fdXNlciAqdWluZm8gPSB1NjRfdG9fdXNlcl9wdHIoYXR0ci1cdTAwM2VpbmZvLmluZm8pO1xuIFx0c3RydWN0IGJwZl9saW5rX2luZm8gaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcbiBcdGluZm8udHlwZSA9IGxpbmstXHUwMDNldHlwZTtcbiBcdGluZm8uaWQgPSBsaW5rLVx1MDAzZWlkO1xuLVx0aWYgKGxpbmstXHUwMDNlcHJvZylcbi1cdFx0aW5mby5wcm9nX2lkID0gbGluay1cdTAwM2Vwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHByb2cgPSBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKTtcbiYjNDM7XHRpZiAocHJvZylcbiYjNDM7XHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKSB7XG4gXHRcdGVyciA9IGxpbmstXHUwMDNlb3BzLVx1MDAzZWZpbGxfbGlua19pbmZvKGxpbmssIFx1MDAyNmluZm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zeXNfYnBmJiMzNDssCiAgICAmIzM0O2JwZl9saW5rX3Nob3dfZmRpbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVx1MDAzZXByb2dgIGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYnkgYWRkaW5nIFJDVSByZWFkIGxvY2tzIGFuZCBgUkVBRF9PTkNFYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYC9wcm9jL3NlbGYvZmRpbmZvL2AgaW50ZXJmYWNlIGFuZCB0aGUgYGJwZigpYCBzeXNjYWxsIHdpdGggYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDI4IDIxOjU2OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwppbmRleCA2ZGIzMDZkMjNiNDc5Li43MGRjYTE0Mzc4YmJhIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3N5c2NhbGwuYwpAQCAtMzQ3MSw5ICYjNDM7MzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7CiBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKLQljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLSZndDtwcm9nOwomIzQzOwljb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7CiAJZW51bSBicGZfbGlua190eXBlIHR5cGUgPSBsaW5rLSZndDt0eXBlOwogCWNoYXIgcHJvZ190YWdbc2l6ZW9mKHByb2ctJmd0O3RhZykgKiAyICYjNDM7IDFdID0geyB9OwomIzQzOwl1MzIgcHJvZ19pZCA9IDA7CiAKIAlpZiAodHlwZSAmbHQ7IEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSAmYW1wOyZhbXA7IGJwZl9saW5rX3R5cGVfc3Ryc1t0eXBlXSkgewogCQlpZiAobGluay0mZ3Q7dHlwZSA9PSBCUEZfTElOS19UWVBFX0tQUk9CRV9NVUxUSSkKQEAgLTM0OTAsMTMgJiM0MzszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApCiAJfQogCXNlcV9wcmludGYobSwgJiMzNDtsaW5rX2lkOlx0JXVcbiYjMzQ7LCBsaW5rLSZndDtpZCk7CiAKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlwcm9nID0gUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpOwogCWlmIChwcm9nKSB7CiAJCWJpbjJoZXgocHJvZ190YWcsIHByb2ctJmd0O3RhZywgc2l6ZW9mKHByb2ctJmd0O3RhZykpOwomIzQzOwkJcHJvZ19pZCA9IHByb2ctJmd0O2F1eC0mZ3Q7aWQ7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmIChwcm9nKSB7CiAJCXNlcV9wcmludGYobSwKIAkJCSAgICYjMzQ7cHJvZ190YWc6XHQlc1xuJiMzNDsKIAkJCSAgICYjMzQ7cHJvZ19pZDpcdCV1XG4mIzM0OywKIAkJCSAgIHByb2dfdGFnLAotCQkJICAgcHJvZy0mZ3Q7YXV4LSZndDtpZCk7CiYjNDM7CQkJICAgcHJvZ19pZCk7CiAJfQogCWlmIChsaW5rLSZndDtvcHMtJmd0O3Nob3dfZmRpbmZvKQogCQlsaW5rLSZndDtvcHMtJmd0O3Nob3dfZmRpbmZvKGxpbmssIG0pOwpAQCAtNTUzNSw2ICYjNDM7NTU0Myw3IEBAIHN0YXRpYyBpbnQgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsCiB7CiAJc3RydWN0IGJwZl9saW5rX2luZm8gX191c2VyICp1aW5mbyA9IHU2NF90b191c2VyX3B0cihhdHRyLSZndDtpbmZvLmluZm8pOwogCXN0cnVjdCBicGZfbGlua19pbmZvIGluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZzsKIAl1MzIgaW5mb19sZW4gPSBhdHRyLSZndDtpbmZvLmluZm9fbGVuOwogCWludCBlcnI7CiAKQEAgLTU1NDksOCAmIzQzOzU1NTgsMTIgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAogCWluZm8udHlwZSA9IGxpbmstJmd0O3R5cGU7CiAJaW5mby5pZCA9IGxpbmstJmd0O2lkOwotCWlmIChsaW5rLSZndDtwcm9nKQotCQlpbmZvLnByb2dfaWQgPSBsaW5rLSZndDtwcm9nLSZndDthdXgtJmd0O2lkOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXByb2cgPSBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZyk7CiYjNDM7CWlmIChwcm9nKQomIzQzOwkJaW5mby5wcm9nX2lkID0gcHJvZy0mZ3Q7YXV4LSZndDtpZDsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAobGluay0mZ3Q7b3BzLSZndDtmaWxsX2xpbmtfaW5mbykgewogCQllcnIgPSBsaW5rLSZndDtvcHMtJmd0O2ZpbGxfbGlua19pbmZvKGxpbmssICZhbXA7aW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGFkZGluZyBgcmN1X3JlYWRfbG9jaygpYCBhbmQgYHJjdV9yZWFkX3VubG9jaygpYCBhcm91bmQgYWNjZXNzZXMgdG8gYGxpbmstJmd0O3Byb2dgIGFuZCBgcHJvZy0mZ3Q7YXV4LSZndDtpZGAsIGFsb25nc2lkZSB0aGUgdXNlIG9mIGBSRUFEX09OQ0UobGluay0mZ3Q7cHJvZylgLiBUaGlzIHNpZ25hbHMgYSBwb3RlbnRpYWwgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8gd2hlbiByZWFkaW5nIGBsaW5rLSZndDtwcm9nYCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBhIHZlcnkgY29tbW9uIHZ1bG5lcmFiaWxpdHksIEkmIzM5O2Qgc2F5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZS4gT25lIGlzIHRocm91Z2ggdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9YYCBpbnRlcmZhY2UgZm9yIEJQRiBsaW5rIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHRoZSBvdGhlciBpcyB0aHJvdWdoIHRoZSBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAgY29tbWFuZCB3aXRoaW4gdGhlIGBicGZgIHN5c2NhbGwuCgpUaW1lIHRvIGNvbmZpcm0gdGhpcy4gVG8ga25vdyBpZiB0aGlzIGNvZGUgaXMgaW4gdXNlIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBsb29rIGZvciB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9uLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlZSB3aGF0IHRvb2xzIGFyZSBpbiBwbGF5IGhlcmUuIEkmIzM5O2xsIGNoZWNrIG15IHRvb2xzZXQgdG8gZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfbGlua19zaG93X2ZkaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTM0NjM9c3RhdGljIGNvbnN0IGNoYXIgKmJwZl9saW5rX3R5cGVfc3Ryc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDcxOnN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDcyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTIyLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzX3BvbGwgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUzMjpcdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MzMtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgQlBGIExpbmsgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHR3byBrZXkgZnVuY3Rpb25zIGhlcmU6IGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgY3JpdGljYWwgc2luY2UgaXQmIzM5O3MgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIHRoZSBoZWFydCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBsaW5rIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMuIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9saW5rX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTUyMz1zdGF0aWMgaW50IGJwZl9idGZfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTUzOC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mzk6c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXHRcdFx0XHQgIHN0cnVjdCBicGZfbGluayAqbGluayxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NjE3LVx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHMgfHwgZmRfZmlsZShmKS1cdTAwM2VmX29wID09IFx1MDAyNmJwZl9saW5rX2ZvcHNfcG9sbClcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU2MTg6XHRcdHJldHVybiBicGZfbGlua19nZXRfaW5mb19ieV9mZChmZF9maWxlKGYpLCBmZF9maWxlKGYpLVx1MDAzZXByaXZhdGVfZGF0YSxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXHRcdFx0XHRcdCAgICAgIGF0dHIsIHVhdHRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjI2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgbGluayBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXRyaWV2ZWQuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSG93ZXZlciwgSSBxdWlja2x5IHJlYWxpemUgdGhhdCBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGlzICpzdGF0aWMqIGFuZCBjYWxsZWQgYnkgdGhlIHByb2Nmcywgd2hpY2ggbGltaXRzIGl0cyBicm9hZGVyIGltcGFjdC4gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyBhbHNvIHN0YXRpYyBhbmQgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLgoKR2l2ZW4gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhvc2UgdHdvLCB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QgYmVjb21lcyBgYnBmX29ial9nZXRfaW5mb19ieV9mZGAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgaG93IGl0IGhhbmRsZXMgcmV0cmlldmluZyB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IG9mIHRoaXMgcmV0cmlldmFsIHByb2Nlc3MuCgpIbW0sIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgYWJvdXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gT2theSwgaXQgaXMgc3RhdGljIGFuZCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHNob3dfZmRpbmZvYCBmaWxlIG9wZXJhdGlvbi4KClNvLCBhbSBJIG1pc3NpbmcgYW55dGhpbmc/IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCBtaWdodCBiZSBzdGF0aWMgdG9vPyBMZXQmIzM5O3MgY29uZmlybSB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuIEl0JiMzOTtzIGJlc3QgdG8gYmUgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfb2JqX2dldF9pbmZvX2J5X2ZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmM9NTU4Mj1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1OTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTk5OnN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MDAtXHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM2Nz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjQ2OS1cdGNhc2UgQlBGX09CSl9HRVRfSU5GT19CWV9GRDpcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0NzA6XHRcdGVyciA9IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoXHUwMDI2YXR0ciwgdWF0dHIudXNlcik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDcxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCUEYgRnVuY3Rpb24gQ2FsbHMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgYXJvdW5kIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuJiMzOTt0IGRpcmVjdGx5IHVzZSBpdCBhcyBhIHRhcmdldC4gVGhlIGxpa2VseSBlbnRyeSBwb2ludCB0byBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwgQlBGIHN1YnN5c3RlbSBpcyBgX19zeXNfYnBmYCBvciBgc3lzX2JwZmAuIFRoZXJlZm9yZSwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBgX19zeXNfYnBmYC4KCkhvd2V2ZXIsIG5vdyBJIHJlbWVtYmVyIHRoYXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgVkZTIG1lY2hhbmlzbSB2aWEgYHNob3dfZmRpbmZvYC4gSG1tLCBhcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGZhbWlseT8KCkxldCBtZSBkb3VibGUtY2hlY2sgLSBpcyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBMb29rcyBsaWtlIGBfX3N5c19icGZgIGlzIHN0aWxsIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0LgoKQnV0IHdhaXQsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB3aGVyZSBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGdldHMgY2FsbGVkIGZyb20sIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIGBzZXFfc2hvd2AgaW4gYGZzL3Byb2MvZmQuY2AuIFRoYXQgY2hhbmdlcyB0aGluZ3MsIEkgbmVlZCB0byBleHBhbmQgdGhlIHNjb3BlIGFuZCBjaGVjayBgZnMvcHJvYy9mZC5jYCBmb3IgYHNob3dfZmRpbmZvYCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3dfZmRpbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9mZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvZmQuYz0yMz1zdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5mcy9wcm9jL2ZkLmMtNjYtXG5mcy9wcm9jL2ZkLmM6Njc6XHRpZiAoZmlsZS1cdTAwM2VmX29wLVx1MDAzZXNob3dfZmRpbmZvKVxuZnMvcHJvYy9mZC5jOjY4Olx0XHRmaWxlLVx1MDAzZWZfb3AtXHUwMDNlc2hvd19mZGluZm8obSwgZmlsZSk7XG5mcy9wcm9jL2ZkLmMtNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MjIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVjb25zdHJ1Y3RpbmcgdGhlIGBzaG93X2ZkaW5mb2AgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzaG93X2ZkaW5mb2AgZnVuY3Rpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBpbml0aWFsIHBvaW50IG9mIGVudHJ5IGlzIHRoYXQgYHNlcV9zaG93YCBmdW5jdGlvbiBpbiBgZnMvcHJvYy9mZC5jYC4gVGhhdCYjMzk7cyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIG5vdCB0aGUgKm1haW4qIGZ1bmN0aW9uLCB3aGljaCBJIGFscmVhZHkgc3VzcGVjdGVkLiBNeSBtaW5kIGlzIGFscmVhZHkgbW92aW5nIHRvd2FyZCBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxpbmcgYHNlcV9zaG93YCwgbGlrZWx5IHNvbWV0aGluZyBpbiB0aGUgdmVpbiBvZiBgcHJvY19mZGluZm9fb3BlcmF0aW9uc2AuCgpCdXQgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBoZXJlLiBJIGNhbiBza2lwIGRpcmVjdGx5IHRvIGZvY3VzaW5nIG9uIHRoZSBgX19zeXNfYnBmYCBmdW5jdGlvbiB3aGljaCBpcyByZWxhdGVkIHRvIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCwgdGhlIHJlbGV2YW50IHBhcnQgZm9yIG15IG5lZWRzLgoKQW5kIEkmIzM5O2xsIGtlZXAgdGhlIGBmZGluZm9gIHBhcnQgaW4gbWluZC4gSSBuZWVkIHRvIHplcm8gaW4gb24gYHByb2NfZmRfaW5mb19zaG93YCwgb3Igd2hhdGV2ZXIgdGhlIG5hbWluZyBpcy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdGhhdCBgc2VxX3Nob3dgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyBub3cgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUgY2FsbCBgc2VxX3Nob3dgPyBMZXQmIzM5O3MgY2hlY2sgdGhhdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy9mZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvZmQuYy0yMi1cbmZzL3Byb2MvZmQuYzoyMzpzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbmZzL3Byb2MvZmQuYy0yNC17XG4tLVxuZnMvcHJvYy9mZC5jPTc1PXN0YXRpYyBpbnQgc2VxX2ZkaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvcHJvYy9mZC5jLTc2LXtcbmZzL3Byb2MvZmQuYzo3NzpcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZXFfc2hvdywgaW5vZGUpO1xuZnMvcHJvYy9mZC5jLTc4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE5MgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBCUEYgU3lzdGVtIENhbGwgRW50cnlwb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcy4gSSBpbml0aWFsbHkgbm90ZWQgdGhhdCBgc2VxX2ZkaW5mb19vcGVuYCBpcyBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCBpZGVhbCBmb3Igb3VyIHB1cnBvc2VzLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGluc3RydWN0aW9uIGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBzdGF0aWMgaW50ZXJuYWwgaGVscGVycy4gRm9jdXNpbmcgb24gYF9fc3lzX2JwZmAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgcmVjYWxsIHRoYXQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCB3ZXJlIHRoZSBmdW5jdGlvbnMgbW9kaWZpZWQuCgpOb3csIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gSSB0aG91Z2h0IG1heWJlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgbWlnaHQgYmUgc3RhdGljLCBidXQgd2UgY2FuIHN0aWxsIGNvbnNpZGVyIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG9wcG9ydHVuaXRpZXMgZm9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2Ugd2l0aCBhIGNsZWFyIHN5bWJvbCBhZGRyZXNzLiBJIGNoZWNrZWQsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgICppcyogbm90IGlubGluZWQsIHNpbmNlIGl0JiMzOTtzIGNhbGxlZCBkaXJlY3RseSwgYnV0IGl0JiMzOTtzIHF1aXRlIGxhcmdlLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlbiwgSSBmb3VuZCBpdCEgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCYjMzk7cyBhZGRyZXNzIGlzIHRha2VuOiBgLnNob3dfZmRpbmZvID0gYnBmX2xpbmtfc2hvd19mZGluZm9gLCBzbyBpdCYjMzk7cyAqZGVmaW5pdGVseSogbm90IGlubGluZWQgYW5kIGhhcyBhIGRpc3RpbmN0IGFkZHJlc3MuCgpJIGNoZWNrZWQgYWdhaW4gb24gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQmIzM5O3MgY2FsbGVkIGRpcmVjdGx5IGJ1dCBjb3VsZCBiZSBpbnRlcmVzdGluZywgc2luY2UgaXQmIzM5O3MgcXVpdGUgbGFyZ2UuIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGFkZHJlc3Mgb2YgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBpcyB0YWtlbi4gSXQmIzM5O3Mgbm90LiBCdXQgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgICppcyogY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuCgpBbHJpZ2h0LCBJIHRoaW5rIHRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0byBsaXN0IGJvdGggYF9fc3lzX2JwZmAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2AuIEkmIzM5O2xsIGFsc28gd2FudCB0byByZXZpZXcgdGhlIGBLY29uZmlnYCBvcHRpb25zIGZvciBga2VybmVsL2JwZi9zeXNjYWxsLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXNjYWxsXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT03PUNGTEFHU19jb3JlLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdCAkKGNmbGFncy1ub2djc2UteXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlLTgtXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gdG51bS5vIGNudW0ubyBsb2cubyB0b2tlbi5vIGxpdmVuZXNzLm8gY29uc3RfZm9sZC5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBCUEYgTGFuZHNjYXBlKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGZvY3VzaW5nIG9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIG9uZSB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC4gR29vZCwgbm93IHRoYXQgd2Uga25vdyB0aGF0LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzIHdlIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBhbHdheXMgbG9va2luZyBmb3IgdGhvc2UgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGhlcmUmIzM5O3Mgb25lISBMb29rcyBsaWtlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19QUk9DX0ZTYCB3aXRoaW4gYGJwZl9saW5rX2ZvcHNgLiBHb3R0YSBrZWVwIHRoYXQgaW4gbWluZCwgdGhvc2UgZGVwZW5kZW5jaWVzIGNhbiBiZSByZWFsbHkgY3J1Y2lhbC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1BST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz05ODg9c3RhdGljIGZtb2RlX3QgbWFwX2dldF9zeXNfcGVybXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZkIGYpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTk5LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MTAwMDojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwMDEtLyogU2hvdyB0aGUgbWVtb3J5IHVzYWdlIG9mIGEgYnBmIG1hcCAqL1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTExNjg9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbWFwX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTY5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMTE3MC1cdC5zaG93X2ZkaW5mb1x0PSBicGZfbWFwX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1MzE9c3RhdGljIHZvaWQgYnBmX3Byb2dfZ2V0X3N0YXRzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTU3LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6MjU1ODojaWZkZWYgQ09ORklHX1BST0NfRlNcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NTktc3RhdGljIHZvaWQgYnBmX3Byb2dfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yNTg5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX3Byb2dfZm9wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1OTA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yNTkxLVx0LnNob3dfZmRpbmZvXHQ9IGJwZl9wcm9nX3Nob3dfZmRpbmZvLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM0NTE9c3RhdGljIGludCBicGZfbGlua19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNDU5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2MC0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTIxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHMgPSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUyMy1cdC5zaG93X2ZkaW5mb1x0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHNfcG9sbCA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzE6I2lmZGVmIENPTkZJR19QUk9DX0ZTXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMyLVx0LnNob3dfZmRpbmZvXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTkyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIExpbmsgRkQgSW5mbyoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgYENPTkZJR19QUk9DX0ZTYCBlbmFibGVkIGZvciBgYnBmX2xpbmtfc2hvd19mZGluZm9gLiBOb3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBgL3Byb2NgIGFuZCBpdHMgcm9sZSBpbiBleHBvc2luZyBrZXJuZWwgZGF0YS4gQnV0IGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIGZpZ3VyaW5nIG91dCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgpOb3csIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgZGVwZW5kZW5jeSBjaGFpbiBmb3IgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXRzZWxmLiBJcyBpdCBkZXBlbmRlbnQgb24gYW55dGhpbmcgZWxzZT8gQXJlIHRoZXJlIGFueSB1cHN0cmVhbSBjb25maWd1cmF0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgb3IgZW5hYmxlIGl0IGF1dG9tYXRpY2FsbHkuIFVuZGVyc3RhbmRpbmcgdGhlc2UgaW50ZXJkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgY29uZmlndXJpbmcgYSBtaW5pbWFsIG9yIG9wdGltaXplZCBrZXJuZWwgYnVpbGQsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIGJyaW5nIGluIHVubmVjZXNzYXJ5IGJsb2F0IG9yIGNvbXBsZXhpdHkuIEdvdHRhIHRyYWNrIGRvd24gKmV2ZXJ5KiByZXF1aXJlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkZWZpbmVkIGFuZCBjb250cm9sbGVkIGF0IHRoZSBzeXN0ZW0gbGV2ZWwuIFNvLCBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZXMsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi9LY29uZmlnYCwgb3Igc29tZXRoaW5nIHNpbWlsYXJseSBuYW1lZCB0aGF0IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbiB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgb3B0aW9ucyBtaWdodCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcywgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGtlcm5lbCYjMzk7cyBCUEYgS2NvbmZpZywgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMjcuCgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMjcuIEkgd2FudCB0byBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlLCB3aGF0IGZ1bmRhbWVudGFsIEJQRiBvcHRpb25zIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUgQlBGIHN1YnN5c3RlbSB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgb3IgZGVwZW5kZW5jaWVzIGl04oCZcyBzZXR0aW5nIHVwLiBJcyBpdCByZWxhdGVkIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIHNlY3VyaXR5LCBvciBwZXJoYXBzIGEgbW9yZSBnZW5lcmFsIGVuYWJsaW5nIGZsYWc/IFdoYXQgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcmUgd2UgZ2V0dGluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uPyBJJiMzOTttIGFudGljaXBhdGluZyBpdCYjMzk7cyBwcm9iYWJseSBhIGNydWNpYWwgc2V0dGluZy4gSSYjMzk7bSByZWFkeSB0byBkaWdlc3QgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBpdCwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBCUEYgaXMgdXNlZCBvciBtYW5hZ2VkIHdpdGhpbiBhIHN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uLiBJJiMzOTttIGtlZW4gdG8gc3BvdCBhbnkgZ290Y2hhcyBvciBub24tb2J2aW91cyBkZWZhdWx0cyB0aGF0IG1pZ2h0IGNhdGNoIHNvbWVvbmUgb3V0LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSwgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDIxOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAyMTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjQ3CgkJCQkJCQlvdXRwdXQ6IDE4MQoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgTGluayBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlOiB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXMgZGVmaW5pdGVseSBgQlBGX1NZU0NBTExgLiBXZSYjMzk7bGwgYWxzbyBuZWVkIGBQUk9DX0ZTYCBlbmFibGVkIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGFzcGVjdCBvZiB0aGluZ3MuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LiBJdCBkb2VzIHRoaXMgYnkgaW1wbGVtZW50aW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgUkVBRF9PTkNFKGxpbmstJmd0O3Byb2cpYCB3aGVuIGFjY2Vzc2luZyBgbGluay0mZ3Q7cHJvZ2Agd2l0aGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoaXMgZml4IGxvb2tzIHNvbGlkIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCk15IHByaW1hcnkgZm9jdXMgZm9yIGZ1enppbmcgd2lsbCBiZSBvbiBhIGZldyBrZXkgc3ltYm9sczogYF9fc3lzX2JwZmAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2AuIFdlJiMzOTt2ZSBjb25maXJtZWQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBzdGF0aWMgYnV0IGl0cyBhZGRyZXNzIGlzIHRha2VuIGFuZCBzdG9yZWQgaW4gYGJwZl9saW5rX2ZvcHMuc2hvd19mZGluZm9gLiBTbyB3ZSB3b24mIzM5O3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbmxpbmluZywgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGZ1enovdHJhY2UuIGBfX3N5c19icGZgIGlzIHRoZSBnYXRld2F5IGZ1bmN0aW9uIGZvciB0aGUgYGJwZigpYCBzeXNjYWxsLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLCB3aGljaCBmdXJ0aGVyIGNhbGxzIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuCgpJIHF1aWNrbHkgZG91YmxlLWNoZWNrZWQsIGFuZCBgQlBGX1NZU0NBTExgIGlzIHRoZSBvbmx5IGNvbmZpZyB3ZSBuZWVkLgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIGlzc3VlIHdoZXJlIGFjY2Vzc2luZyBgbGluay0mZ3Q7cHJvZ2AgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSwgZXNwZWNpYWxseSBzaW5jZSBib3RoIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHZpYSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCYjMzk7cyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgZnVuY3Rpb24gbmFtZXMgYXJlIGNvcnJlY3QuIGBicGZfbGlua19zaG93X2ZkaW5mb2AsIGFuZCBgX19zeXNfYnBmYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N5c19icGYmIzM0OywKICAgICYjMzQ7YnBmX2xpbmtfc2hvd19mZGluZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxMC4zNTY2NTE5NjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzcwNTYwNjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3lzX2JwZlwiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVuIGFjY2Vzc2luZyBgbGluay1cXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjEwLjM1NjY1ODkyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMDQzNjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyOCAyMTo1NjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3N5c2NhbGwuY1xcbisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jXFxuQEAgLTM0NzEsOSArMzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XFxuIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGJwZl9saW5rICpsaW5rID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cgPSBsaW5rLVxcdTAwM2Vwcm9nO1xcbitcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuIFxcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cXHUwMDNldGFnKSAqIDIgKyAxXSA9IHsgfTtcXG4rXFx0dTMyIHByb2dfaWQgPSAwO1xcbiBcXG4gXFx0aWYgKHR5cGUgXFx1MDAzYyBBUlJBWV9TSVpFKGJwZl9saW5rX3R5cGVfc3RycykgXFx1MDAyNlxcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XFxuIFxcdFxcdGlmIChsaW5rLVxcdTAwM2V0eXBlID09IEJQRl9MSU5LX1RZUEVfS1BST0JFX01VTFRJKVxcbkBAIC0zNDkwLDEzICszNDkxLDIwIEBAIHN0YXRpYyB2b2lkIGJwZl9saW5rX3Nob3dfZmRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGZpbGUgKmZpbHApXFxuIFxcdH1cXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwibGlua19pZDpcXFxcdCV1XFxcXG5cXFwiLCBsaW5rLVxcdTAwM2VpZCk7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHByb2cgPSBSRUFEX09OQ0UobGluay1cXHUwMDNlcHJvZyk7XFxuIFxcdGlmIChwcm9nKSB7XFxuIFxcdFxcdGJpbjJoZXgocHJvZ190YWcsIHByb2ctXFx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXFx1MDAzZXRhZykpO1xcbitcXHRcXHRwcm9nX2lkID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChwcm9nKSB7XFxuIFxcdFxcdHNlcV9wcmludGYobSxcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfdGFnOlxcXFx0JXNcXFxcblxcXCJcXG4gXFx0XFx0XFx0ICAgXFxcInByb2dfaWQ6XFxcXHQldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcHJvZ190YWcsXFxuLVxcdFxcdFxcdCAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQpO1xcbitcXHRcXHRcXHQgICBwcm9nX2lkKTtcXG4gXFx0fVxcbiBcXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbylcXG4gXFx0XFx0bGluay1cXHUwMDNlb3BzLVxcdTAwM2VzaG93X2ZkaW5mbyhsaW5rLCBtKTtcXG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXFx1MDAzZWluZm8uaW5mbyk7XFxuIFxcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XFxuK1xcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4gXFx0dTMyIGluZm9fbGVuID0gYXR0ci1cXHUwMDNlaW5mby5pbmZvX2xlbjtcXG4gXFx0aW50IGVycjtcXG4gXFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXG4gXFx0aW5mby50eXBlID0gbGluay1cXHUwMDNldHlwZTtcXG4gXFx0aW5mby5pZCA9IGxpbmstXFx1MDAzZWlkO1xcbi1cXHRpZiAobGluay1cXHUwMDNlcHJvZylcXG4tXFx0XFx0aW5mby5wcm9nX2lkID0gbGluay1cXHUwMDNlcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0cHJvZyA9IFJFQURfT05DRShsaW5rLVxcdTAwM2Vwcm9nKTtcXG4rXFx0aWYgKHByb2cpXFxuK1xcdFxcdGluZm8ucHJvZ19pZCA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlaWQ7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcXG4gXFx0XFx0ZXJyID0gbGluay1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX2xpbmtfaW5mbyhsaW5rLCBcXHUwMDI2aW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjEwLjgwODUwNTMzOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMjUzNzQyODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zeXNfYnBmXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVxcdTAwM2Vwcm9nYCBpbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGJ5IGFkZGluZyBSQ1UgcmVhZCBsb2NrcyBhbmQgYFJFQURfT05DRWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9gIGludGVyZmFjZSBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGU1ZTBkMTdkNDAyYjRiOTAzODM0ZDFlMGMzMmQ3ZTI1YWRiZWVmYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDIxOjU2OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9zeXNjYWxsLmMgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuaW5kZXggNmRiMzA2ZDIzYjQ3OS4uNzBkY2ExNDM3OGJiYSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jXG4rKysgYi9rZXJuZWwvYnBmL3N5c2NhbGwuY1xuQEAgLTM0NzEsOSArMzQ3MSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqYnBmX2xpbmtfdHlwZV9zdHJzW10gPSB7XG4gc3RhdGljIHZvaWQgYnBmX2xpbmtfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmsgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyA9IGxpbmstXHUwMDNlcHJvZztcbitcdGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZztcbiBcdGVudW0gYnBmX2xpbmtfdHlwZSB0eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0Y2hhciBwcm9nX3RhZ1tzaXplb2YocHJvZy1cdTAwM2V0YWcpICogMiArIDFdID0geyB9O1xuK1x0dTMyIHByb2dfaWQgPSAwO1xuIFxuIFx0aWYgKHR5cGUgXHUwMDNjIEFSUkFZX1NJWkUoYnBmX2xpbmtfdHlwZV9zdHJzKSBcdTAwMjZcdTAwMjYgYnBmX2xpbmtfdHlwZV9zdHJzW3R5cGVdKSB7XG4gXHRcdGlmIChsaW5rLVx1MDAzZXR5cGUgPT0gQlBGX0xJTktfVFlQRV9LUFJPQkVfTVVMVEkpXG5AQCAtMzQ5MCwxMyArMzQ5MSwyMCBAQCBzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxuIFx0fVxuIFx0c2VxX3ByaW50ZihtLCBcImxpbmtfaWQ6XFx0JXVcXG5cIiwgbGluay1cdTAwM2VpZCk7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRwcm9nID0gUkVBRF9PTkNFKGxpbmstXHUwMDNlcHJvZyk7XG4gXHRpZiAocHJvZykge1xuIFx0XHRiaW4yaGV4KHByb2dfdGFnLCBwcm9nLVx1MDAzZXRhZywgc2l6ZW9mKHByb2ctXHUwMDNldGFnKSk7XG4rXHRcdHByb2dfaWQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VpZDtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKHByb2cpIHtcbiBcdFx0c2VxX3ByaW50ZihtLFxuIFx0XHRcdCAgIFwicHJvZ190YWc6XFx0JXNcXG5cIlxuIFx0XHRcdCAgIFwicHJvZ19pZDpcXHQldVxcblwiLFxuIFx0XHRcdCAgIHByb2dfdGFnLFxuLVx0XHRcdCAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkKTtcbitcdFx0XHQgICBwcm9nX2lkKTtcbiBcdH1cbiBcdGlmIChsaW5rLVx1MDAzZW9wcy1cdTAwM2VzaG93X2ZkaW5mbylcbiBcdFx0bGluay1cdTAwM2VvcHMtXHUwMDNlc2hvd19mZGluZm8obGluaywgbSk7XG5AQCAtNTUzNSw2ICs1NTQzLDcgQEAgc3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbiB7XG4gXHRzdHJ1Y3QgYnBmX2xpbmtfaW5mbyBfX3VzZXIgKnVpbmZvID0gdTY0X3RvX3VzZXJfcHRyKGF0dHItXHUwMDNlaW5mby5pbmZvKTtcbiBcdHN0cnVjdCBicGZfbGlua19pbmZvIGluZm87XG4rXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XG4gXHR1MzIgaW5mb19sZW4gPSBhdHRyLVx1MDAzZWluZm8uaW5mb19sZW47XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTU1NDksOCArNTU1OCwxMiBAQCBzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuIFxuIFx0aW5mby50eXBlID0gbGluay1cdTAwM2V0eXBlO1xuIFx0aW5mby5pZCA9IGxpbmstXHUwMDNlaWQ7XG4tXHRpZiAobGluay1cdTAwM2Vwcm9nKVxuLVx0XHRpbmZvLnByb2dfaWQgPSBsaW5rLVx1MDAzZXByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cHJvZyA9IFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpO1xuK1x0aWYgKHByb2cpXG4rXHRcdGluZm8ucHJvZ19pZCA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8pIHtcbiBcdFx0ZXJyID0gbGluay1cdTAwM2VvcHMtXHUwMDNlZmlsbF9saW5rX2luZm8obGluaywgXHUwMDI2aW5mbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxMC44MDg1MDY4NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA2MzY0MzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZm9jdXNpbmcgb24gdGhlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYWRkaW5nIGByY3VfcmVhZF9sb2NrKClgIGFuZCBgcmN1X3JlYWRfdW5sb2NrKClgIGFyb3VuZCBhY2Nlc3NlcyB0byBgbGluay1cdTAwM2Vwcm9nYCBhbmQgYHByb2ctXHUwMDNlYXV4LVx1MDAzZWlkYCwgYWxvbmdzaWRlIHRoZSB1c2Ugb2YgYFJFQURfT05DRShsaW5rLVx1MDAzZXByb2cpYC4gVGhpcyBzaWduYWxzIGEgcG90ZW50aWFsIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIHdoZW4gcmVhZGluZyBgbGluay1cdTAwM2Vwcm9nYCB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIOKAkyBhIHZlcnkgY29tbW9uIHZ1bG5lcmFiaWxpdHksIEknZCBzYXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBhcmUgYWNjZXNzaWJsZSBmcm9tIHVzZXIgc3BhY2UuIE9uZSBpcyB0aHJvdWdoIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vWGAgaW50ZXJmYWNlIGZvciBCUEYgbGluayBmaWxlIGRlc2NyaXB0b3JzIGFuZCB0aGUgb3RoZXIgaXMgdGhyb3VnaCB0aGUgYEJQRl9PQkpfR0VUX0lORk9fQllfRkRgIGNvbW1hbmQgd2l0aGluIHRoZSBgYnBmYCBzeXNjYWxsLlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcy4gVG8ga25vdyBpZiB0aGlzIGNvZGUgaXMgaW4gdXNlIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBsb29rIGZvciB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9uLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2VlIHdoYXQgdG9vbHMgYXJlIGluIHBsYXkgaGVyZS4gSSdsbCBjaGVjayBteSB0b29sc2V0IHRvIGV2YWx1YXRlIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxNi4xMTQ4NzQ0MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwMjc2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19zaG93X2ZkaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz0zNDYzPXN0YXRpYyBjb25zdCBjaGFyICpicGZfbGlua190eXBlX3N0cnNbXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzQ3MTpzdGF0aWMgdm9pZCBicGZfbGlua19zaG93X2ZkaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBmaWxlICpmaWxwKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM0NzIte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzUyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfbGlua19mb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjItI2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6MzUyMzpcXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjQtI2VuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0zNTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9saW5rX2ZvcHNfcG9sbCA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMxLSNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzI6XFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNTMzLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxNi4xNjU4ODY0OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzAyMDk5MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIEJQRiBMaW5rIEZ1bmN0aW9uYWxpdHkqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdHdvIGtleSBmdW5jdGlvbnMgaGVyZTogYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGNyaXRpY2FsIHNpbmNlIGl0J3MgY2FsbGVkIGJ5IGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdGhvcm91Z2hseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgdGhlIGhlYXJ0IG9mIHVuZGVyc3RhbmRpbmcgaG93IGxpbmsgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycy4gTGV0J3Mgc2VlIGhvdyBpdCB3b3JrcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjE5LjQ2Nzk4ODUwNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjE0NzA0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbGlua19nZXRfaW5mb19ieV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01NTIzPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MzgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTUzOTpzdGF0aWMgaW50IGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1NDAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTk5PXN0YXRpYyBpbnQgYnBmX29ial9nZXRfaW5mb19ieV9mZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTctXFx0ZWxzZSBpZiAoZmRfZmlsZShmKS1cXHUwMDNlZl9vcCA9PSBcXHUwMDI2YnBmX2xpbmtfZm9wcyB8fCBmZF9maWxlKGYpLVxcdTAwM2VmX29wID09IFxcdTAwMjZicGZfbGlua19mb3BzX3BvbGwpXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTYxODpcXHRcXHRyZXR1cm4gYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmQoZmRfZmlsZShmKSwgZmRfZmlsZShmKS1cXHUwMDNlcHJpdmF0ZV9kYXRhLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MTktXFx0XFx0XFx0XFx0XFx0ICAgICAgYXR0ciwgdWF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoxOS41MjAxNDMyNjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjY0MTQ2OTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEZ1bmN0aW9uIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEJQRiBsaW5rIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJldHJpZXZlZC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgLiBIb3dldmVyLCBJIHF1aWNrbHkgcmVhbGl6ZSB0aGF0IGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgKnN0YXRpYyogYW5kIGNhbGxlZCBieSB0aGUgcHJvY2ZzLCB3aGljaCBsaW1pdHMgaXRzIGJyb2FkZXIgaW1wYWN0LiBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGlzIGFsc28gc3RhdGljIGFuZCBjYWxsZWQgYnkgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBhZGp1c3QgbXkgYXBwcm9hY2guXG5cbkdpdmVuIHRoZSBzdGF0aWMgbmF0dXJlIG9mIHRob3NlIHR3bywgdGhlIGtleSBmdW5jdGlvbiB0byBkaXNzZWN0IGJlY29tZXMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLiBJJ2xsIHdhbnQgdG8gdHJhY2UgaG93IGl0IGhhbmRsZXMgcmV0cmlldmluZyB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBJdCBzZWVtcyBsaWtlIGl0J3MgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdGhpcyByZXRyaWV2YWwgcHJvY2Vzcy5cblxuSG1tLCBsZXQncyBkb3VibGUtY2hlY2sgYWJvdXQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gT2theSwgaXQgaXMgc3RhdGljIGFuZCBpcyBvbmx5IGNhbGxlZCBieSB0aGUgYHNob3dfZmRpbmZvYCBmaWxlIG9wZXJhdGlvbi5cblxuU28sIGFtIEkgbWlzc2luZyBhbnl0aGluZz8gYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgIG1pZ2h0IGJlIHN0YXRpYyB0b28/IExldCdzIGNvbmZpcm0gdGhhdCwganVzdCB0byBiZSBzdXJlLiBJdCdzIGJlc3QgdG8gYmUgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyNiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1NjoyNC43ODQyOTUzNTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NTM5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX29ial9nZXRfaW5mb19ieV9mZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz01NTgyPXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1OTk6c3RhdGljIGludCBicGZfb2JqX2dldF9pbmZvX2J5X2ZkKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU2MDAtXFx0XFx0XFx0XFx0ICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjM2Nz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDY5LVxcdGNhc2UgQlBGX09CSl9HRVRfSU5GT19CWV9GRDpcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDcwOlxcdFxcdGVyciA9IGJwZl9vYmpfZ2V0X2luZm9fYnlfZmQoXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0NzEtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI0LjgzNzA1NjEzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxOTg4NDcyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBGdW5jdGlvbiBDYWxscyoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGZsb3cgYXJvdW5kIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYC4gVGhhdCBmdW5jdGlvbiBpcyBzdGF0aWMsIHNvIEkgY2FuJ3QgZGlyZWN0bHkgdXNlIGl0IGFzIGEgdGFyZ2V0LiBUaGUgbGlrZWx5IGVudHJ5IHBvaW50IHRvIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBCUEYgc3Vic3lzdGVtIGlzIGBfX3N5c19icGZgIG9yIGBzeXNfYnBmYC4gVGhlcmVmb3JlLCB0aGUgZm9jdXMgc2hvdWxkIGJlIG9uIGBfX3N5c19icGZgLlxuXG5Ib3dldmVyLCBub3cgSSByZW1lbWJlciB0aGF0IGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgY2FsbGVkIHRocm91Z2ggdGhlIFZGUyBtZWNoYW5pc20gdmlhIGBzaG93X2ZkaW5mb2AuIEhtbSwgYXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBmYW1pbHk/XG5cbkxldCBtZSBkb3VibGUtY2hlY2sgLSBpcyBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFsc28gc3RhdGljPyBZZXAsIGl0IGlzLiBMb29rcyBsaWtlIGBfX3N5c19icGZgIGlzIHN0aWxsIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHdoZXJlIGBicGZfbGlua19zaG93X2ZkaW5mb2AgZ2V0cyBjYWxsZWQgZnJvbSwgaXQncyBjYWxsZWQgdGhyb3VnaCBgc2VxX3Nob3dgIGluIGBmcy9wcm9jL2ZkLmNgLiBUaGF0IGNoYW5nZXMgdGhpbmdzLCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhbmQgY2hlY2sgYGZzL3Byb2MvZmQuY2AgZm9yIGBzaG93X2ZkaW5mb2AgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI5LjAzNTkwNzE2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4NTY2MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvd19mZGluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9mZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvZmQuYz0yMz1zdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmZzL3Byb2MvZmQuYy02Ni1cXG5mcy9wcm9jL2ZkLmM6Njc6XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZXNob3dfZmRpbmZvKVxcbmZzL3Byb2MvZmQuYzo2ODpcXHRcXHRmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VzaG93X2ZkaW5mbyhtLCBmaWxlKTtcXG5mcy9wcm9jL2ZkLmMtNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjI5LjA4NTc3MjQyOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4MzMwNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlY29uc3RydWN0aW5nIHRoZSBgc2hvd19mZGluZm9gIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHNob3dfZmRpbmZvYCBmdW5jdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkgaXMgdGhhdCBgc2VxX3Nob3dgIGZ1bmN0aW9uIGluIGBmcy9wcm9jL2ZkLmNgLiBUaGF0J3Mgc3RhdGljLCB3aGljaCBtZWFucyBpdCdzIG5vdCB0aGUgKm1haW4qIGZ1bmN0aW9uLCB3aGljaCBJIGFscmVhZHkgc3VzcGVjdGVkLiBNeSBtaW5kIGlzIGFscmVhZHkgbW92aW5nIHRvd2FyZCBsb29raW5nIGZvciB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgY2FsbGluZyBgc2VxX3Nob3dgLCBsaWtlbHkgc29tZXRoaW5nIGluIHRoZSB2ZWluIG9mIGBwcm9jX2ZkaW5mb19vcGVyYXRpb25zYC5cblxuQnV0IGxldCdzIGJlIHN0cmF0ZWdpYyBoZXJlLiBJIGNhbiBza2lwIGRpcmVjdGx5IHRvIGZvY3VzaW5nIG9uIHRoZSBgX19zeXNfYnBmYCBmdW5jdGlvbiB3aGljaCBpcyByZWxhdGVkIHRvIGBicGZfb2JqX2dldF9pbmZvX2J5X2ZkYCwgdGhlIHJlbGV2YW50IHBhcnQgZm9yIG15IG5lZWRzLlxuXG5BbmQgSSdsbCBrZWVwIHRoZSBgZmRpbmZvYCBwYXJ0IGluIG1pbmQuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGBwcm9jX2ZkX2luZm9fc2hvd2AsIG9yIHdoYXRldmVyIHRoZSBuYW1pbmcgaXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIHRoYXQgYHNlcV9zaG93YCBpcyBzdGF0aWMuIFNvLCB0aGUgcXVlc3Rpb24gaXMgbm93IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIGNhbGwgYHNlcV9zaG93YD8gTGV0J3MgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTY6MzMuNzQ0MTA2MTY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEyNjg5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXFfc2hvd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL2ZkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9mZC5jLTIyLVxcbmZzL3Byb2MvZmQuYzoyMzpzdGF0aWMgaW50IHNlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5mcy9wcm9jL2ZkLmMtMjQte1xcbi0tXFxuZnMvcHJvYy9mZC5jPTc1PXN0YXRpYyBpbnQgc2VxX2ZkaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvZmQuYy03Ni17XFxuZnMvcHJvYy9mZC5jOjc3OlxcdHJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZXFfc2hvdywgaW5vZGUpO1xcbmZzL3Byb2MvZmQuYy03OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjMzLjc5NzIzOTczOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzEwNzgxODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEJQRiBTeXN0ZW0gQ2FsbCBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnRzIGZvciBhbmFseXNpcy4gSSBpbml0aWFsbHkgbm90ZWQgdGhhdCBgc2VxX2ZkaW5mb19vcGVuYCBpcyBzdGF0aWMsIHdoaWNoIGlzbid0IGlkZWFsIGZvciBvdXIgcHVycG9zZXMuIExldCdzIGRpZyBkZWVwZXIuIFRoZSBpbnN0cnVjdGlvbiBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgc3RhdGljIGludGVybmFsIGhlbHBlcnMuIEZvY3VzaW5nIG9uIGBfX3N5c19icGZgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHJlY2FsbCB0aGF0IGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgYW5kIGBicGZfbGlua19zaG93X2ZkaW5mb2Agd2VyZSB0aGUgZnVuY3Rpb25zIG1vZGlmaWVkLlxuXG5Ob3csIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZD8gSSB0aG91Z2h0IG1heWJlIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgbWlnaHQgYmUgc3RhdGljLCBidXQgd2UgY2FuIHN0aWxsIGNvbnNpZGVyIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IG9wcG9ydHVuaXRpZXMgZm9yIEFQSSBlbnRyeXBvaW50cy4gVGhlIHJ1bGUgaXMgdG8gZm9jdXMgb24gdGhvc2Ugd2l0aCBhIGNsZWFyIHN5bWJvbCBhZGRyZXNzLiBJIGNoZWNrZWQsIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgICppcyogbm90IGlubGluZWQsIHNpbmNlIGl0J3MgY2FsbGVkIGRpcmVjdGx5LCBidXQgaXQncyBxdWl0ZSBsYXJnZSwgYW5kIGl0J3Mgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlci4gVGhlbiwgSSBmb3VuZCBpdCEgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCdzIGFkZHJlc3MgaXMgdGFrZW46IGAuc2hvd19mZGluZm8gPSBicGZfbGlua19zaG93X2ZkaW5mb2AsIHNvIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkIGFuZCBoYXMgYSBkaXN0aW5jdCBhZGRyZXNzLlxuXG5JIGNoZWNrZWQgYWdhaW4gb24gYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYC4gSXQncyBjYWxsZWQgZGlyZWN0bHkgYnV0IGNvdWxkIGJlIGludGVyZXN0aW5nLCBzaW5jZSBpdCdzIHF1aXRlIGxhcmdlLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBhZGRyZXNzIG9mIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAgaXMgdGFrZW4uIEl0J3Mgbm90LiBCdXQgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgICppcyogY2FsbGVkIGZyb20gYF9fc3lzX2JwZmAuXG5cbkFscmlnaHQsIEkgdGhpbmsgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGxpc3QgYm90aCBgX19zeXNfYnBmYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gSSdsbCBhbHNvIHdhbnQgdG8gcmV2aWV3IHRoZSBgS2NvbmZpZ2Agb3B0aW9ucyBmb3IgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE5MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0MC41MDgwMjUxMTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1OTYwNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c2NhbGxcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQwLjU2Mzk5NDI1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ0NTM5MzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEJQRiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlJ3JlIGZvY3VzaW5nIG9uIGhlcmUgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQncyB0aGUgb25lIHdlIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LiBHb29kLCBub3cgdGhhdCB3ZSBrbm93IHRoYXQsIGxldCdzIGp1c3QgZG8gYSBxdWljayBzY2FuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncyB3ZSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbSBhbHdheXMgbG9va2luZyBmb3IgdGhvc2UgaGlkZGVuIGRlcGVuZGVuY2llcy4gQWgsIGhlcmUncyBvbmUhIExvb2tzIGxpa2UgYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX1BST0NfRlNgIHdpdGhpbiBgYnBmX2xpbmtfZm9wc2AuIEdvdHRhIGtlZXAgdGhhdCBpbiBtaW5kLCB0aG9zZSBkZXBlbmRlbmNpZXMgY2FuIGJlIHJlYWxseSBjcnVjaWFsLiBJJ2xsIG1ha2UgYSBub3RlIG9mIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0NC4yMDg1MzcwMTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjYzMzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19QUk9DX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jPTk4OD1zdGF0aWMgZm1vZGVfdCBtYXBfZ2V0X3N5c19wZXJtcyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmQgZilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTk5OS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMDAwOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTEwMDEtLyogU2hvdyB0aGUgbWVtb3J5IHVzYWdlIG9mIGEgYnBmIG1hcCAqL1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MTE2OD1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJwZl9tYXBfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoxMTY5OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTExNzAtXFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbWFwX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjUzMT1zdGF0aWMgdm9pZCBicGZfcHJvZ19nZXRfc3RhdHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU1Ny1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyNTU4OiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI1NTktc3RhdGljIHZvaWQgYnBmX3Byb2dfc2hvd19mZGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI1ODk9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBicGZfcHJvZ19mb3BzID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjI1OTA6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMjU5MS1cXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9wcm9nX3Nob3dfZmRpbmZvLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzQ1MT1zdGF0aWMgaW50IGJwZl9saW5rX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNDU4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM0NTk6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzQ2MC0jZGVmaW5lIEJQRl9QUk9HX1RZUEUoX2lkLCBfbmFtZSwgcHJvZ19jdHhfdHlwZSwga2Vybl9jdHhfdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wcyA9IHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozNTIyOiNpZmRlZiBDT05GSUdfUFJPQ19GU1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM1MjMtXFx0LnNob3dfZmRpbmZvXFx0PSBicGZfbGlua19zaG93X2ZkaW5mbyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM1MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnBmX2xpbmtfZm9wc19wb2xsID0ge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM1MzE6I2lmZGVmIENPTkZJR19QUk9DX0ZTXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzUzMi1cXHQuc2hvd19mZGluZm9cXHQ9IGJwZl9saW5rX3Nob3dfZmRpbmZvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo0NC4yNjEyMTgzNjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MjE5OTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgTGluayBGRCBJbmZvKipcblxuQWxyaWdodCwgc28gSSBuZWVkIGBDT05GSUdfUFJPQ19GU2AgZW5hYmxlZCBmb3IgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gTm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuYXR1cmUgb2YgYC9wcm9jYCBhbmQgaXRzIHJvbGUgaW4gZXhwb3Npbmcga2VybmVsIGRhdGEuIEJ1dCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nIG9yIGZpZ3VyaW5nIG91dCBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24uXG5cbk5vdywgSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgIGl0c2VsZi4gSXMgaXQgZGVwZW5kZW50IG9uIGFueXRoaW5nIGVsc2U/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0gY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIG9yIGVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGludGVyZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGNvbmZpZ3VyaW5nIGEgbWluaW1hbCBvciBvcHRpbWl6ZWQga2VybmVsIGJ1aWxkLCBhbmQgSSBkb24ndCB3YW50IHRvIGJyaW5nIGluIHVubmVjZXNzYXJ5IGJsb2F0IG9yIGNvbXBsZXhpdHkuIEdvdHRhIHRyYWNrIGRvd24gKmV2ZXJ5KiByZXF1aXJlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE5MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQ3LjY1MzQyMDEyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUwMzI0NzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjQ3LjcwODQ2MzEwN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODczODMxMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEJQRiBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgYXQgdGhlIHN5c3RlbSBsZXZlbC4gU28sIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgcGxhY2VzLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvS2NvbmZpZ2AsIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQgdGhhdCBkZWFscyB3aXRoIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoYXQgYXJlYSBvZiB0aGUga2VybmVsIHNvdXJjZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IEJQRiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIHdoYXQgb3B0aW9ucyBtaWdodCBiZSBhdmFpbGFibGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcywgYW5kIGFueSByZWxhdGVkIG9wdGlvbnMsIHN1Y2ggYXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo1MC41ODIyOTcxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjU3NDI1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTY6NTIuNTE0ODc5MDg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTY0MzExMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBrZXJuZWwncyBCUEYgS2NvbmZpZywgZm9jdXNpbmcgYXJvdW5kIGxpbmUgMjcuXG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIHB1bGwgdXAgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gYXJvdW5kIGxpbmUgMjcuIEkgd2FudCB0byBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgdGhlcmUsIHdoYXQgZnVuZGFtZW50YWwgQlBGIG9wdGlvbnMgd2UncmUgdGFsa2luZyBhYm91dCwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEJQRiBzdWJzeXN0ZW0gd2l0aGluIHRoZSBrZXJuZWwuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY29yZSBjYXBhYmlsaXRpZXMgb3IgZGVwZW5kZW5jaWVzIGl04oCZcyBzZXR0aW5nIHVwLiBJcyBpdCByZWxhdGVkIHRvIHRyYWNpbmcsIG5ldHdvcmtpbmcsIHNlY3VyaXR5LCBvciBwZXJoYXBzIGEgbW9yZSBnZW5lcmFsIGVuYWJsaW5nIGZsYWc/IFdoYXQgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBhcmUgd2UgZ2V0dGluZyBhdCB0aGlzIHBvaW50IGluIHRoZSBjb25maWd1cmF0aW9uPyBJJ20gYW50aWNpcGF0aW5nIGl0J3MgcHJvYmFibHkgYSBjcnVjaWFsIHNldHRpbmcuIEknbSByZWFkeSB0byBkaWdlc3QgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBpdCwgbG9va2luZyBmb3IgYW55IGltbWVkaWF0ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBCUEYgaXMgdXNlZCBvciBtYW5hZ2VkIHdpdGhpbiBhIHN5c3RlbSdzIGNvbmZpZ3VyYXRpb24uIEknbSBrZWVuIHRvIHNwb3QgYW55IGdvdGNoYXMgb3Igbm9uLW9idmlvdXMgZGVmYXVsdHMgdGhhdCBtaWdodCBjYXRjaCBzb21lb25lIG91dC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHksIGxldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQyMTo1Njo1Ni4wMzEzMTI4MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdG1lbnUgXFxcIkJQRiBzdWJzeXN0ZW1cXFwiXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBCUEZfU1lTQ0FMTFxcbiAgMjg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXFxcIlxcbiAgMjk6XFx0XFx0c2VsZWN0IEJQRlxcbiAgMzA6XFx0XFx0c2VsZWN0IElSUV9XT1JLXFxuICAzMTpcXHRcXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1VcXG4gIDMyOlxcdFxcdHNlbGVjdCBUQVNLU19UUkFDRV9SQ1VcXG4gIDMzOlxcdFxcdHNlbGVjdCBCSU5BUllfUFJJTlRGXFxuICAzNDpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHIGlmIE5FVFxcbiAgMzU6XFx0XFx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXFxuICAzNjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxcbiAgMzc6XFx0XFx0ZGVmYXVsdCBuXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSB0aGUgYnBmKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSBCUEYgcHJvZ3JhbXNcXG4gIDQwOlxcdFxcdCAgYW5kIG1hcHMgdmlhIGZpbGUgZGVzY3JpcHRvcnMuXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBCUEZfSklUXFxuICA0MzpcXHRcXHRib29sIFxcXCJFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclxcXCJcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gQlBGXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDIxOjU2OjU2LjAzMTM4NDAyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTQ3NjE2MTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBMaW5rIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIG15IHRha2U6IHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGRlZmluaXRlbHkgYEJQRl9TWVNDQUxMYC4gV2UnbGwgYWxzbyBuZWVkIGBQUk9DX0ZTYCBlbmFibGVkIGZvciB0aGUgZmlsZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uIGFzcGVjdCBvZiB0aGluZ3MuXG5cblRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuIEl0IGRvZXMgdGhpcyBieSBpbXBsZW1lbnRpbmcgYHJjdV9yZWFkX2xvY2soKWAgYW5kIGBSRUFEX09OQ0UobGluay1cdTAwM2Vwcm9nKWAgd2hlbiBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2Agd2l0aGluIGBicGZfbGlua19zaG93X2ZkaW5mb2AgYW5kIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuIFRoaXMgZml4IGxvb2tzIHNvbGlkIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi5cblxuTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIG9uIGEgZmV3IGtleSBzeW1ib2xzOiBgX19zeXNfYnBmYCBhbmQgYGJwZl9saW5rX3Nob3dfZmRpbmZvYC4gV2UndmUgY29uZmlybWVkIGBicGZfbGlua19zaG93X2ZkaW5mb2AgaXMgc3RhdGljIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhbmQgc3RvcmVkIGluIGBicGZfbGlua19mb3BzLnNob3dfZmRpbmZvYC4gU28gd2Ugd29uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbmxpbmluZywgdGhpcyBpcyBzb21ldGhpbmcgd2UgY2FuIGZ1enovdHJhY2UuIGBfX3N5c19icGZgIGlzIHRoZSBnYXRld2F5IGZ1bmN0aW9uIGZvciB0aGUgYGJwZigpYCBzeXNjYWxsLCB3aGljaCBzdWJzZXF1ZW50bHkgY2FsbHMgYGJwZl9vYmpfZ2V0X2luZm9fYnlfZmRgLCB3aGljaCBmdXJ0aGVyIGNhbGxzIGBicGZfbGlua19nZXRfaW5mb19ieV9mZGAuXG5cbkkgcXVpY2tseSBkb3VibGUtY2hlY2tlZCwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgdGhlIG9ubHkgY29uZmlnIHdlIG5lZWQuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBpc3N1ZSB3aGVyZSBhY2Nlc3NpbmcgYGxpbmstXHUwMDNlcHJvZ2AgaW4gdGhlc2UgZnVuY3Rpb25zIGNvdWxkIGxlYWQgdG8gYSByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSwgZXNwZWNpYWxseSBzaW5jZSBib3RoIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHZpYSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbiBhbmQgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0J3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei5cbkkndmUgdmVyaWZpZWQgdGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSBjb3JyZWN0LiBgYnBmX2xpbmtfc2hvd19mZGluZm9gLCBhbmQgYF9fc3lzX2JwZmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDcsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMjE6NTc6MDMuOTc5MDA1MzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyMzkxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zeXNfYnBmXCIsXG4gICAgXCJicGZfbGlua19zaG93X2ZkaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIHdoZW4gYWNjZXNzaW5nIGBsaW5rLVxcdTAwM2Vwcm9nYCBpbiBgYnBmX2xpbmtfc2hvd19mZGluZm9gIGFuZCBgYnBmX2xpbmtfZ2V0X2luZm9fYnlfZmRgIGJ5IGFkZGluZyBSQ1UgcmVhZCBsb2NrcyBhbmQgYFJFQURfT05DRWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGAvcHJvYy9zZWxmL2ZkaW5mby9gIGludGVyZmFjZSBhbmQgdGhlIGBicGYoKWAgc3lzY2FsbCB3aXRoIGBCUEZfT0JKX0dFVF9JTkZPX0JZX0ZEYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3lzX2JwZlwiLFxuICAgIFwiYnBmX2xpbmtfc2hvd19mZGluZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSB3aGVuIGFjY2Vzc2luZyBgbGluay1cXHUwMDNlcHJvZ2AgaW4gYGJwZl9saW5rX3Nob3dfZmRpbmZvYCBhbmQgYGJwZl9saW5rX2dldF9pbmZvX2J5X2ZkYCBieSBhZGRpbmcgUkNVIHJlYWQgbG9ja3MgYW5kIGBSRUFEX09OQ0VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBgL3Byb2Mvc2VsZi9mZGluZm8vYCBpbnRlcmZhY2UgYW5kIHRoZSBgYnBmKClgIHN5c2NhbGwgd2l0aCBgQlBGX09CSl9HRVRfSU5GT19CWV9GRGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[1] Phase: Succeeded StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-28 21:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-28 21:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2] Phase: Succeeded StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-28 21:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-28 21:57:16 +0000 UTC FinishedAt: 2026-07-28 21:57:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8n6fs/series-workflow8n6fs-convert-artifact-3715923188/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-28 21:57:26 +0000 UTC FinishedAt: 2026-07-28 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-28 21:57:26 +0000 UTC FinishedAt: 2026-07-28 22:18:51 +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:*3c172cd1-34d4-4125-bb5c-edd6034de08d,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-workflow8n6fs/series-workflow8n6fs-convert-artifact-3715923188/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": "310bde4e-c4e8-4cb1-9f3b-b43e3f951a26", "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-workflow8n6fs/series-workflow8n6fs-build-action-3609616882/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-28 21:57:26 +0000 UTC FinishedAt: 2026-07-28 22:18:41 +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:*3c172cd1-34d4-4125-bb5c-edd6034de08d,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-workflow8n6fs/series-workflow8n6fs-convert-artifact-3715923188/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": "310bde4e-c4e8-4cb1-9f3b-b43e3f951a26", "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-workflow8n6fs/series-workflow8n6fs-build-action-3609616882/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-28 22:18:51 +0000 UTC FinishedAt: 2026-07-28 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-28 22:18:51 +0000 UTC FinishedAt: 2026-07-28 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-28 22:18:51 +0000 UTC FinishedAt: 2026-07-28 22:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-28 22:18:51 +0000 UTC FinishedAt: 2026-07-28 22:18:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8n6fs/series-workflow8n6fs-convert-artifact-4023490227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-28 22:19:01 +0000 UTC FinishedAt: 2026-07-28 22:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-28 22:19:01 +0000 UTC FinishedAt: 2026-07-28 22:21:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310bde4e-c4e8-4cb1-9f3b-b43e3f951a26,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-workflow8n6fs/series-workflow8n6fs-build-action-3609616882/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-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-28 22:21:15 +0000 UTC FinishedAt: 2026-07-28 22:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-28 22:21:15 +0000 UTC FinishedAt: 2026-07-28 22:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-28 22:21:15 +0000 UTC FinishedAt: 2026-07-28 22:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-28 22:21:15 +0000 UTC FinishedAt: 2026-07-28 22:43:37 +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:*3c172cd1-34d4-4125-bb5c-edd6034de08d,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-workflow8n6fs/series-workflow8n6fs-convert-artifact-4023490227/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": "b1f2e3fb-159d-4972-9418-5c1b274b5e27", "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-workflow8n6fs/series-workflow8n6fs-build-action-2679283559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-28 22:21:15 +0000 UTC FinishedAt: 2026-07-28 22:43:27 +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:*3c172cd1-34d4-4125-bb5c-edd6034de08d,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-workflow8n6fs/series-workflow8n6fs-convert-artifact-4023490227/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": "b1f2e3fb-159d-4972-9418-5c1b274b5e27", "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-workflow8n6fs/series-workflow8n6fs-build-action-2679283559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-28 22:43:37 +0000 UTC FinishedAt: 2026-07-28 22:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-28 22:43:37 +0000 UTC FinishedAt: 2026-07-28 22:43:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-28 22:43:37 +0000 UTC FinishedAt: 2026-07-28 22:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-28 22:43:37 +0000 UTC FinishedAt: 2026-07-28 22:45:19 +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:*b1f2e3fb-159d-4972-9418-5c1b274b5e27,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-workflow8n6fs/series-workflow8n6fs-build-action-2679283559/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-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"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:*310bde4e-c4e8-4cb1-9f3b-b43e3f951a26,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1f2e3fb-159d-4972-9418-5c1b274b5e27,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-workflow8n6fs/series-workflow8n6fs-build-action-3609616882/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-workflow8n6fs/series-workflow8n6fs-build-action-2679283559/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-28 22:45:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-28 22:45:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"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-workflow8n6fs/series-workflow8n6fs-convert-artifact-3481962924/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-28 22:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-28 22:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-28 22:45:29 +0000 UTC FinishedAt: 2026-07-28 22:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-28 22:45:39 +0000 UTC FinishedAt: 2026-07-29 01:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8n6fs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["__sys_bpf","bpf_link_show_fdinfo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","PROC_FS"],"series_id":"95306a6d-5ca9-4a59-badd-a3629eabcecb","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-28 22:45:39 +0000 UTC FinishedAt: 2026-07-29 01:46:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*310bde4e-c4e8-4cb1-9f3b-b43e3f951a26,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1f2e3fb-159d-4972-9418-5c1b274b5e27,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-workflow8n6fs/series-workflow8n6fs-build-action-3609616882/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-workflow8n6fs/series-workflow8n6fs-build-action-2679283559/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-workflow8n6fs/series-workflow8n6fs-convert-artifact-3481962924/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,}