Name: series-workflowlf45c Phase: Succeeded StartedAt: 2026-08-13 05:39:19 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[0] Phase: Succeeded StartedAt: 2026-08-13 05:39:19 +0000 UTC FinishedAt: 2026-08-13 05:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 05:39:19 +0000 UTC FinishedAt: 2026-08-13 05:42:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "6cedb501-e254-4336-bb2c-c568b82ef11f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default", "futex_hash" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTc3OTdlOWZmMWMxYjJlODlmNTRmOTc2ZmRhMzAwN2VlMzdjM2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDU6NDA6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdFx0ZnBoID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4gXHRcdGlmIChmcGgpIHtcbi1cdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbiYjNDM7XHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbiYjNDM7XHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4mIzQzO1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcbiBcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xuIFx0XHRuZXcgPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbi1cdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhbmV3KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSBmb3IgcHJpdmF0ZSBoYXNoZXMsIGNoYW5naW5nIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgRnV0ZXggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgcHJpdmF0ZSBmdXRleCBoYXNoZXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGZldyBrZXkgY2hhbmdlcy4gVGhlIGNvZGUmIzM5O3Mgc3dpdGNoZWQgdG8gdXNpbmcgYFdSSVRFX09OQ0VgIGluc3RlYWQgb2YgZGlyZWN0IGFzc2lnbm1lbnQgZm9yIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIHNpbWlsYXJseSBpbiB0aGUgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgbWVtb3J5IG9yZGVyaW5nIGNvbmNlcm5zIOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgZW5zdXJpbmcgdGhlIG5ldyBwb2ludGVyIHZhbHVlIGlzIHZpc2libGUgY29ycmVjdGx5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcyBpcyBjcnVjaWFsLiBXZSYjMzk7dmUgZ290IGEgc3dhcCBmcm9tIG11dGV4IHRvIFJDVSAoYGd1YXJkKHJjdSkoKWAgaW5zdGVhZCBvZiBgZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7YCkgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBBbmQgYFJFQURfT05DRWAgaGFzIGJlZW4gYWRkZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZ1dGV4IGNvcmUgbG9naWMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgcHJpdmF0ZSBmdXRleCBoYXNoZXMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBpbiB0aGUgbG9jayBzdHJ1Y3R1cmUuIFRoZSBzaGlmdCBmcm9tIGEgbXV0ZXggdG8gUkNVIGlzIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBpbmRpY2F0ZXMgYSBkZXNpZ24gY2hhbmdlIHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IHN0cmVzcyB0ZXN0ZWQuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBhbmQgbWVtb3J5IGJhcnJpZXIgYmVoYXZpb3IsIGFzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbXBfcm1iKClgLgoKTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgY29uY3VycmVuY3ksIG1lbW9yeSBiYXJyaWVycywgYW5kIFJDVSBpcyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgdGhhdCBjYW4gYmUgdHJpY2t5IHRvIGV4cG9zZS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpbiB0aGF0IGZpbGUuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGZ1dGV4IGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfRlVURVhgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIGEgZ29vZCBoYWJpdCB0byBjaGVjay4gR290dGEgZW5zdXJlIGZ1dGV4ZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHRvIGF2b2lkIGEgd2FzdGVkIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9waXZvdF9wZW5kaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg0OnN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODUte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Nzg6XHRcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlByaW9yaXRpemluZyB0aGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgZHJhd2luZyBteSBhdHRlbnRpb24/IEFoYSEgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20gc29tZXdoZXJlLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBvaW50IG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiB0aGF0IHdlIHNob3VsZCBmb2N1cyBvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRnV0ZXggSGFzaGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIGltcGxlbWVudGF0aW9uLCBhbmQgSSB0aGluayBgZnV0ZXhfaGFzaF9wcmN0bGAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZXNlIGtpbmRzIG9mIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgYXJlIGdvb2QgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gQWxzbywgbGV0JiMzOTtzIGluY2x1ZGUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBiZWluZyBjYWxsZWQgdG8gZnVsbHkgYXBwcmVjaWF0ZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBmdXRleCBzdWJzeXN0ZW0uIEtub3dpbmcgaXRzIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEdvdHRhIG1hcCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzoKCioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggS2VybmVsIFBhdGgqKgoKQWxyaWdodCwgc28gYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBgUFJfRlVURVhfSEFTSGAgY2FsbHMuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIEl0JiMzOTtzIGEgc3lzY2FsbCBlbnRyeSwgc28gdGhlIGtlcm5lbCBpcyBkaXJlY3RseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSB0aGF0IGNhbGwgaXMgZ29pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBmdW5jdGlvbiBpcyBkb2luZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IHByb3ZpZGVzIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc2LVxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcbmtlcm5lbC9mb3JrLmMtMTk3OC17XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNDEwLVxua2VybmVsL2ZvcmsuYzoyNDExOlx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xua2VybmVsL2ZvcmsuYzoyNDEyOlx0XHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcbmtlcm5lbC9mb3JrLmMtMjQxMy1cdFx0aWYgKHJldHZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRnV0ZXggSW5pdGlhbGl6YXRpb24gRHVyaW5nIFByb2Nlc3MgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBmdXRleCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgYGNvcHlfcHJvY2Vzc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBmdXRleGVzIGluIG5ldyBwcm9jZXNzZXMuIFRoZSBjb250ZXh0IHNlZW1zIHRvIGJlIHNldCB1cCB0aHJvdWdoIGEgZm9yayBvciBjbG9uZSBjYWxsLiBOb3csIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGhlcmUgYXBwZWFycyB0byBiZSBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5IHRoZSBkZWZpbml0aW9uIGFuZCBwdXJwb3NlIG9mIGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYC4gSSB3YW50IHRvIHNlZSB3aGF0IHRoYXQgcGFydGljdWxhciBjb25maWcgZG9lcywgaWYgYW55dGhpbmcgc3BlY2lmaWMgdG8gYGNvcHlfcHJvY2Vzc2AgYW5kIGZ1dGV4IGluaXRpYWxpemF0aW9uLiBMZXQgbWUgc2VlIHdoZXJlIGl0JiMzOTtzIHNldCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gb24gaG93IHRoaXMgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBmdXRleCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIG1vcmUgYWJvdXQgaG93IHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCB3aGljaCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gbWVhbnMgYGluaXQvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaXMgbGlrZWx5IHNvbWV3aGVyZSBhcm91bmQgbGluZSAxODQ5LCBtYXliZSB3aGVyZSB0aGV5IHN0YXJ0IGRlZmluaW5nIGEgbmV3IGZlYXR1cmUuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDA6XHRcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiZSBidWlsdCB3aXRob3V0XG4xODQxOlx0XHQgIHN1cHBvcnQgZm9yIFwmIzM0O2Zhc3QgdXNlcnNwYWNlIG11dGV4ZXNcJiMzNDsuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XG4xODQyOlx0XHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxuMTg0MzpcdFxuMTg0NDpcdGNvbmZpZyBGVVRFWF9QSVxuMTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZVVEVYIEhhc2hpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgRlVURVggaGFzaGluZyBpbXBsZW1lbnRhdGlvbiwgdGhlIGNvcmUgZW5hYmxlciBzZWVtcyB0byBiZSBgRlVURVhgLCB3aGljaCBtYWtlcyBzZW5zZS4gQW5kLCBhcyBleHBlY3RlZCwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gdGhvc2UgdG8gc2VlIGhvdyB0aGUgaGFzaGluZyBhY3R1YWxseSB3b3JrcyBhbmQgd2hlbiBpdCYjMzk7cyBsZXZlcmFnZWQuCgpXYWl0LCBsb29raW5nIGNsb3NlciBhdCB0aGUgZGVjbGFyYXRpb24sIGl0IHNlZW1zIGxpa2UgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIE9rYXksIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIG15IGFuYWx5c2lzIHNvbWV3aGF0LiBUaGF0IG1lYW5zIEkgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgZXh0ZXJuYWwgY2FsbGVycy4gQnV0IGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwgd2FudCB0byB0cmFjZSB0aGVpciB1c2UgbW9yZSBnZW5lcmFsbHkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0IHRoYXQgdGhleSBzdXBwb3J0LgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgYGZ1dGV4X3Bpdm90X2hhc2hgIGFuZCBgX19mdXRleF9waXZvdF9oYXNoYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjE9c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMjg6XHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1NjpcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3MjpcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVx1MDAzZXByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzMtXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcdCAqIGZ1dGV4X2hhc2goKVx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTgtXHQgKiAgIGd1YXJkKHJjdSk7XHRcdCAgZ3VhcmQobW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNzg0PXN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1Olx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTYtXHQgKi9cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTMxOlx0XHRcdGlmICghX19mdXRleF9waXZvdF9oYXNoKG1tLCBuZXcpIFx1MDAyNlx1MDAyNiBjdXN0b20pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzItXHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGZ1dGV4IGhhc2hpbmcgbWVjaGFuaXNtcy4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBzZWVtIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cywga2V5IGZvY3VzIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgcG90ZW50aWFsIGhhc2hpbmcgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgaXMgYGZ1dGV4X2hhc2hgIHN0YXRpYz8gTm8sIGl0JiMzOTtzIG5vdC4gVGhhdOKAmXMgZ29vZCB0byBrbm93LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnV0ZXhfaGFzaGAgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgIHRvIHNlZSBob3cgaXQgd29ya3MuIFRoYXQmIzM5O3MgdGhlIGJlc3QgbmV4dCBzdGVwIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGhhc2hpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMzM9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjYxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6Mjc4OnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEb3VibGUgRGVmaW5pdGlvbiBTdXNwZWN0OiBmdXRleF9oYXNoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gc2VlaW5nIGBmdXRleF9oYXNoYCBkZWZpbmVkIHR3aWNlLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQg4oCTIHByb2JhYmx5IHNvbWV0aGluZyB0aWVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgY29udHJvbGxlZCBieSBgI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgKnJlYWwqIGRlZmluaXRpb24gaXMgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGluY2x1ZGUvbGludXgvZnV0ZXguaGAgYW5kIGBrZXJuZWwvZnV0ZXgvZnV0ZXguaGAgdG8gc2VlIHdoaWNoIG9uZSBkZWZpbmVzIHRoZSBwcmltYXJ5IHZlcnNpb24gb2YgYGZ1dGV4X2hhc2hgLCBhbmQgd2hhdCB0aGUgYCNpZmRlZmAgc3RhdGVtZW50IGRvZXMuIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9rZXlfaXNfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTAtICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoxNTE6c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1Mi1cdGF0b21pY190IHdhaXRlcnM7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQxPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIHtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0MjpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDMtXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCkgeyB9XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU0LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU1OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Nz1ERUZJTkVfQ0xBU1MoaGJyLCBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OC1cdCAgICAgaWYgKF9ULmZwaCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVC5mcGgpLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU5Olx0ICAgICBmdXRleF9oYXNoKGtleSksIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2MC1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yODc9ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyODg6ZXh0ZXJuIHN0cnVjdCBmdXRleF9xICpmdXRleF90b3Bfd2FpdGVyKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OS1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zMDg9ZXh0ZXJuIHZvaWQgX19mdXRleF91bnF1ZXVlKHN0cnVjdCBmdXRleF9xICpxKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMwOTpleHRlcm4gdm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEwLVx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMxMT1leHRlcm4gaW50IGZ1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMy0vKipcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMxNDogKiBmdXRleF9xdWV1ZSgpIC0gRW5xdWV1ZSB0aGUgZnV0ZXhfcSBvbiB0aGUgZnV0ZXhfaGFzaF9idWNrZXRcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxNS0gKiBAcTpcdFRoZSBmdXRleF9xIHRvIGVucXVldWVcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjctICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMjg6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI5LVx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzQwPWV4dGVybiB2b2lkIHdhaXRfZm9yX293bmVyX2V4aXRpbmcoaW50IHJldCwgc3RydWN0IHRhc2tfc3RydWN0ICpleGl0aW5nKTtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDQtICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozNDU6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hiX3dhaXRlcnNfaW5jKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDYte1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM1OS0gKi9cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2MDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19kZWMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2MS17XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzY3OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hiX3dhaXRlcnNfcGVuZGluZyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY4LXtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNzktXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODA6ZXh0ZXJuIHZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgxLVx0X19hY3F1aXJlcyhcdTAwMjZoYi1cdTAwM2Vsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4My1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NDpleHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg1LVx0X19yZWxlYXNlcyhcdTAwMjZoYi1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVx0XHRcdFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDAyPXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDAzOmRvdWJsZV9sb2NrX2hiKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQwNC1cdF9fYWNxdWlyZXMoXHUwMDI2aGIxLVx1MDAzZWxvY2spXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDE2PXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDE3OmRvdWJsZV91bmxvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDE4LVx0X19yZWxlYXNlcyhcdTAwMjZoYjEtXHUwMDNlbG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjgKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZ1dGV4IFByaXZhdGUgSGFzaCoqCgpPa2F5LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIHBsYW4uIFRoZSBjb3JlIG9mIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGUgYGZ1dGV4X2hhc2hgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcHJpdmF0ZSBoYXNoZXMuIFRoZSBwcmltYXJ5IHN5bWJvbHMgSSYjMzk7bSB0YXJnZXRpbmcgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGFuZCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoYCBpdHNlbGYuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IHdlJiMzOTtyZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgd2l0aGluIHRoZSBmdXRleCBjb3JlLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBtdXRleC1iYXNlZCBhcHByb2FjaCB0byBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHN0cmF0ZWd5IGFuZCBpbnRyb2R1Y2luZyBtZW1vcnkgYmFycmllcnMuIFRoYXQgbGV2ZWwgb2YgY29yZSBsb2dpYyBtb2RpZmljYXRpb24gKnNjcmVhbXMqIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzIG9yIG90aGVyIHBvdGVudGlhbCBidWdzLgoKVG8gZW5hYmxlIHRoaXMsIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBiZSBzdXJlIGlzIGVuYWJsZWQgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgY2hlY2tlZDsgdGhhdCYjMzk7cyB0aGUga2V5LiBPZiBjb3Vyc2UsIGBGVVRFWGAgaXMgYWxzbyBuZWVkZWQsIGJ1dCBgRlVURVhfUFJJVkFURV9IQVNIYCBkZXBlbmRzIG9uIGl0LCBzbyBpdCYjMzk7cyBhIHN1ZmZpY2llbnQgaW5kaWNhdG9yIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyB0aGVyZS4KCkxldCYjMzk7cyBjYWxsIHRoZSByZXN1bHRzIGFuZCBnZXQgaXQgZ29pbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjEKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgbW1waC0mZ3Q7aGFzaF9uZXdgIGZpZWxkIGlzIGFjY2Vzc2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgY29uY3VycmVuY3kgZml4IOKAkyBjaGFuZ2luZyB0aGUgbG9ja2luZyBtZWNoYW5pc20gYXJvdW5kIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgaG93IHRoYXQgYGhhc2hfbmV3YCBmbGFnIGlzIGhhbmRsZWQuIFRoZXkmIzM5O3JlIG1vdmluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciB0aGlzIGtpbmQgb2Ygb3B0aW1pemF0aW9uLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyBhbHdheXMgJiMzNDthcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/JiMzNDsgVGhlIGFuc3dlciBpcyBsaWtlbHkgbm8sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0ICpzeW5jaHJvbml6YXRpb24qIGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcy4gS01TQU4gaXNuJiMzOTt0IHRoZSByaWdodCB0b29sIGhlcmUuIFdlJiMzOTtkIGJlIGxvb2tpbmcgYXQgS0NTQU4gb3IgS0FTQU4gdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgTE9DS0RFUCB0byBmbGFnIGFueSBsb2NraW5nIGlzc3VlcywgYnV0IG5vdCBLTVNBTi4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBLTVNBTiByZWFzb25pbmcuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzIGFib3V0IGNvbmN1cnJlbmN5IGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBvciBhbGxvY2F0aW5nIGFueSBuZXcgc3RydWN0dXJlcy4gSXQmIzM5O3Mgc3dhcHBpbmcgYSBtdXRleCBmb3IgUkNVIHJlYWQgbG9jayBhbmQgbWVtb3J5IGJhcnJpZXJzLCBhbmQgdXNpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0Ugb24gdGhlIGBoYXNoX25ld2AgdmFyaWFibGUuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGFsbG9jYXRpb25zIGhhcHBlbmluZyBhbmQgbm8gZGF0YSBjb3B5aW5nIHRvIG9yIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgdGhlIG9ubHkgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRvdWNoaW5nIGFueSBtZW1vcnkgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFdlIGNhbiBmb3JtdWxhdGUgYSByZXNwb25zZSB3aXRoIHRoYXQgaW4gbWluZDoKCk5lZWRzS01TQU46IGZhbHNlCktNU0FOUmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSByZWFkIGxvY2ssIG1lbW9yeSBiYXJyaWVycywgYW5kIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3Jvcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6MzcuNzYxNTM0Mzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MDk3NzE0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6MzcuNzYxNTQyMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MzUyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0MDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjM5LjAzNjYzMjYwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5MTk5MTIxNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICAgIFwiZnV0ZXhfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFdSSVRFX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldywgbmV3KTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcbkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdFx0ZnBoID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4gXHRcdGlmIChmcGgpIHtcbi1cdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbitcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbitcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbitcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG5AQCAtMTg3OSw3ICsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcbiBcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xuIFx0XHRuZXcgPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbi1cdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdFx0XHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGZyZWUgPSBmcGg7XG4tXHRcdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcbitcdFx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhbmV3KSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MDozOS4wMzY2MzM4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk2NTM4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVGhpcyBGdXRleCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBwcml2YXRlIGZ1dGV4IGhhc2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBjaGFuZ2VzLiBUaGUgY29kZSdzIHN3aXRjaGVkIHRvIHVzaW5nIGBXUklURV9PTkNFYCBpbnN0ZWFkIG9mIGRpcmVjdCBhc3NpZ25tZW50IGZvciBgbW1waC1cdTAwM2VoYXNoX25ld2AgYW5kIHNpbWlsYXJseSBpbiB0aGUgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgbWVtb3J5IG9yZGVyaW5nIGNvbmNlcm5zIOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhY2Nlc3MsIGFuZCBlbnN1cmluZyB0aGUgbmV3IHBvaW50ZXIgdmFsdWUgaXMgdmlzaWJsZSBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCBDUFVzIGlzIGNydWNpYWwuIFdlJ3ZlIGdvdCBhIHN3YXAgZnJvbSBtdXRleCB0byBSQ1UgKGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO2ApIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gQW5kIGBSRUFEX09OQ0VgIGhhcyBiZWVuIGFkZGVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmdXRleCBjb3JlIGxvZ2ljLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IHByaXZhdGUgZnV0ZXggaGFzaGVzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGxvY2sgc3RydWN0dXJlLiBUaGUgc2hpZnQgZnJvbSBhIG11dGV4IHRvIFJDVSBpcyBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgaW5kaWNhdGVzIGEgZGVzaWduIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSBzdHJlc3MgdGVzdGVkLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgYW5kIG1lbW9yeSBiYXJyaWVyIGJlaGF2aW9yLCBhcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc21wX3JtYigpYC5cblxuTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgY29uY3VycmVuY3ksIG1lbW9yeSBiYXJyaWVycywgYW5kIFJDVSBpcyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgdGhhdCBjYW4gYmUgdHJpY2t5IHRvIGV4cG9zZS4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGluIHRoYXQgZmlsZS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBmdXRleCBjb25maWd1cmF0aW9uLiBgQ09ORklHX0ZVVEVYYCBpcyB1c3VhbGx5IGVuYWJsZWQsIGJ1dCBpdCdzIGEgZ29vZCBoYWJpdCB0byBjaGVjay4gR290dGEgZW5zdXJlIGZ1dGV4ZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHRvIGF2b2lkIGEgd2FzdGVkIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjQ3LjMzMzE3NTY1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6NDcuMzgwODk5MTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1ODM1NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqUHJpb3JpdGl6aW5nIHRoZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBrZXkgaGVyZS4gTGV0J3Mgc2VlLi4uIHdoYXQncyBkcmF3aW5nIG15IGF0dGVudGlvbj8gQWhhISBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUsIGFuZCBpdCdzIGJlaW5nICpjYWxsZWQqIGZyb20gc29tZXdoZXJlLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBvaW50IG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiB0aGF0IHdlIHNob3VsZCBmb2N1cyBvbiBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjUwLjczOTI1ODY0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI3Mjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjUwLjc4NjUzNjExNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTcwNTE1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZ1dGV4IEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1dGV4IGhhc2hpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBJIHRoaW5rIGBmdXRleF9oYXNoX3ByY3RsYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCB0aGVzZSBraW5kcyBvZiBjb250cm9sIHBhdGggZnVuY3Rpb25zIGFyZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gQWxzbywgbGV0J3MgaW5jbHVkZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGJlaW5nIGNhbGxlZCB0byBmdWxseSBhcHByZWNpYXRlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZnV0ZXggc3Vic3lzdGVtLiBLbm93aW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBHb3R0YSBtYXAgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjU1LjYwMzU5MDkyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3NDgzNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTc4LVxcdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDAte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcbi0tXFxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcXG4tLVxcbmtlcm5lbC9zeXMuYy0yODg0LVxcdGNhc2UgUFJfRlVURVhfSEFTSDpcXG5rZXJuZWwvc3lzLmM6Mjg4NTpcXHRcXHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XFxua2VybmVsL3N5cy5jLTI4ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjU3LjMwMTA3ODQ5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTIwNzEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggS2VybmVsIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBQUl9GVVRFWF9IQVNIYCBjYWxscy4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIEl0J3MgYSBzeXNjYWxsIGVudHJ5LCBzbyB0aGUga2VybmVsIGlzIGRpcmVjdGx5IGludm9raW5nIHRoaXMgZnVuY3Rpb24uIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoYXQgY2FsbCBpcyBnb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uIGlzIGRvaW5nLiBMZXQncyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MTowMy42MTMxNTI3NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTcxMTY5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzk9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODI6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4NTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05OT1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTAzOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk2OT1zdGF0aWMgdm9pZCBydl90YXNrX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTc2LVxcbmtlcm5lbC9mb3JrLmM6MTk3NzpzdGF0aWMgYm9vbCBuZWVkX2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh1NjQgY2xvbmVfZmxhZ3MpXFxua2VybmVsL2ZvcmsuYy0xOTc4LXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNDEwLVxcbmtlcm5lbC9mb3JrLmM6MjQxMTpcXHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XFxua2VybmVsL2ZvcmsuYzoyNDEyOlxcdFxcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xcbmtlcm5lbC9mb3JrLmMtMjQxMy1cXHRcXHRpZiAocmV0dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MDUuMzEwMjc1MzY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjkyMzY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZ1dGV4IEluaXRpYWxpemF0aW9uIER1cmluZyBQcm9jZXNzIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGZ1dGV4IGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIGdldHRpbmcgY2FsbGVkIGR1cmluZyBgY29weV9wcm9jZXNzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgZnV0ZXhlcyBpbiBuZXcgcHJvY2Vzc2VzLiBUaGUgY29udGV4dCBzZWVtcyB0byBiZSBzZXQgdXAgdGhyb3VnaCBhIGZvcmsgb3IgY2xvbmUgY2FsbC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlIGFwcGVhcnMgdG8gYmUgYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBMZXQgbWUgcXVpY2tseSBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgcHVycG9zZSBvZiBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgd2FudCB0byBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgY29uZmlnIGRvZXMsIGlmIGFueXRoaW5nIHNwZWNpZmljIHRvIGBjb3B5X3Byb2Nlc3NgIGFuZCBmdXRleCBpbml0aWFsaXphdGlvbi4gTGV0IG1lIHNlZSB3aGVyZSBpdCdzIHNldCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGZ1dGV4IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MDguOTc5NTE0ODk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MDY3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MTAuNTE3NTg2ODYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODc5MTMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgbW9yZSBhYm91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgd2hpY2ggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG1lYW5zIGBpbml0L0tjb25maWdgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGlzIGxpa2VseSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTg0OSwgbWF5YmUgd2hlcmUgdGhleSBzdGFydCBkZWZpbmluZyBhIG5ldyBmZWF0dXJlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjE1LjcwNTUwMjUyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDA6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcXG4xODQxOlxcdFxcdCAgc3VwcG9ydCBmb3IgXFxcImZhc3QgdXNlcnNwYWNlIG11dGV4ZXNcXFwiLiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxcbjE4NDI6XFx0XFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cXG4xODQzOlxcdFxcbjE4NDQ6XFx0Y29uZmlnIEZVVEVYX1BJXFxuMTg0NTpcXHRcXHRib29sXFxuMTg0NjpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IFJUX01VVEVYRVNcXG4xODQ3OlxcdFxcdGRlZmF1bHQgeVxcbjE4NDg6XFx0XFxuMTg0OTpcXHRjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuMTg1MDpcXHRcXHRib29sXFxuMTg1MTpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2ICFCQVNFX1NNQUxMIFxcdTAwMjZcXHUwMDI2IE1NVVxcbjE4NTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1MzpcXHRcXG4xODU0OlxcdGNvbmZpZyBGVVRFWF9NUE9MXFxuMTg1NTpcXHRcXHRib29sXFxuMTg1NjpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IE5VTUFcXG4xODU3OlxcdFxcdGRlZmF1bHQgeVxcbjE4NTg6XFx0XFxuMTg1OTpcXHRjb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjE1LjcwNTY2NTc3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkzMjEzNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlVURVggSGFzaGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIEZVVEVYIGhhc2hpbmcgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGVuYWJsZXIgc2VlbXMgdG8gYmUgYEZVVEVYYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCwgYXMgZXhwZWN0ZWQsIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBoZXJlIGFyZSBnb2luZyB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJ2xsIHdhbnQgdG8gZGlnIGludG8gdGhvc2UgdG8gc2VlIGhvdyB0aGUgaGFzaGluZyBhY3R1YWxseSB3b3JrcyBhbmQgd2hlbiBpdCdzIGxldmVyYWdlZC5cblxuV2FpdCwgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRlY2xhcmF0aW9uLCBpdCBzZWVtcyBsaWtlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBPa2F5LCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGFsc28gc3RhdGljLCBzbyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIG15IGFuYWx5c2lzIHNvbWV3aGF0LiBUaGF0IG1lYW5zIEkgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBleHRlcm5hbCBjYWxsZXJzLiBCdXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhcmUgKm5vdCogc3RhdGljLCBzbyBJJ2xsIHdhbnQgdG8gdHJhY2UgdGhlaXIgdXNlIG1vcmUgZ2VuZXJhbGx5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0IHRoYXQgdGhleSBzdXBwb3J0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjaGVjayBgZnV0ZXhfcGl2b3RfaGFzaGAgYW5kIGBfX2Z1dGV4X3Bpdm90X2hhc2hgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MToyMS4yOTg4ODIxMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X3Bpdm90X2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIxOS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjIxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVxcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyODpcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXFx0XFx0fVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMzM9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXFx0fVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjU2OlxcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU3LVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXFx0fVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjcyOlxcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVxcdTAwM2Vwcml2YXRlLm1tKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3My1cXHRnb3RvIGFnYWluO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5Ni1cXHQgKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcXHQgKiBmdXRleF9oYXNoKClcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2goKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cXHQgKiAgIGd1YXJkKHJjdSk7XFx0XFx0ICBndWFyZChtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5NC1cXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1OlxcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMC1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5MzE6XFx0XFx0XFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXFx1MDAyNlxcdTAwMjYgY3VzdG9tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMi1cXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MToyMS4zNDM3ODIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE3ODA3Mzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGZ1dGV4IGhhc2hpbmcgbWVjaGFuaXNtcy4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBzZWVtIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cywga2V5IGZvY3VzIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgcG90ZW50aWFsIGhhc2hpbmcgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgaXMgYGZ1dGV4X2hhc2hgIHN0YXRpYz8gTm8sIGl0J3Mgbm90LiBUaGF04oCZcyBnb29kIHRvIGtub3csIHRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIG91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCB0byBzZWUgaG93IGl0IHdvcmtzLiBUaGF0J3MgdGhlIGJlc3QgbmV4dCBzdGVwIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGhhc2hpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjQ0LjUyMTg1ODYzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTAzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjYwOnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjQ0LjU2NzUxMjIwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU1NjIwNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEb3VibGUgRGVmaW5pdGlvbiBTdXNwZWN0OiBmdXRleF9oYXNoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgZnV0ZXhfaGFzaGAgZGVmaW5lZCB0d2ljZSwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYWxhcm0gYmVsbHMuIFRoYXQgdXN1YWxseSBtZWFucyB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQg4oCTIHByb2JhYmx5IHNvbWV0aGluZyB0aWVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBiZWluZyBjb250cm9sbGVkIGJ5IGAjaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSAqcmVhbCogZGVmaW5pdGlvbiBpcyBhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbnMuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGluY2x1ZGUvbGludXgvZnV0ZXguaGAgYW5kIGBrZXJuZWwvZnV0ZXgvZnV0ZXguaGAgdG8gc2VlIHdoaWNoIG9uZSBkZWZpbmVzIHRoZSBwcmltYXJ5IHZlcnNpb24gb2YgYGZ1dGV4X2hhc2hgLCBhbmQgd2hhdCB0aGUgYCNpZmRlZmAgc3RhdGVtZW50IGRvZXMuIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTAuNTIzMTM1MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjkyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9rZXlfaXNfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1MC0gKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoxNTE6c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTItXFx0YXRvbWljX3Qgd2FpdGVycztcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQyOlxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQzLVxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpIHsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU0LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1NTpleHRlcm4gc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Nz1ERUZJTkVfQ0xBU1MoaGJyLCBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTgtXFx0ICAgICBpZiAoX1QuZnBoKSBmdXRleF9wcml2YXRlX2hhc2hfcHV0KF9ULmZwaCksXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU5OlxcdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjYwLVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg3PWV4dGVybiBpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI4ODpleHRlcm4gc3RydWN0IGZ1dGV4X3EgKmZ1dGV4X3RvcF93YWl0ZXIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OS1cXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMwOD1leHRlcm4gdm9pZCBfX2Z1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMwOTpleHRlcm4gdm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMxMT1leHRlcm4gaW50IGZ1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEzLS8qKlxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMxNDogKiBmdXRleF9xdWV1ZSgpIC0gRW5xdWV1ZSB0aGUgZnV0ZXhfcSBvbiB0aGUgZnV0ZXhfaGFzaF9idWNrZXRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTUtICogQHE6XFx0VGhlIGZ1dGV4X3EgdG8gZW5xdWV1ZVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI3LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMyODpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zNDA9ZXh0ZXJuIHZvaWQgd2FpdF9mb3Jfb3duZXJfZXhpdGluZyhpbnQgcmV0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmV4aXRpbmcpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ0LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM0NTpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19pbmMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDYte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzU5LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2MDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19kZWMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2NzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYl93YWl0ZXJzX3BlbmRpbmcoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjgte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzc5LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4MDpleHRlcm4gdm9pZCBmdXRleF9xX2xvY2soc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgxLVxcdF9fYWNxdWlyZXMoXFx1MDAyNmhiLVxcdTAwM2Vsb2NrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgzLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NDpleHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4NS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZoYi1cXHUwMDNlbG9jayk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4OC1cXHRcXHRcXHRcXHR1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTQwMj1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0MDM6ZG91YmxlX2xvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQwNC1cXHRfX2FjcXVpcmVzKFxcdTAwMjZoYjEtXFx1MDAzZWxvY2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD00MTY9c3RhdGljIGlubGluZSB2b2lkXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDE3OmRvdWJsZV91bmxvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQxOC1cXHRfX3JlbGVhc2VzKFxcdTAwMjZoYjEtXFx1MDAzZWxvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjUwLjU2NzQzMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODk4NDE4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRnV0ZXggUHJpdmF0ZSBIYXNoKipcblxuT2theSwgbGV0J3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIHBsYW4uIFRoZSBjb3JlIG9mIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGUgYGZ1dGV4X2hhc2hgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcHJpdmF0ZSBoYXNoZXMuIFRoZSBwcmltYXJ5IHN5bWJvbHMgSSdtIHRhcmdldGluZyBhcmUgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYW5kIG9mIGNvdXJzZSwgYGZ1dGV4X2hhc2hgIGl0c2VsZi5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB3ZSdyZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgd2l0aGluIHRoZSBmdXRleCBjb3JlLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIG11dGV4LWJhc2VkIGFwcHJvYWNoIHRvIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc3RyYXRlZ3kgYW5kIGludHJvZHVjaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhhdCBsZXZlbCBvZiBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiAqc2NyZWFtcyogZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvdGhlciBwb3RlbnRpYWwgYnVncy5cblxuVG8gZW5hYmxlIHRoaXMsIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBiZSBzdXJlIGlzIGVuYWJsZWQgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgY2hlY2tlZDsgdGhhdCdzIHRoZSBrZXkuIE9mIGNvdXJzZSwgYEZVVEVYYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gaXQsIHNvIGl0J3MgYSBzdWZmaWNpZW50IGluZGljYXRvciB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgdGhlcmUuXG5cbkxldCdzIGNhbGwgdGhlIHJlc3VsdHMgYW5kIGdldCBpdCBnb2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMjgsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjU4LjE1NzI3ODMzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDcxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgICBcImZ1dGV4X2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSBmb3IgcHJpdmF0ZSBoYXNoZXMsIGNoYW5naW5nIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MTo1OC4yMzU3NTc5NThaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTM1NTM2MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTguMjM2MzIwMzA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTM0OTY5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxNzc5N2U5ZmYxYzFiMmU4OWY1NGY5NzZmZGEzMDA3ZWUzN2MzYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0MDozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTguMjM2MzIxNDA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTM0OTQ2NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBtbXBoLVx1MDAzZWhhc2hfbmV3YCBmaWVsZCBpcyBhY2Nlc3NlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCDigJMgY2hhbmdpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGFyb3VuZCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGhvdyB0aGF0IGBoYXNoX25ld2AgZmxhZyBpcyBoYW5kbGVkLiBUaGV5J3JlIG1vdmluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciB0aGlzIGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIGlzIGFsd2F5cyBcImFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIGNoYW5nZT9cIiBUaGUgYW5zd2VyIGlzIGxpa2VseSBubywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgKnN5bmNocm9uaXphdGlvbiogYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBoZXJlLiBXZSdkIGJlIGxvb2tpbmcgYXQgS0NTQU4gb3IgS0FTQU4gdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgTE9DS0RFUCB0byBmbGFnIGFueSBsb2NraW5nIGlzc3VlcywgYnV0IG5vdCBLTVNBTi5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgS01TQU4gcmVhc29uaW5nLiBUaGUgcGF0Y2gncyBjb3JlIGlzIGFib3V0IGNvbmN1cnJlbmN5IGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIEl0J3Mgbm90IGNyZWF0aW5nIG9yIGFsbG9jYXRpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzLiBJdCdzIHN3YXBwaW5nIGEgbXV0ZXggZm9yIFJDVSByZWFkIGxvY2sgYW5kIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG9uIHRoZSBgaGFzaF9uZXdgIHZhcmlhYmxlLiBUaGVyZSBhcmVuJ3QgYW55IGFsbG9jYXRpb25zIGhhcHBlbmluZyBhbmQgbm8gZGF0YSBjb3B5aW5nIHRvIG9yIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgdGhlIG9ubHkgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgdG91Y2hpbmcgYW55IG1lbW9yeSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBXZSBjYW4gZm9ybXVsYXRlIGEgcmVzcG9uc2Ugd2l0aCB0aGF0IGluIG1pbmQ6XG5cbk5lZWRzS01TQU46IGZhbHNlXG5LTVNBTlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgcmVhZCBsb2NrLCBtZW1vcnkgYmFycmllcnMsIGFuZCBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MjoxMC4zNzEyNzE4ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBhbiBSQ1UgcmVhZCBsb2NrLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLCBhbmQgdXNpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgbWFjcm9zIGZvciB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGJldHRlciBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 05:39:19 +0000 UTC FinishedAt: 2026-08-13 05:42:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "6cedb501-e254-4336-bb2c-c568b82ef11f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default", "futex_hash" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MTc3OTdlOWZmMWMxYjJlODlmNTRmOTc2ZmRhMzAwN2VlMzdjM2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDU6NDA6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdFx0ZnBoID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4gXHRcdGlmIChmcGgpIHtcbi1cdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuJiM0MztcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbiYjNDM7XHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbiYjNDM7XHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4mIzQzO1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX3JtYigpO1xuJiM0MztcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcbiBcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xuIFx0XHRuZXcgPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbi1cdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuJiM0MztcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhbmV3KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSBmb3IgcHJpdmF0ZSBoYXNoZXMsIGNoYW5naW5nIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIFRoaXMgRnV0ZXggUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgcHJpdmF0ZSBmdXRleCBoYXNoZXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBhIGZldyBrZXkgY2hhbmdlcy4gVGhlIGNvZGUmIzM5O3Mgc3dpdGNoZWQgdG8gdXNpbmcgYFdSSVRFX09OQ0VgIGluc3RlYWQgb2YgZGlyZWN0IGFzc2lnbm1lbnQgZm9yIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIHNpbWlsYXJseSBpbiB0aGUgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgbWVtb3J5IG9yZGVyaW5nIGNvbmNlcm5zIOKAkyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgZW5zdXJpbmcgdGhlIG5ldyBwb2ludGVyIHZhbHVlIGlzIHZpc2libGUgY29ycmVjdGx5IGFjcm9zcyBkaWZmZXJlbnQgQ1BVcyBpcyBjcnVjaWFsLiBXZSYjMzk7dmUgZ290IGEgc3dhcCBmcm9tIG11dGV4IHRvIFJDVSAoYGd1YXJkKHJjdSkoKWAgaW5zdGVhZCBvZiBgZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7YCkgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBBbmQgYFJFQURfT05DRWAgaGFzIGJlZW4gYWRkZWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGZ1dGV4IGNvcmUgbG9naWMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgcHJpdmF0ZSBmdXRleCBoYXNoZXMgYXJlIG1hbmFnZWQsIHNwZWNpZmljYWxseSBpbiB0aGUgbG9jayBzdHJ1Y3R1cmUuIFRoZSBzaGlmdCBmcm9tIGEgbXV0ZXggdG8gUkNVIGlzIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGFuZCBpbmRpY2F0ZXMgYSBkZXNpZ24gY2hhbmdlIHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IHN0cmVzcyB0ZXN0ZWQuIFRoaXMgaXMgYSBjbGVhciBpbmRpY2F0b3Igb2YgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBhbmQgbWVtb3J5IGJhcnJpZXIgYmVoYXZpb3IsIGFzIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBzbXBfcm1iKClgLgoKTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgY29uY3VycmVuY3ksIG1lbW9yeSBiYXJyaWVycywgYW5kIFJDVSBpcyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgdGhhdCBjYW4gYmUgdHJpY2t5IHRvIGV4cG9zZS4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpbiB0aGF0IGZpbGUuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGZ1dGV4IGNvbmZpZ3VyYXRpb24uIGBDT05GSUdfRlVURVhgIGlzIHVzdWFsbHkgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIGEgZ29vZCBoYWJpdCB0byBjaGVjay4gR290dGEgZW5zdXJlIGZ1dGV4ZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHRvIGF2b2lkIGEgd2FzdGVkIGVmZm9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9waXZvdF9wZW5kaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg0OnN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODUte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Nzg6XHRcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlByaW9yaXRpemluZyB0aGUgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbnMgYXJlIGdvaW5nIHRvIGJlIGtleSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgZHJhd2luZyBteSBhdHRlbnRpb24/IEFoYSEgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIGZyb20gc29tZXdoZXJlLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBvaW50IG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiB0aGF0IHdlIHNob3VsZCBmb2N1cyBvbiBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyODMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRnV0ZXggSGFzaGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIGltcGxlbWVudGF0aW9uLCBhbmQgSSB0aGluayBgZnV0ZXhfaGFzaF9wcmN0bGAgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZXNlIGtpbmRzIG9mIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgYXJlIGdvb2QgZW50cnkgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3Mgb3ZlcmFsbCBiZWhhdmlvci4gQWxzbywgbGV0JiMzOTtzIGluY2x1ZGUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIE5vdyBJIG5lZWQgdG8gc2VlIHdoZXJlIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBiZWluZyBjYWxsZWQgdG8gZnVsbHkgYXBwcmVjaWF0ZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBmdXRleCBzdWJzeXN0ZW0uIEtub3dpbmcgaXRzIGNhbGxlcnMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbnRleHQuIEdvdHRhIG1hcCB0aGUgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTgyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRlYnVnZ2luZzoKCioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggS2VybmVsIFBhdGgqKgoKQWxyaWdodCwgc28gYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBgUFJfRlVURVhfSEFTSGAgY2FsbHMuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIEl0JiMzOTtzIGEgc3lzY2FsbCBlbnRyeSwgc28gdGhlIGtlcm5lbCBpcyBkaXJlY3RseSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB3aGVyZSB0aGF0IGNhbGwgaXMgZ29pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBmdW5jdGlvbiBpcyBkb2luZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0IHByb3ZpZGVzIGFueSBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03OT1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4MjppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oOjg1OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk5PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxMDM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2ZvcmsuYz0xOTY5PXN0YXRpYyB2b2lkIHJ2X3Rhc2tfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc2LVxua2VybmVsL2ZvcmsuYzoxOTc3OnN0YXRpYyBib29sIG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHU2NCBjbG9uZV9mbGFncylcbmtlcm5lbC9mb3JrLmMtMTk3OC17XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNDEwLVxua2VybmVsL2ZvcmsuYzoyNDExOlx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xua2VybmVsL2ZvcmsuYzoyNDEyOlx0XHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcbmtlcm5lbC9mb3JrLmMtMjQxMy1cdFx0aWYgKHJldHZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gRnV0ZXggSW5pdGlhbGl6YXRpb24gRHVyaW5nIFByb2Nlc3MgQ3JlYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRocm91Z2ggdGhpcyBmdXRleCBjb2RlLCBhbmQgaXQgbG9va3MgbGlrZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgYGNvcHlfcHJvY2Vzc2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIG1ha2VzIHNlbnNlIGZvciBoYW5kbGluZyBmdXRleGVzIGluIG5ldyBwcm9jZXNzZXMuIFRoZSBjb250ZXh0IHNlZW1zIHRvIGJlIHNldCB1cCB0aHJvdWdoIGEgZm9yayBvciBjbG9uZSBjYWxsLiBOb3csIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGhlcmUgYXBwZWFycyB0byBiZSBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgdmVyaWZ5IHRoZSBkZWZpbml0aW9uIGFuZCBwdXJwb3NlIG9mIGBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIYC4gSSB3YW50IHRvIHNlZSB3aGF0IHRoYXQgcGFydGljdWxhciBjb25maWcgZG9lcywgaWYgYW55dGhpbmcgc3BlY2lmaWMgdG8gYGNvcHlfcHJvY2Vzc2AgYW5kIGZ1dGV4IGluaXRpYWxpemF0aW9uLiBMZXQgbWUgc2VlIHdoZXJlIGl0JiMzOTtzIHNldCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gb24gaG93IHRoaXMgcmVsYXRlcyB0byB0aGUgb3ZlcmFsbCBmdXRleCBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIG1vcmUgYWJvdXQgaG93IHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCB3aGljaCBmb3Iga2VybmVsIGNvbmZpZ3VyYXRpb24gbWVhbnMgYGluaXQvS2NvbmZpZ2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gaXMgbGlrZWx5IHNvbWV3aGVyZSBhcm91bmQgbGluZSAxODQ5LCBtYXliZSB3aGVyZSB0aGV5IHN0YXJ0IGRlZmluaW5nIGEgbmV3IGZlYXR1cmUuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NDA6XHRcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiZSBidWlsdCB3aXRob3V0XG4xODQxOlx0XHQgIHN1cHBvcnQgZm9yIFwmIzM0O2Zhc3QgdXNlcnNwYWNlIG11dGV4ZXNcJiMzNDsuICBUaGUgcmVzdWx0aW5nIGtlcm5lbCBtYXkgbm90XG4xODQyOlx0XHQgIHJ1biBnbGliYy1iYXNlZCBhcHBsaWNhdGlvbnMgY29ycmVjdGx5LlxuMTg0MzpcdFxuMTg0NDpcdGNvbmZpZyBGVVRFWF9QSVxuMTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZVVEVYIEhhc2hpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgRlVURVggaGFzaGluZyBpbXBsZW1lbnRhdGlvbiwgdGhlIGNvcmUgZW5hYmxlciBzZWVtcyB0byBiZSBgRlVURVhgLCB3aGljaCBtYWtlcyBzZW5zZS4gQW5kLCBhcyBleHBlY3RlZCwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIHRoaXMgY29uZmlndXJhdGlvbi4gVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIEkmIzM5O2xsIHdhbnQgdG8gZGlnIGludG8gdGhvc2UgdG8gc2VlIGhvdyB0aGUgaGFzaGluZyBhY3R1YWxseSB3b3JrcyBhbmQgd2hlbiBpdCYjMzk7cyBsZXZlcmFnZWQuCgpXYWl0LCBsb29raW5nIGNsb3NlciBhdCB0aGUgZGVjbGFyYXRpb24sIGl0IHNlZW1zIGxpa2UgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGlzIGRlZmluZWQgYXMgYHN0YXRpY2AuIE9rYXksIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIGl0JiMzOTtzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIG15IGFuYWx5c2lzIHNvbWV3aGF0LiBUaGF0IG1lYW5zIEkgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgZXh0ZXJuYWwgY2FsbGVycy4gQnV0IGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgYXJlICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwgd2FudCB0byB0cmFjZSB0aGVpciB1c2UgbW9yZSBnZW5lcmFsbHkuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0IHRoYXQgdGhleSBzdXBwb3J0LgoKRmluYWxseSwgSSBzaG91bGQgY2hlY2sgYGZ1dGV4X3Bpdm90X2hhc2hgIGFuZCBgX19mdXRleF9waXZvdF9oYXNoYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjE9c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMjg6XHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1NjpcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3MjpcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVx1MDAzZXByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzMtXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcdCAqIGZ1dGV4X2hhc2goKVx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTgtXHQgKiAgIGd1YXJkKHJjdSk7XHRcdCAgZ3VhcmQobW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNzg0PXN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1Olx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTYtXHQgKi9cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTMxOlx0XHRcdGlmICghX19mdXRleF9waXZvdF9oYXNoKG1tLCBuZXcpIFx1MDAyNlx1MDAyNiBjdXN0b20pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzItXHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODkyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZ1dGV4IEhhc2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIGZ1dGV4IGhhc2hpbmcgbWVjaGFuaXNtcy4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBzZWVtIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cywga2V5IGZvY3VzIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgcG90ZW50aWFsIGhhc2hpbmcgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgaXMgYGZ1dGV4X2hhc2hgIHN0YXRpYz8gTm8sIGl0JiMzOTtzIG5vdC4gVGhhdOKAmXMgZ29vZCB0byBrbm93LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCB2aXNpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZnV0ZXhfaGFzaGAgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgIHRvIHNlZSBob3cgaXQgd29ya3MuIFRoYXQmIzM5O3MgdGhlIGJlc3QgbmV4dCBzdGVwIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGhhc2hpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMzM9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjYxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6Mjc4OnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNzEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEb3VibGUgRGVmaW5pdGlvbiBTdXNwZWN0OiBmdXRleF9oYXNoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gc2VlaW5nIGBmdXRleF9oYXNoYCBkZWZpbmVkIHR3aWNlLCBhbmQgdGhhdCBpbW1lZGlhdGVseSBzZXRzIG9mZiBhbGFybSBiZWxscy4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQg4oCTIHByb2JhYmx5IHNvbWV0aGluZyB0aWVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBndXQgc2F5cyBpdCYjMzk7cyBsaWtlbHkgYmVpbmcgY29udHJvbGxlZCBieSBgI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgKnJlYWwqIGRlZmluaXRpb24gaXMgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGhlYWRlciBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGluY2x1ZGUvbGludXgvZnV0ZXguaGAgYW5kIGBrZXJuZWwvZnV0ZXgvZnV0ZXguaGAgdG8gc2VlIHdoaWNoIG9uZSBkZWZpbmVzIHRoZSBwcmltYXJ5IHZlcnNpb24gb2YgYGZ1dGV4X2hhc2hgLCBhbmQgd2hhdCB0aGUgYCNpZmRlZmAgc3RhdGVtZW50IGRvZXMuIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9rZXlfaXNfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTAtICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoxNTE6c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1Mi1cdGF0b21pY190IHdhaXRlcnM7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQxPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIHtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0MjpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDMtXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCkgeyB9XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU0LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU1OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Nz1ERUZJTkVfQ0xBU1MoaGJyLCBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OC1cdCAgICAgaWYgKF9ULmZwaCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVC5mcGgpLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU5Olx0ICAgICBmdXRleF9oYXNoKGtleSksIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2MC1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yODc9ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyODg6ZXh0ZXJuIHN0cnVjdCBmdXRleF9xICpmdXRleF90b3Bfd2FpdGVyKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OS1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zMDg9ZXh0ZXJuIHZvaWQgX19mdXRleF91bnF1ZXVlKHN0cnVjdCBmdXRleF9xICpxKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMwOTpleHRlcm4gdm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEwLVx0XHRcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMxMT1leHRlcm4gaW50IGZ1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMy0vKipcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMxNDogKiBmdXRleF9xdWV1ZSgpIC0gRW5xdWV1ZSB0aGUgZnV0ZXhfcSBvbiB0aGUgZnV0ZXhfaGFzaF9idWNrZXRcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxNS0gKiBAcTpcdFRoZSBmdXRleF9xIHRvIGVucXVldWVcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjctICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMjg6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI5LVx0XHRcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzQwPWV4dGVybiB2b2lkIHdhaXRfZm9yX293bmVyX2V4aXRpbmcoaW50IHJldCwgc3RydWN0IHRhc2tfc3RydWN0ICpleGl0aW5nKTtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDQtICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozNDU6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hiX3dhaXRlcnNfaW5jKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDYte1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM1OS0gKi9cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2MDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19kZWMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2MS17XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY2LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzY3OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hiX3dhaXRlcnNfcGVuZGluZyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY4LXtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNzktXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODA6ZXh0ZXJuIHZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgxLVx0X19hY3F1aXJlcyhcdTAwMjZoYi1cdTAwM2Vsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4My1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NDpleHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg1LVx0X19yZWxlYXNlcyhcdTAwMjZoYi1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVx0XHRcdFx0dW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDAyPXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDAzOmRvdWJsZV9sb2NrX2hiKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQwNC1cdF9fYWNxdWlyZXMoXHUwMDI2aGIxLVx1MDAzZWxvY2spXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDE2PXN0YXRpYyBpbmxpbmUgdm9pZFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDE3OmRvdWJsZV91bmxvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDE4LVx0X19yZWxlYXNlcyhcdTAwMjZoYjEtXHUwMDNlbG9jaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjgKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogMjcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEZ1dGV4IFByaXZhdGUgSGFzaCoqCgpPa2F5LCBsZXQmIzM5O3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIHBsYW4uIFRoZSBjb3JlIG9mIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGUgYGZ1dGV4X2hhc2hgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcHJpdmF0ZSBoYXNoZXMuIFRoZSBwcmltYXJ5IHN5bWJvbHMgSSYjMzk7bSB0YXJnZXRpbmcgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGFuZCBvZiBjb3Vyc2UsIGBmdXRleF9oYXNoYCBpdHNlbGYuCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgc29saWQ6IHdlJiMzOTtyZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgd2l0aGluIHRoZSBmdXRleCBjb3JlLiBXZSYjMzk7cmUgbW92aW5nIGZyb20gYSBtdXRleC1iYXNlZCBhcHByb2FjaCB0byBhbiBSQ1UgKFJlYWQtQ29weS1VcGRhdGUpIHN0cmF0ZWd5IGFuZCBpbnRyb2R1Y2luZyBtZW1vcnkgYmFycmllcnMuIFRoYXQgbGV2ZWwgb2YgY29yZSBsb2dpYyBtb2RpZmljYXRpb24gKnNjcmVhbXMqIGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzIG9yIG90aGVyIHBvdGVudGlhbCBidWdzLgoKVG8gZW5hYmxlIHRoaXMsIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBiZSBzdXJlIGlzIGVuYWJsZWQgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgY2hlY2tlZDsgdGhhdCYjMzk7cyB0aGUga2V5LiBPZiBjb3Vyc2UsIGBGVVRFWGAgaXMgYWxzbyBuZWVkZWQsIGJ1dCBgRlVURVhfUFJJVkFURV9IQVNIYCBkZXBlbmRzIG9uIGl0LCBzbyBpdCYjMzk7cyBhIHN1ZmZpY2llbnQgaW5kaWNhdG9yIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyB0aGVyZS4KCkxldCYjMzk7cyBjYWxsIHRoZSByZXN1bHRzIGFuZCBnZXQgaXQgZ29pbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDU6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA1OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjEKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHRoZSBgbW1waC0mZ3Q7aGFzaF9uZXdgIGZpZWxkIGlzIGFjY2Vzc2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgY29uY3VycmVuY3kgZml4IOKAkyBjaGFuZ2luZyB0aGUgbG9ja2luZyBtZWNoYW5pc20gYXJvdW5kIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgaG93IHRoYXQgYGhhc2hfbmV3YCBmbGFnIGlzIGhhbmRsZWQuIFRoZXkmIzM5O3JlIG1vdmluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciB0aGlzIGtpbmQgb2Ygb3B0aW1pemF0aW9uLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhLCBpcyBhbHdheXMgJiMzNDthcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHdpdGggdGhpcyBjaGFuZ2U/JiMzNDsgVGhlIGFuc3dlciBpcyBsaWtlbHkgbm8sIGJ1dCBJIG5lZWQgdG8gYmUgc3VyZS4gVGhpcyBjaGFuZ2UgaXMgYWxsIGFib3V0ICpzeW5jaHJvbml6YXRpb24qIGFuZCBoYW5kbGluZyBwb3RlbnRpYWwgZGF0YSByYWNlcy4gS01TQU4gaXNuJiMzOTt0IHRoZSByaWdodCB0b29sIGhlcmUuIFdlJiMzOTtkIGJlIGxvb2tpbmcgYXQgS0NTQU4gb3IgS0FTQU4gdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgTE9DS0RFUCB0byBmbGFnIGFueSBsb2NraW5nIGlzc3VlcywgYnV0IG5vdCBLTVNBTi4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBLTVNBTiByZWFzb25pbmcuIFRoZSBwYXRjaCYjMzk7cyBjb3JlIGlzIGFib3V0IGNvbmN1cnJlbmN5IGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBvciBhbGxvY2F0aW5nIGFueSBuZXcgc3RydWN0dXJlcy4gSXQmIzM5O3Mgc3dhcHBpbmcgYSBtdXRleCBmb3IgUkNVIHJlYWQgbG9jayBhbmQgbWVtb3J5IGJhcnJpZXJzLCBhbmQgdXNpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0Ugb24gdGhlIGBoYXNoX25ld2AgdmFyaWFibGUuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGFsbG9jYXRpb25zIGhhcHBlbmluZyBhbmQgbm8gZGF0YSBjb3B5aW5nIHRvIG9yIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgdGhlIG9ubHkgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIHRvdWNoaW5nIGFueSBtZW1vcnkgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIFdlIGNhbiBmb3JtdWxhdGUgYSByZXNwb25zZSB3aXRoIHRoYXQgaW4gbWluZDoKCk5lZWRzS01TQU46IGZhbHNlCktNU0FOUmVhc29uaW5nOiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSByZWFkIGxvY2ssIG1lbW9yeSBiYXJyaWVycywgYW5kIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3Jvcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6MzcuNzYxNTM0Mzk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MDk3NzE0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6MzcuNzYxNTQyMDY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc0MzUyNDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0MDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjM5LjAzNjYzMjYwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5MTk5MTIxNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICAgIFwiZnV0ZXhfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUgZm9yIHByaXZhdGUgaGFzaGVzLCBjaGFuZ2luZyBhIG11dGV4IHRvIFJDVSBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDE3Nzk3ZTlmZjFjMWIyZTg5ZjU0Zjk3NmZkYTMwMDdlZTM3YzNhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA1OjQwOjM2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jXG4rKysgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFdSSVRFX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldywgbmV3KTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcbkBAIC0yMjQsNyArMjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcbiBcdFx0ZnBoID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4gXHRcdGlmIChmcGgpIHtcbi1cdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2g7XG4gXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKTtcbitcdGd1YXJkKHJjdSkoKTtcbiBcbi1cdGlmICghbW1waC1cdTAwM2VoYXNoX25ldylcbitcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuK1x0LypcbitcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcbitcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbitcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxuK1x0ICovXG4rXHRzbXBfcm1iKCk7XG4rXHRpZiAoIVJFQURfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3KSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtXHUwMDNlaGFzaCk7XG4gXHRyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTtcbiB9XG4gXG5AQCAtMTg3OSw3ICsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdGN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcbiBcdFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xuIFx0XHRuZXcgPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbi1cdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4gXHRcdFx0XHQgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuXG4gXHRcdFx0XHQgKi9cbiBcdFx0XHRcdGZyZWUgPSBmcGg7XG4tXHRcdFx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcbitcdFx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhbmV3KSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MDozOS4wMzY2MzM4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mjk2NTM4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gVGhpcyBGdXRleCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIHNwZWNpZmljYWxseSB3aXRoIHRoZSBwcml2YXRlIGZ1dGV4IGhhc2hlcy4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgZmV3IGtleSBjaGFuZ2VzLiBUaGUgY29kZSdzIHN3aXRjaGVkIHRvIHVzaW5nIGBXUklURV9PTkNFYCBpbnN0ZWFkIG9mIGRpcmVjdCBhc3NpZ25tZW50IGZvciBgbW1waC1cdTAwM2VoYXNoX25ld2AgYW5kIHNpbWlsYXJseSBpbiB0aGUgb3RoZXIgaW5zdGFuY2VzLiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgbWVtb3J5IG9yZGVyaW5nIGNvbmNlcm5zIOKAkyB3ZSdyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhY2Nlc3MsIGFuZCBlbnN1cmluZyB0aGUgbmV3IHBvaW50ZXIgdmFsdWUgaXMgdmlzaWJsZSBjb3JyZWN0bHkgYWNyb3NzIGRpZmZlcmVudCBDUFVzIGlzIGNydWNpYWwuIFdlJ3ZlIGdvdCBhIHN3YXAgZnJvbSBtdXRleCB0byBSQ1UgKGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO2ApIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gQW5kIGBSRUFEX09OQ0VgIGhhcyBiZWVuIGFkZGVkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBmdXRleCBjb3JlIGxvZ2ljLCBkaXJlY3RseSBpbXBhY3RpbmcgaG93IHByaXZhdGUgZnV0ZXggaGFzaGVzIGFyZSBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGxvY2sgc3RydWN0dXJlLiBUaGUgc2hpZnQgZnJvbSBhIG11dGV4IHRvIFJDVSBpcyBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgaW5kaWNhdGVzIGEgZGVzaWduIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSBzdHJlc3MgdGVzdGVkLiBUaGlzIGlzIGEgY2xlYXIgaW5kaWNhdG9yIG9mIGNoYW5nZXMgdG8gdGhlIGxvY2tpbmcgYW5kIG1lbW9yeSBiYXJyaWVyIGJlaGF2aW9yLCBhcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgc21wX3JtYigpYC5cblxuTXkgZ3V0IHRlbGxzIG1lIHRoaXMgbmVlZHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoZSBpbnRlcnBsYXkgb2YgY29uY3VycmVuY3ksIG1lbW9yeSBiYXJyaWVycywgYW5kIFJDVSBpcyBhIHJlY2lwZSBmb3Igc3VidGxlIGJ1Z3MgdGhhdCBjYW4gYmUgdHJpY2t5IHRvIGV4cG9zZS4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGluIHRoYXQgZmlsZS5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSBmdXRleCBjb25maWd1cmF0aW9uLiBgQ09ORklHX0ZVVEVYYCBpcyB1c3VhbGx5IGVuYWJsZWQsIGJ1dCBpdCdzIGEgZ29vZCBoYWJpdCB0byBjaGVjay4gR290dGEgZW5zdXJlIGZ1dGV4ZXMgYXJlIGVuYWJsZWQgb24gdGhpcyBwYXJ0aWN1bGFyIGJ1aWxkIHRvIGF2b2lkIGEgd2FzdGVkIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjQ3LjMzMzE3NTY1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDA6NDcuMzgwODk5MTU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1ODM1NjkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqUHJpb3JpdGl6aW5nIHRoZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBnb2luZyB0byBiZSBrZXkgaGVyZS4gTGV0J3Mgc2VlLi4uIHdoYXQncyBkcmF3aW5nIG15IGF0dGVudGlvbj8gQWhhISBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmUsIGFuZCBpdCdzIGJlaW5nICpjYWxsZWQqIGZyb20gc29tZXdoZXJlLCB3aGljaCBpcyBvZnRlbiBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuIEl0IHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBvaW50IG9mIHJlc291cmNlIGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiB0aGF0IHdlIHNob3VsZCBmb2N1cyBvbiBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjUwLjczOTI1ODY0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI3Mjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjUwLjc4NjUzNjExNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTcwNTE1MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZ1dGV4IEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGZ1dGV4IGhhc2hpbmcgaW1wbGVtZW50YXRpb24sIGFuZCBJIHRoaW5rIGBmdXRleF9oYXNoX3ByY3RsYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0J3Mgb2Z0ZW4gdGhlIGNhc2UgdGhhdCB0aGVzZSBraW5kcyBvZiBjb250cm9sIHBhdGggZnVuY3Rpb25zIGFyZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gQWxzbywgbGV0J3MgaW5jbHVkZSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gTm93IEkgbmVlZCB0byBzZWUgd2hlcmUgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGJlaW5nIGNhbGxlZCB0byBmdWxseSBhcHByZWNpYXRlIGhvdyBpdCdzIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZnV0ZXggc3Vic3lzdGVtLiBLbm93aW5nIGl0cyBjYWxsZXJzIHdpbGwgaWxsdW1pbmF0ZSBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBHb3R0YSBtYXAgdGhlIGNvbnRyb2wgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI4MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjU1LjYwMzU5MDkyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk3NDgzNzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTc4LVxcdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDAte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcbi0tXFxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcXG4tLVxcbmtlcm5lbC9zeXMuYy0yODg0LVxcdGNhc2UgUFJfRlVURVhfSEFTSDpcXG5rZXJuZWwvc3lzLmM6Mjg4NTpcXHRcXHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XFxua2VybmVsL3N5cy5jLTI4ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQwOjU3LjMwMTA3ODQ5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTIwNzEyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZWJ1Z2dpbmc6XG5cbioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2ggS2VybmVsIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgY2xlYXJseSB0aGUgZW50cnkgcG9pbnQgZm9yIGhhbmRsaW5nIGBQUl9GVVRFWF9IQVNIYCBjYWxscy4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIEl0J3MgYSBzeXNjYWxsIGVudHJ5LCBzbyB0aGUga2VybmVsIGlzIGRpcmVjdGx5IGludm9raW5nIHRoaXMgZnVuY3Rpb24uIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIHRoYXQgY2FsbCBpcyBnb2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uIGlzIGRvaW5nLiBMZXQncyBzZWUgaWYgdGhhdCBwcm92aWRlcyBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5ODIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MTowMy42MTMxNTI3NTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTcxMTY5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzk9aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODEtI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODI6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NC0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4NTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05OT1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAyLX1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTAzOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk2OT1zdGF0aWMgdm9pZCBydl90YXNrX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0xOTc2LVxcbmtlcm5lbC9mb3JrLmM6MTk3NzpzdGF0aWMgYm9vbCBuZWVkX2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh1NjQgY2xvbmVfZmxhZ3MpXFxua2VybmVsL2ZvcmsuYy0xOTc4LXtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNDEwLVxcbmtlcm5lbC9mb3JrLmM6MjQxMTpcXHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XFxua2VybmVsL2ZvcmsuYzoyNDEyOlxcdFxcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xcbmtlcm5lbC9mb3JrLmMtMjQxMy1cXHRcXHRpZiAocmV0dmFsKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MDUuMzEwMjc1MzY5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjkyMzY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEZ1dGV4IEluaXRpYWxpemF0aW9uIER1cmluZyBQcm9jZXNzIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGZ1dGV4IGNvZGUsIGFuZCBpdCBsb29rcyBsaWtlIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIGdldHRpbmcgY2FsbGVkIGR1cmluZyBgY29weV9wcm9jZXNzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBtYWtlcyBzZW5zZSBmb3IgaGFuZGxpbmcgZnV0ZXhlcyBpbiBuZXcgcHJvY2Vzc2VzLiBUaGUgY29udGV4dCBzZWVtcyB0byBiZSBzZXQgdXAgdGhyb3VnaCBhIGZvcmsgb3IgY2xvbmUgY2FsbC4gTm93LCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlIGFwcGVhcnMgdG8gYmUgYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBMZXQgbWUgcXVpY2tseSBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIHZlcmlmeSB0aGUgZGVmaW5pdGlvbiBhbmQgcHVycG9zZSBvZiBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgd2FudCB0byBzZWUgd2hhdCB0aGF0IHBhcnRpY3VsYXIgY29uZmlnIGRvZXMsIGlmIGFueXRoaW5nIHNwZWNpZmljIHRvIGBjb3B5X3Byb2Nlc3NgIGFuZCBmdXRleCBpbml0aWFsaXphdGlvbi4gTGV0IG1lIHNlZSB3aGVyZSBpdCdzIHNldCBhbmQgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZS4gSSdtIGVzcGVjaWFsbHkga2VlbiBvbiBob3cgdGhpcyByZWxhdGVzIHRvIHRoZSBvdmVyYWxsIGZ1dGV4IGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MDguOTc5NTE0ODk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MDY3Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4NDgtXFxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbmluaXQvS2NvbmZpZy0xODUwLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6MTAuNTE3NTg2ODYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODc5MTMzNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgbW9yZSBhYm91dCBob3cgdGhpcyBwYXJ0aWN1bGFyIGZlYXR1cmUgaXMgY29uZmlndXJlZC4gSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciwgd2hpY2ggZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG1lYW5zIGBpbml0L0tjb25maWdgLiBJIGtub3cgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGlzIGxpa2VseSBzb21ld2hlcmUgYXJvdW5kIGxpbmUgMTg0OSwgbWF5YmUgd2hlcmUgdGhleSBzdGFydCBkZWZpbmluZyBhIG5ldyBmZWF0dXJlLiBMZXQncyBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjE1LjcwNTUwMjUyM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDA6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJlIGJ1aWx0IHdpdGhvdXRcXG4xODQxOlxcdFxcdCAgc3VwcG9ydCBmb3IgXFxcImZhc3QgdXNlcnNwYWNlIG11dGV4ZXNcXFwiLiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxcbjE4NDI6XFx0XFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cXG4xODQzOlxcdFxcbjE4NDQ6XFx0Y29uZmlnIEZVVEVYX1BJXFxuMTg0NTpcXHRcXHRib29sXFxuMTg0NjpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IFJUX01VVEVYRVNcXG4xODQ3OlxcdFxcdGRlZmF1bHQgeVxcbjE4NDg6XFx0XFxuMTg0OTpcXHRjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuMTg1MDpcXHRcXHRib29sXFxuMTg1MTpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2ICFCQVNFX1NNQUxMIFxcdTAwMjZcXHUwMDI2IE1NVVxcbjE4NTI6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1MzpcXHRcXG4xODU0OlxcdGNvbmZpZyBGVVRFWF9NUE9MXFxuMTg1NTpcXHRcXHRib29sXFxuMTg1NjpcXHRcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IE5VTUFcXG4xODU3OlxcdFxcdGRlZmF1bHQgeVxcbjE4NTg6XFx0XFxuMTg1OTpcXHRjb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjE1LjcwNTY2NTc3MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTkzMjEzNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRlVURVggSGFzaGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIEZVVEVYIGhhc2hpbmcgaW1wbGVtZW50YXRpb24sIHRoZSBjb3JlIGVuYWJsZXIgc2VlbXMgdG8gYmUgYEZVVEVYYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCwgYXMgZXhwZWN0ZWQsIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCBoZXJlIGFyZSBnb2luZyB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJ2xsIHdhbnQgdG8gZGlnIGludG8gdGhvc2UgdG8gc2VlIGhvdyB0aGUgaGFzaGluZyBhY3R1YWxseSB3b3JrcyBhbmQgd2hlbiBpdCdzIGxldmVyYWdlZC5cblxuV2FpdCwgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRlY2xhcmF0aW9uLCBpdCBzZWVtcyBsaWtlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLiBPa2F5LCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGFsc28gc3RhdGljLCBzbyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIG15IGFuYWx5c2lzIHNvbWV3aGF0LiBUaGF0IG1lYW5zIEkgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBleHRlcm5hbCBjYWxsZXJzLiBCdXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhcmUgKm5vdCogc3RhdGljLCBzbyBJJ2xsIHdhbnQgdG8gdHJhY2UgdGhlaXIgdXNlIG1vcmUgZ2VuZXJhbGx5LiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBvdXRzaWRlIHRoZSBjb21waWxhdGlvbiB1bml0IHRoYXQgdGhleSBzdXBwb3J0LlxuXG5GaW5hbGx5LCBJIHNob3VsZCBjaGVjayBgZnV0ZXhfcGl2b3RfaGFzaGAgYW5kIGBfX2Z1dGV4X3Bpdm90X2hhc2hgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MToyMS4yOTg4ODIxMjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkyODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X3Bpdm90X2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIxOS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjIxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVxcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyODpcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXFx0XFx0fVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMzM9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXFx0fVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjU2OlxcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU3LVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXFx0fVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjcyOlxcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVxcdTAwM2Vwcml2YXRlLm1tKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3My1cXHRnb3RvIGFnYWluO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5Ni1cXHQgKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcXHQgKiBmdXRleF9oYXNoKClcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2goKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cXHQgKiAgIGd1YXJkKHJjdSk7XFx0XFx0ICBndWFyZChtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5NC1cXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1OlxcdCAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5Ni1cXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMC1cXHRcXHRcXHQgKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5MzE6XFx0XFx0XFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXFx1MDAyNlxcdTAwMjYgY3VzdG9tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMi1cXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MToyMS4zNDM3ODIxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzE3ODA3Mzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIGZ1dGV4IGhhc2hpbmcgbWVjaGFuaXNtcy4gYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBzZWVtIGxpa2UgcHJvbWlzaW5nIGVudHJ5IHBvaW50cywga2V5IGZvY3VzIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgcG90ZW50aWFsIGhhc2hpbmcgZW50cnkgcG9pbnRzLiBCdXQgd2FpdCwgaXMgYGZ1dGV4X2hhc2hgIHN0YXRpYz8gTm8sIGl0J3Mgbm90LiBUaGF04oCZcyBnb29kIHRvIGtub3csIHRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBkZWZpbml0ZWx5IGNoZWNrIG91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCB0byBzZWUgaG93IGl0IHdvcmtzLiBUaGF0J3MgdGhlIGJlc3QgbmV4dCBzdGVwIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGhhc2hpbmcgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg5MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjQ0LjUyMTg1ODYzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2NTAzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjYwOnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjQ0LjU2NzUxMjIwNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTU1NjIwNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEb3VibGUgRGVmaW5pdGlvbiBTdXNwZWN0OiBmdXRleF9oYXNoKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIHNlZWluZyBgZnV0ZXhfaGFzaGAgZGVmaW5lZCB0d2ljZSwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgYWxhcm0gYmVsbHMuIFRoYXQgdXN1YWxseSBtZWFucyB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW52b2x2ZWQg4oCTIHByb2JhYmx5IHNvbWV0aGluZyB0aWVkIHRvIGEgZmVhdHVyZSBmbGFnLCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBndXQgc2F5cyBpdCdzIGxpa2VseSBiZWluZyBjb250cm9sbGVkIGJ5IGAjaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSAqcmVhbCogZGVmaW5pdGlvbiBpcyBhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbnMuIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBoZWFkZXIgZmlsZXMuIEknbGwgbmVlZCB0byBsb29rIGF0IGJvdGggYGluY2x1ZGUvbGludXgvZnV0ZXguaGAgYW5kIGBrZXJuZWwvZnV0ZXgvZnV0ZXguaGAgdG8gc2VlIHdoaWNoIG9uZSBkZWZpbmVzIHRoZSBwcmltYXJ5IHZlcnNpb24gb2YgYGZ1dGV4X2hhc2hgLCBhbmQgd2hhdCB0aGUgYCNpZmRlZmAgc3RhdGVtZW50IGRvZXMuIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzcxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTAuNTIzMTM1MjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjkyMjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4LmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCBmdXRleF9rZXlfaXNfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1MC0gKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoxNTE6c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTItXFx0YXRvbWljX3Qgd2FpdGVycztcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQyOlxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQzLVxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpIHsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU0LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1NTpleHRlcm4gc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjU2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Nz1ERUZJTkVfQ0xBU1MoaGJyLCBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTgtXFx0ICAgICBpZiAoX1QuZnBoKSBmdXRleF9wcml2YXRlX2hhc2hfcHV0KF9ULmZwaCksXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU5OlxcdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjYwLVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg3PWV4dGVybiBpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI4ODpleHRlcm4gc3RydWN0IGZ1dGV4X3EgKmZ1dGV4X3RvcF93YWl0ZXIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI4OS1cXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMwOD1leHRlcm4gdm9pZCBfX2Z1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMwOTpleHRlcm4gdm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMC1cXHRcXHRcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oPTMxMT1leHRlcm4gaW50IGZ1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEzLS8qKlxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMxNDogKiBmdXRleF9xdWV1ZSgpIC0gRW5xdWV1ZSB0aGUgZnV0ZXhfcSBvbiB0aGUgZnV0ZXhfaGFzaF9idWNrZXRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTUtICogQHE6XFx0VGhlIGZ1dGV4X3EgdG8gZW5xdWV1ZVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI3LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjMyODpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI5LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zNDA9ZXh0ZXJuIHZvaWQgd2FpdF9mb3Jfb3duZXJfZXhpdGluZyhpbnQgcmV0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmV4aXRpbmcpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ0LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM0NTpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19pbmMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDYte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzU5LSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2MDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGJfd2FpdGVyc19kZWMoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzY2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2NzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYl93YWl0ZXJzX3BlbmRpbmcoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjgte1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzc5LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4MDpleHRlcm4gdm9pZCBmdXRleF9xX2xvY2soc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgxLVxcdF9fYWNxdWlyZXMoXFx1MDAyNmhiLVxcdTAwM2Vsb2NrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzgzLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NDpleHRlcm4gdm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4NS1cXHRfX3JlbGVhc2VzKFxcdTAwMjZoYi1cXHUwMDNlbG9jayk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg2LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjM4NzpleHRlcm4gaW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4OC1cXHRcXHRcXHRcXHR1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTQwMj1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0MDM6ZG91YmxlX2xvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQwNC1cXHRfX2FjcXVpcmVzKFxcdTAwMjZoYjEtXFx1MDAzZWxvY2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD00MTY9c3RhdGljIGlubGluZSB2b2lkXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6NDE3OmRvdWJsZV91bmxvY2tfaGIoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQxOC1cXHRfX3JlbGVhc2VzKFxcdTAwMjZoYjEtXFx1MDAzZWxvY2spXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjUwLjU2NzQzMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1ODk4NDE4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRnV0ZXggUHJpdmF0ZSBIYXNoKipcblxuT2theSwgbGV0J3Mgc29saWRpZnkgdGhpcyBmdXp6aW5nIHBsYW4uIFRoZSBjb3JlIG9mIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGUgYGZ1dGV4X2hhc2hgIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcHJpdmF0ZSBoYXNoZXMuIFRoZSBwcmltYXJ5IHN5bWJvbHMgSSdtIHRhcmdldGluZyBhcmUgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYW5kIG9mIGNvdXJzZSwgYGZ1dGV4X2hhc2hgIGl0c2VsZi5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkOiB3ZSdyZSBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgd2l0aGluIHRoZSBmdXRleCBjb3JlLiBXZSdyZSBtb3ZpbmcgZnJvbSBhIG11dGV4LWJhc2VkIGFwcHJvYWNoIHRvIGFuIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgc3RyYXRlZ3kgYW5kIGludHJvZHVjaW5nIG1lbW9yeSBiYXJyaWVycy4gVGhhdCBsZXZlbCBvZiBjb3JlIGxvZ2ljIG1vZGlmaWNhdGlvbiAqc2NyZWFtcyogZm9yIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHVuY292ZXJpbmcgc3VidGxlIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBvdGhlciBwb3RlbnRpYWwgYnVncy5cblxuVG8gZW5hYmxlIHRoaXMsIHRoZSBjb25maWd1cmF0aW9uIEkgbmVlZCB0byBiZSBzdXJlIGlzIGVuYWJsZWQgaXMgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgY2hlY2tlZDsgdGhhdCdzIHRoZSBrZXkuIE9mIGNvdXJzZSwgYEZVVEVYYCBpcyBhbHNvIG5lZWRlZCwgYnV0IGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gaXQsIHNvIGl0J3MgYSBzdWZmaWNpZW50IGluZGljYXRvciB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgdGhlcmUuXG5cbkxldCdzIGNhbGwgdGhlIHJlc3VsdHMgYW5kIGdldCBpdCBnb2luZyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMjgsIk91dHB1dFRva2VucyI6MTA5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA1OjQxOjU4LjE1NzI3ODMzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDcxODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgICBcImZ1dGV4X2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlIGZvciBwcml2YXRlIGhhc2hlcywgY2hhbmdpbmcgYSBtdXRleCB0byBSQ1UgYW5kIGFkZGluZyBtZW1vcnkgYmFycmllcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSBmb3IgcHJpdmF0ZSBoYXNoZXMsIGNoYW5naW5nIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MTo1OC4yMzU3NTc5NThaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTM1NTM2MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTguMjM2MzIwMzA5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTM0OTY5OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiBmdXRleCBoYXNoIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggYW4gUkNVIHJlYWQgbG9jaywgYWRkaW5nIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG1hY3JvcyBmb3IgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMsIHdoaWNoIGFyZSBiZXR0ZXIgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQxNzc5N2U5ZmYxYzFiMmU4OWY1NGY5NzZmZGEzMDA3ZWUzN2MzYWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNTo0MDozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDU6NDE6NTguMjM2MzIxNDA5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTM0OTQ2NDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBtbXBoLVx1MDAzZWhhc2hfbmV3YCBmaWVsZCBpcyBhY2Nlc3NlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCDigJMgY2hhbmdpbmcgdGhlIGxvY2tpbmcgbWVjaGFuaXNtIGFyb3VuZCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGhvdyB0aGF0IGBoYXNoX25ld2AgZmxhZyBpcyBoYW5kbGVkLiBUaGV5J3JlIG1vdmluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIHdpdGggYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYC4gUHJldHR5IHN0YW5kYXJkIHN0dWZmIGZvciB0aGlzIGtpbmQgb2Ygb3B0aW1pemF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFuIGV4cGVydCBpbiB0aGlzIGFyZWEsIGlzIGFsd2F5cyBcImFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgd2l0aCB0aGlzIGNoYW5nZT9cIiBUaGUgYW5zd2VyIGlzIGxpa2VseSBubywgYnV0IEkgbmVlZCB0byBiZSBzdXJlLiBUaGlzIGNoYW5nZSBpcyBhbGwgYWJvdXQgKnN5bmNocm9uaXphdGlvbiogYW5kIGhhbmRsaW5nIHBvdGVudGlhbCBkYXRhIHJhY2VzLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBoZXJlLiBXZSdkIGJlIGxvb2tpbmcgYXQgS0NTQU4gb3IgS0FTQU4gdG8gY2F0Y2ggdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgTE9DS0RFUCB0byBmbGFnIGFueSBsb2NraW5nIGlzc3VlcywgYnV0IG5vdCBLTVNBTi5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgS01TQU4gcmVhc29uaW5nLiBUaGUgcGF0Y2gncyBjb3JlIGlzIGFib3V0IGNvbmN1cnJlbmN5IGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIEl0J3Mgbm90IGNyZWF0aW5nIG9yIGFsbG9jYXRpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzLiBJdCdzIHN3YXBwaW5nIGEgbXV0ZXggZm9yIFJDVSByZWFkIGxvY2sgYW5kIG1lbW9yeSBiYXJyaWVycywgYW5kIHVzaW5nIFJFQURfT05DRS9XUklURV9PTkNFIG9uIHRoZSBgaGFzaF9uZXdgIHZhcmlhYmxlLiBUaGVyZSBhcmVuJ3QgYW55IGFsbG9jYXRpb25zIGhhcHBlbmluZyBhbmQgbm8gZGF0YSBjb3B5aW5nIHRvIG9yIGZyb20gdXNlciBzcGFjZSwgd2hpY2ggd291bGQgYmUgdGhlIG9ubHkgd2F5IHRvIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgdG91Y2hpbmcgYW55IG1lbW9yeSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBXZSBjYW4gZm9ybXVsYXRlIGEgcmVzcG9uc2Ugd2l0aCB0aGF0IGluIG1pbmQ6XG5cbk5lZWRzS01TQU46IGZhbHNlXG5LTVNBTlJlYXNvbmluZzogVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgcmVhZCBsb2NrLCBtZW1vcnkgYmFycmllcnMsIGFuZCBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY2MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNTo0MjoxMC4zNzEyNzE4ODZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBhbiBSQ1UgcmVhZCBsb2NrLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzLCBhbmQgdXNpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgbWFjcm9zIGZvciB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3Vlcywgd2hpY2ggYXJlIGJldHRlciBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIGFuIFJDVSByZWFkIGxvY2ssIGFkZGluZyBtZW1vcnkgYmFycmllcnMsIGFuZCB1c2luZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBtYWNyb3MgZm9yIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzLCB3aGljaCBhcmUgYmV0dGVyIGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[1] Phase: Succeeded StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 05:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 05:42:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2] Phase: Succeeded StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 05:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 05:42:21 +0000 UTC FinishedAt: 2026-08-13 05:42:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowlf45c/series-workflowlf45c-convert-artifact-2293381447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 05:42:31 +0000 UTC FinishedAt: 2026-08-13 05:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 05:42:31 +0000 UTC FinishedAt: 2026-08-13 05:58:57 +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:*d1a043ba-2d8c-4b98-af31-dc0cfe013d13,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-workflowlf45c/series-workflowlf45c-convert-artifact-2293381447/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": "2858d73c-2b03-4c80-a890-1dbdcb343b35", "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-workflowlf45c/series-workflowlf45c-build-action-1482506717/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 05:42:31 +0000 UTC FinishedAt: 2026-08-13 05:58:47 +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:*d1a043ba-2d8c-4b98-af31-dc0cfe013d13,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-workflowlf45c/series-workflowlf45c-convert-artifact-2293381447/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": "2858d73c-2b03-4c80-a890-1dbdcb343b35", "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-workflowlf45c/series-workflowlf45c-build-action-1482506717/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 05:58:57 +0000 UTC FinishedAt: 2026-08-13 05:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 05:58:57 +0000 UTC FinishedAt: 2026-08-13 05:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 05:58:57 +0000 UTC FinishedAt: 2026-08-13 05:59:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 05:58:57 +0000 UTC FinishedAt: 2026-08-13 05:59:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowlf45c/series-workflowlf45c-convert-artifact-2366424438/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 05:59:07 +0000 UTC FinishedAt: 2026-08-13 06:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 05:59:07 +0000 UTC FinishedAt: 2026-08-13 06:01:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2858d73c-2b03-4c80-a890-1dbdcb343b35,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-workflowlf45c/series-workflowlf45c-build-action-1482506717/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-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 06:01:15 +0000 UTC FinishedAt: 2026-08-13 06:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 06:01:15 +0000 UTC FinishedAt: 2026-08-13 06:01:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 06:01:15 +0000 UTC FinishedAt: 2026-08-13 06:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 06:01:15 +0000 UTC FinishedAt: 2026-08-13 06:18:30 +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:*d1a043ba-2d8c-4b98-af31-dc0cfe013d13,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-workflowlf45c/series-workflowlf45c-convert-artifact-2366424438/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": "a26ca830-44be-43d3-8a7b-625b330b58fa", "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-workflowlf45c/series-workflowlf45c-build-action-3852332154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 06:01:15 +0000 UTC FinishedAt: 2026-08-13 06:18:20 +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:*d1a043ba-2d8c-4b98-af31-dc0cfe013d13,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-workflowlf45c/series-workflowlf45c-convert-artifact-2366424438/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": "a26ca830-44be-43d3-8a7b-625b330b58fa", "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-workflowlf45c/series-workflowlf45c-build-action-3852332154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 06:18:30 +0000 UTC FinishedAt: 2026-08-13 06:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 06:18:30 +0000 UTC FinishedAt: 2026-08-13 06:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 06:18:30 +0000 UTC FinishedAt: 2026-08-13 06:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 06:18:30 +0000 UTC FinishedAt: 2026-08-13 06:20:42 +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:*a26ca830-44be-43d3-8a7b-625b330b58fa,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-workflowlf45c/series-workflowlf45c-build-action-3852332154/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-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"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:*2858d73c-2b03-4c80-a890-1dbdcb343b35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a26ca830-44be-43d3-8a7b-625b330b58fa,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-workflowlf45c/series-workflowlf45c-build-action-1482506717/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-workflowlf45c/series-workflowlf45c-build-action-3852332154/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 06:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 06:20:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"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-workflowlf45c/series-workflowlf45c-convert-artifact-2447880091/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 06:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 06:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 06:20:51 +0000 UTC FinishedAt: 2026-08-13 06:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 06:21:01 +0000 UTC FinishedAt: 2026-08-13 09:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlf45c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default","futex_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"6cedb501-e254-4336-bb2c-c568b82ef11f","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 06:21:01 +0000 UTC FinishedAt: 2026-08-13 09:24:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2858d73c-2b03-4c80-a890-1dbdcb343b35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a26ca830-44be-43d3-8a7b-625b330b58fa,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-workflowlf45c/series-workflowlf45c-build-action-1482506717/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-workflowlf45c/series-workflowlf45c-build-action-3852332154/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-workflowlf45c/series-workflowlf45c-convert-artifact-2447880091/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,}