Name: series-workflowzrfxw Phase: Succeeded StartedAt: 2026-08-13 06:39:22 +0000 UTC FinishedAt: 2026-08-13 06:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[0] Phase: Succeeded StartedAt: 2026-08-13 06:39:22 +0000 UTC FinishedAt: 2026-08-13 06:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 06:39:22 +0000 UTC FinishedAt: 2026-08-13 06:42:31 +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", "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", "FUTEX_PRIVATE_HASH" ], "series_id": "d111d478-973f-4901-88c4-3a717b14dd0b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default", "futex_hash", "futex_private_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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuJiM0MztcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuJiM0MztcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbiYjNDM7XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaCYjMzQ7LAogICAgJiMzNDtmdXRleF9wcml2YXRlX2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjFiNGZmMzQzMjQzM2QzNWE0NWE5YTEzMjM2OTkzMjVjYWVmNjUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NDA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoKIAlmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtJmd0O2hhc2gsIGxvY2tkZXBfaXNfaGVsZCgmYW1wO21tcGgtJmd0O2xvY2spKTsKIAlpZiAoZnBoKSB7CiAJCWlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkgewotCQkJbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJV1JJVEVfT05DRShtbXBoLSZndDtoYXNoX25ldywgbmV3KTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkJZnBoID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwogCQlpZiAoZnBoKSB7Ci0JCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAkJCV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTsKIAkJfQogCX0KQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIApAQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQljdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLSZndDtmdXRleC5waGFzaC5oYXNoLAogCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoLmxvY2spKTsKIAkJbmV3ID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwotCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCiAJCWlmIChmcGgpIHsKIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhY3VyLSZndDtoYXNoX21hc2spIHsKQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCQkgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuCiAJCQkJICovCiAJCQkJZnJlZSA9IGZwaDsKLQkJCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIW5ldykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBmb2N1cyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBgbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3YCBmaWVsZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXBsYWNpbmcgZGlyZWN0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlbnRpb24gdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcsIHdoaWNoIGlzIGNydWNpYWwgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIGtlcm5lbCBpdHNlbGYuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLi4uIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBtdXRleCBndWFyZCAoYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spYCkgaW4gZmF2b3Igb2YgUkNVIChgZ3VhcmQocmN1KSgpYCkuIEFoLCBzbyB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBvciBlbGltaW5hdGUgYSByYWNlIGNvbmRpdGlvbiBieSBsZXZlcmFnaW5nIFJDVS4gVGhlIGFkZGVkIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSBpbnZvbHZpbmcgbWVtb3J5IGJhcnJpZXJzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gUkNVJiMzOTtzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIHZlcnkgc2hvcnQgYW5kIG1ha2VzIGl0IHZlcnkgZWZmaWNpZW50IGZvciBjb25jdXJyZW50IGFjY2Vzcy4gU28sIHRoaXMgbWlnaHQgYmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciwgcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCBhIGNyaXRpY2FsIGJ1ZyBmaXggcmVsYXRlZCB0byBmdXRleCBoYXNoIHBpdm90aW5nLgoKSSByZWFsbHkgbmVlZCB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2Agbm93LiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgaG93IHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQsIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgaXMgYSBsb3QgbW9yZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYF9fZnV0ZXhfcGl2b3RfaGFzaGAuIFJpZ2h0IGF3YXksIEkmIzM5O20gc2VlaW5nIHRoaXMgaXMgYWxsIGFib3V0IGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIFRoYXQmIzM5O3MgYSBjb3JlIGtlcm5lbCBhcmVhIOKAkyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIGNhbmRpZGF0ZSYjMzQ7IHRvIG1lLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgZGVmaW5pdGVseSBvbmUuIFRoZW4sIHRoZXJl4oCZcyBgZnV0ZXhfcGl2b3RfaGFzaGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGBmdXRleF9oYXNoX2ZyZWVgLCBidXQgdGhhdCYjMzk7cyBub3QgYmVlbiBtb2RpZmllZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgbGVzcyByZWxldmFudCB0byB0aGlzIGNoYW5nZS4KCldhaXQgYSBzZWNvbmTigKYgTG9va2luZyBjbG9zZXIsIGJvdGggYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgYXJlIG1hcmtlZCBzdGF0aWMuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgSSBjb3VsZCBoYXZlIG1pc3NlZCBzb21ldGhpbmcsIGJ1dCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgdHJpY2tpZXIgZm9yIGV4dGVybmFsIGZ1enppbmcgc2luY2UgdGhleSBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCBpbml0aWFsaXplZCwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGFjdHVhbGx5IGhhcHBlbnMsIGFuZCBnaXZlbiB0aGF0LCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBmdXRleF9oYXNoX3ByY3RsYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29udHJvbCBwbGFuZSB3aWxsIGxpa2VseSBiZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIHRoYXQgZW50cnkgcG9pbnQsIGFuZCB0aGVuIHRyYWNlIGZyb20gdGhlcmUgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGVsZW1lbnRzLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazoKCioqRGVjb25zdHJ1Y3RpbmcgRnV0ZXggSGFzaGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAuLi4gUmlnaHQsIHNvIHRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIGFuIGVudHJ5IHBvaW50LCBhIGhvb2ssIHNvbWV0aGluZyB0aGUga2VybmVsIGV4cG9zZXMgdG8gdXNlcmxhbmQsIHByb2JhYmx5IHRocm91Z2ggYSBgcHJjdGxgIGNhbGwuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gY29uZmlndXJpbmcgb3IgbWFuaXB1bGF0aW5nIHRoZSBmdXRleCBoYXNoIHRhYmxlIOKAkyBsaWtlbHkgc2V0dGluZyBzb21lIHBvbGljeSBvciBwYXJhbWV0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMgb3IgZG9jdW1lbnRhdGlvbiB0byBzZWUgKmV4YWN0bHkqIHdoYXQgdGhpcyBgcHJjdGxgIGRvZXMgd2l0aCBmdXRleGVzLiBJcyBpdCByZWxhdGVkIHRvIGNvbnRlbnRpb24gcHJvZmlsaW5nPyBNYXliZSBzZXR0aW5nIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkmIzM5O2QgZXhwbG9yZS4KCkFuZCB0aGVuIHdlIGhhdmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBvciBhbGxvY2F0aW5nIHRoZSBkZWZhdWx0IGluc3RhbmNlIG9mIHRoZSBmdXRleCBoYXNoIHRhYmxlLiBTb3VuZHMgbGlrZSBpdCYjMzk7cyB1c2VkIGlmIG5vdGhpbmcgZWxzZSBpcyBzcGVjaWZpZWQuIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpZiBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgb3IgaWYgaXQmIzM5O3MgZG9uZSBsYXppbHksIG9uIGZpcnN0IGZ1dGV4IHVzZSwgb3Igc29tZSBvdGhlciBzdWNoIGNvbmRpdGlvbi4gSG93IGlzIHRoZSBzaXplIG9mIHRoZSB0YWJsZSBkZXRlcm1pbmVkPyBJcyB0aGF0IGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcz8gQW5kIGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBgcHJjdGxgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhleSB3b3JrIGFzIGEgcGFpciBzb21laG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBGVVRFWF9QUklWQVRFX0hBU0gqKgoKQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGlzIHRvIHVzZSBgRlVURVhfUFJJVkFURV9IQVNIYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBGVVRFWF9QUklWQVRFX0hBU0hgLi4uIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uLiYjMzQ7IEl0JiMzOTtzIGEgcmVmbGV4LCByZWFsbHksIHRvIHZlcmlmeSB0aGUgZmVhdHVyZSYjMzk7cyBhdmFpbGFiaWxpdHkgYW5kIGFueSBkZXBlbmRlbmNpZXMgYmVmb3JlIGRpdmluZyBpbi4gTmVlZCB0byBnbyBsb29rIGluIHRoZSBgS2NvbmZpZ2AgZm9yIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGluZyBpdCBlbnRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGltcGxpY2F0aW9ucy4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVURVhfUFJJVkFURV9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxuLS1cbmluaXQvS2NvbmZpZy0xODQ4LVxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuaW5pdC9LY29uZmlnLTE4NTAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHJlcXVlc3Q6CgoqKkFuYWx5emluZyB0aGUgUXVlcnk6ICYjMzQ7V2hhdCBTZWxlY3RzIEZVVEVYX1BSSVZBVEVfSEFTSD8mIzM0OyoqCgpSaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzIGVzc2VudGlhbGx5LCAmIzM0O1doYXQgY29kZSBvciBwcm9jZXNzIGluIHRoZSBzeXN0ZW0gaXMgKmNob29zaW5nKiB0byB1dGlsaXplIHRoZSBgRlVURVhfUFJJVkFURV9IQVNIYCBmZWF0dXJlPyYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHdoZXJlIGl0JiMzOTtzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSBpdCYjMzk7cyBiZWluZyAqdXNlZCogYXMgYSBzZWxlY3Rpb24gY3JpdGVyaW9uIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBwb2ludC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgcmVsYXRlZCB0byBmYXN0IHVzZXItc3BhY2UgbXV0ZXhlcyAoZnV0ZXhlcykgYW5kIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhlbS4gSXQgc3VnZ2VzdHMgYSBoYXNoZWQgaW1wbGVtZW50YXRpb24gZm9yIHByaXZhdGUgZnV0ZXhlcy4gVGhlcmVmb3JlLCBJIGtub3cgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGNvZGUgcmVsYXRlZCB0byBmdXRleCBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lIHRoYXQgZGVhbHMgd2l0aCB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UuIE5vdywgSSBoYXZlIHRvIHRoaW5rOgoKKiAgICoqQ29yZSBGdXRleCBDb2RlOioqIEkgbmVlZCB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZnV0ZXggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBmaWxlcyBkZWFsaW5nIHdpdGggZnV0ZXggc3lzY2FsbHMgKGUuZy4sIGBmdXRleC5jYCBvciBzaW1pbGFyKS4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNvZGUgdGhhdCBoYW5kbGVzIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNlbGVjdGlvbiBpbiB0aGUgcGF0aCB3aGVyZSBmdXRleCBzeXNjYWxscyBhcmUgaGFuZGxlZC4gSSBleHBlY3QgdGhpcyB3b3VsZCBiZSBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBvciBzZWxlY3Rpb24gbG9naWMuCiogICAqKktlcm5lbCBDb25maWd1cmF0aW9uOioqIElzIHRoaXMgc2VsZWN0aW9uIGNvbnRyb2xsZWQgYnkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gKGxpa2UgYSBgI2RlZmluZWAgb3IgYSBgQ09ORklHX2Agb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzKT8gSWYgc28sIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBvcHRpb24gdG8gaXRzIHVzZSBpbiB0aGUgY29kZS4gSSB3b3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHVzaW5nIGdyZXAsIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlcmUuCiogICAqKlJ1bnRpbWUgVHVuaW5nOioqIENvdWxkIGl0IGJlIGR5bmFtaWNhbGx5IHNlbGVjdGVkIGJhc2VkIG9uIHNvbWUgcnVudGltZSBwYXJhbWV0ZXIgb3Igc3lzdGVtIGNoYXJhY3RlcmlzdGljIChlLmcuLCBhdmFpbGFibGUgbWVtb3J5LCBudW1iZXIgb2YgQ1BVcywgdHlwZSBvZiBwcm9jZXNzb3IpPyBJZiBzbywgSSYjMzk7ZCBuZWVkIHRvIGxvb2sgZm9yIGNvZGUgdGhhdCBjaGVja3MgdGhvc2UgZmFjdG9ycyBhbmQgbWFrZXMgdGhlIGRlY2lzaW9uLgoqICAgKipMaWJyYXJpZXMgJmFtcDsgZ2xpYmM6KiogSXMgdGhpcyBzb21ldGhpbmcgaW4gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSAoZ2xpYmMpIHRoYXQmIzM5O3MgbWFraW5nIHRoZSBkZWNpc2lvbiBvbiBiZWhhbGYgb2YgdXNlci1zcGFjZSBwcm9jZXNzZXM/IElmIHNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1dGV4LXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNvZGUgcGF0aCB0aGF0IGRlYWxzIHdpdGggdGhlICpjcmVhdGlvbiogb3IgKmluaXRpYWxpemF0aW9uKiBvZiB0aGVzZSBwcml2YXRlIGZ1dGV4ZXMuIFdoZXJlIGlzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgdGhlIGZ1dGV4PwoKTXkgcGxhbiBpcyB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSwgc3RhcnRpbmcgd2l0aCB0aGUgY29yZSBmdXRleCBmaWxlcywgYW5kIGZvbGxvd2luZyB0aGUgY2FsbHMgdGhhdCBoYW5kbGUgdGhlIHByaXZhdGUgZnV0ZXggbmFtZXNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBjb25maWd1cmF0aW9uIGNoZWNrcywgb3Igb3RoZXIgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgdWx0aW1hdGVseSBsZWFkcyB0byB0aGUgc2VsZWN0aW9uIG9mIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJJiMzOTttIHJlYWR5IHRvIHVzZSB0b29scyBsaWtlIGBncmVwYCwgYGNzY29wZWAsIG9yIGBjbGFuZ2RgIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlVURVhfUFJJVkFURV9IQVNIYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgdmFndWVseSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGl0LCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZnV6enkuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODQ5IOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZ3JvdXBlZCBvciBkZWZpbmVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmVhdHVyZSBnZXRzIGVuYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVmYXVsdCBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkLXRpbWUgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbjE4NjA6XHRcdGJvb2xcbjE4NjE6XHRcbjE4NjI6XHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuMTg2MzpcdFx0ZGVmX2Jvb2wgRlVURVggXHUwMDI2XHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZVVEVYIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaWYgYEZVVEVYYCwgYW5kIG5vdCBgQkFTRV9TTUFMTGAsIGFuZCB0aGVyZSYjMzk7cyBhbiBgTU1VYCwgdGhlbiB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0aGF0IGB5YCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU28sIHJlYWxseSwgSSBkb24mIzM5O3QgKmhhdmUqIHRvIGV4cGxpY2l0bHkgYWRkIGl0IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gdGhyb3cgaW4gYEZVVEVYYCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSYjMzk7cyBzYWtlLCBhbHRob3VnaCB1c3VhbGx5IGBGVVRFWGAgaXMgZW5hYmxlZCBhbnl3YXkuIFdhaXQgYSBtaW51dGUuLi4geWVzLCBhZGRpbmcgYEZVVEVYYCBpcyBhIGdvb2QgY2FsbCwgZm9yIGVtcGhhc2lzLgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBhIGNvbmZpZyBmbGFnLiBJIGNhbiBhZGQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgdG8gRW5hYmxlQ29uZmlncywgdG9vLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcGxldGUgcGljdHVyZSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgYWZmZWN0ZWQuIEFoLCBJIHNlZSBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLi4uIHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFJpZ2h0LCByaWdodC4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24/IE5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2hpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgdG8gYmUuIEhtbSwgYnV0IEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYF9fZnV0ZXhfcGl2b3RfaGFzaGAgYW5kIGBmdXRleF9waXZvdF9oYXNoYCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGZ1dGV4X3Bpdm90X2hhc2hgIGlzIGJlaW5nIGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSB0aGlzIG11Y2ggY2xlYXJlci4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9waXZvdF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTQtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIxOS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyMS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyODpcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cdFx0fVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cdH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjU2Olx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1Ny1cdGdvdG8gYWdhaW47XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNjA9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cdH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjcyOlx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXHUwMDNlcHJpdmF0ZS5tbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3My1cdGdvdG8gYWdhaW47XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTYtXHQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3Olx0ICogZnV0ZXhfaGFzaCgpXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cdCAqICAgZ3VhcmQocmN1KTtcdFx0ICBndWFyZChtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTQtXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5Ni1cdCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzAtXHRcdFx0ICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5MzE6XHRcdFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXHUwMDI2XHUwMDI2IGN1c3RvbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMi1cdFx0XHRcdGdvdG8gYWdhaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgZnV0ZXhfaGFzaCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgZnV0ZXhfcGl2b3RfaGFzaGAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAuIE1ha2VzIHNlbnNlLCBgZnV0ZXhfaGFzaGAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGhhc2hpbmcgZnV0ZXgga2V5cywgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYSBjb3JlIGZ1dGV4IGZ1bmN0aW9uIHNpbmNlIGl0JiMzOTtzIHVzZWQgc28gbWFueSBwbGFjZXMuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmU6IGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoYCwgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBmdXRleF9oYXNoYCBhY3R1YWxseSBhbiBleHBvcnRlZCBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jLTU1LSAqIFRoZSBiYXNlIG9mIHRoZSBidWNrZXQgYXJyYXkgYW5kIGl0cyBzaXplIGFyZSBhbHdheXMgdXNlZCB0b2dldGhlclxua2VybmVsL2Z1dGV4L2NvcmUuYzo1NjogKiAoYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb25seSBpbiBmdXRleF9oYXNoKCkpLCBzbyBlbnN1cmUgdGhhdCB0aGV5XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTU3LSAqIHJlc2lkZSBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz01OT1zdGF0aWMgc3RydWN0IHtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTYxLVx0dW5zaWduZWQgaW50XHRcdCBoYXNoc2hpZnQ7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjYyOlx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpxdWV1ZXNbTUFYX05VTU5PREVTXTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjMtfSBfX2Z1dGV4X2RhdGEgX19yZWFkX21vc3RseSBfX2FsaWduZWQoMipzaXplb2YobG9uZykpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy02NC1cbmtlcm5lbC9mdXRleC9jb3JlLmM6NjU6I2RlZmluZSBmdXRleF9oYXNobWFza1x0KF9fZnV0ZXhfZGF0YS5oYXNobWFzaylcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjY6I2RlZmluZSBmdXRleF9oYXNoc2hpZnRcdChfX2Z1dGV4X2RhdGEuaGFzaHNoaWZ0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy02Ny0jZGVmaW5lIGZ1dGV4X3F1ZXVlc1x0KF9fZnV0ZXhfZGF0YS5xdWV1ZXMpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz02OT1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoIHtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0LVx0Ym9vbFx0XHRjdXN0b207XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc1Olx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHF1ZXVlc1tdO1xua2VybmVsL2Z1dGV4L2NvcmUuYy03Ni19O1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTIzPWxhdGVfaW5pdGNhbGwoZmFpbF9mdXRleF9kZWJ1Z2ZzKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEyOC1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTI5OnN0YXRpYyBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE0ND12b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQ5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTA6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1MTpfX2Z1dGV4X2hhc2hfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTIte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2NDpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGJfb2xkLCAqaGJfbmV3O1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjUtXHR1bnNpZ25lZCBpbnQgc2xvdHMgPSBvbGQtXHUwMDNlaGFzaF9tYXNrICYjNDM7IDE7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4MDpcdFx0XHRoYl9uZXcgPSBfX2Z1dGV4X2hhc2goXHUwMDI2dGhpcy1cdTAwM2VrZXksIG5ldywgTlVMTCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MS1cdFx0XHRmdXRleF9oYl93YWl0ZXJzX2luYyhoYl9uZXcpO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzOC1cdCAqIG9idGFpbmVkIG9uY2UgdGhlIGxhc3QgdXNlciBkcm9wcGVkIGl0JiMzOTtzLlxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzk6XHQgKiBJbiB0aGF0IGNhc2Ugd2UgYmxvY2sgb24gbW1fc3RydWN0OjpmdXRleF9oYXNoX2xvY2sgYW5kIGVpdGhlciBoYXZlXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI0MC1cdCAqIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50IG9yIHdhaXQgd2hpbGUgc29tZW9uZSBlbHNlIGlzIGRvaW5nIHRoZVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjYxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NC1cdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoID0gTlVMTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY1Olx0XHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjYtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2NzpcdFx0aGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBcdTAwMjZmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3ODpzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzkte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyODA6XHRyZXR1cm4gKHN0cnVjdCBmdXRleF9idWNrZXRfcmVmKXsgLmhiID0gX19mdXRleF9oYXNoKGtleSwgTlVMTCwgTlVMTCksIC5mcGggPSBOVUxMIH07XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4MS19XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNDc9c3RhdGljIGludCBmdXRleF9tcG9sKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNTQtLyoqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM1NTogKiBfX2Z1dGV4X2hhc2ggLSBSZXR1cm4gdGhlIGhhc2ggYnVja2V0XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM1Ni0gKiBAa2V5Olx0UG9pbnRlciB0byB0aGUgZnV0ZXgga2V5IGZvciB3aGljaCB0aGUgaGFzaCBpcyBjYWxjdWxhdGVkXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjYtICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM2NzpzdGF0aWMgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzY4Ol9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNzktXHRcdFx0XHQqZnBoX3AgPSBmcGg7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM4MDpcdFx0XHRyZXR1cm4gX19mdXRleF9oYXNoX3ByaXZhdGUoa2V5LCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0zODEtXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5Ny1cdFx0ICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM5ODpcdFx0bm9kZSA9IChoYXNoIFx1MDAzZVx1MDAzZSBmdXRleF9oYXNoc2hpZnQpICUgbnJfbm9kZV9pZHM7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5OS1cdFx0aWYgKCFub2RlX3Bvc3NpYmxlKG5vZGUpKSB7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy00MDMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjQwNDpcdHJldHVybiBcdTAwMjZmdXRleF9xdWV1ZXNbbm9kZV1baGFzaCBcdTAwMjYgZnV0ZXhfaGFzaG1hc2tdO1xua2VybmVsL2Z1dGV4L2NvcmUuYy00MDUtfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9NzM4PWludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1Ny0gKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6NzU4OnN0cnVjdCBmdXRleF9xICpmdXRleF90b3Bfd2FpdGVyKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy03NTkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9Nzc2PXZvaWQgd2FpdF9mb3Jfb3duZXJfZXhpdGluZyhpbnQgcmV0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmV4aXRpbmcpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDAtLyoqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjgwMTogKiBfX2Z1dGV4X3VucXVldWUoKSAtIFJlbW92ZSB0aGUgZnV0ZXhfcSBmcm9tIGl0cyBmdXRleF9oYXNoX2J1Y2tldFxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDItICogQHE6XHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz04MDY9dm9pZCBfX2Z1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwNy17XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjgwODpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwOS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgxMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6ODE0Olx0aGIgPSBjb250YWluZXJfb2YocS1cdTAwM2Vsb2NrX3B0ciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0LCBsb2NrKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtODE1LVx0cGxpc3RfZGVsKFx1MDAyNnEtXHUwMDNlbGlzdCwgXHUwMDI2aGItXHUwMDNlY2hhaW4pO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODE5LS8qIFRoZSBrZXkgbXVzdCBiZSBhbHJlYWR5IHN0b3JlZCBpbiBxLVx1MDAzZWtleS4gKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6ODIwOnZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2NvcmUuYy04MjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzo4Mzg6dm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2NvcmUuYy04Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODQzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzo4NDQ6dm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NDUtXHRcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTg2NC0vKipcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODY1OiAqIGZ1dGV4X3VucXVldWUoKSAtIFJlbW92ZSB0aGUgZnV0ZXhfcSBmcm9tIGl0cyBmdXRleF9oYXNoX2J1Y2tldFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjYtICogQHE6XHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzQxPXN0YXRpYyB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzQ3LVx0Lypcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM0ODpcdCAqIFRoZSBtdXRleCBtbV9zdHJ1Y3Q6OmZ1dGV4X2hhc2hfbG9jayBtaWdodCBiZSBhY3F1aXJlZC5cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM0OS1cdCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2MD12b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NjYtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1Njc6c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU2OC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTYtXHQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3Olx0ICogZnV0ZXhfaGFzaCgpXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cdCAqICAgZ3VhcmQocmN1KTtcdFx0ICBndWFyZChtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXHQgKlx0XHRcdFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcdCAqXHRcdFx0XHRmdXRleF9oYXNoX2FsbG9jYXRlKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cdCAqXHRcdFx0XHQgIGZ1dGV4X3JlZl9kcm9wKClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NTQ9c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc2NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc2NjpzdGF0aWMgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzY3LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NzM6dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzQte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNDpzdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwNS1cdFx0XHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhhc2hfc2xvdHM7IGkmIzQzOyYjNDM7KVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODcxOlx0XHRmdXRleF9oYXNoX2J1Y2tldF9pbml0KFx1MDAyNmZwaC1cdTAwM2VxdWV1ZXNbaV0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xODcyLVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkxMy1cdFx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTE0Olx0XHRcdFx0aWYgKGZ1dGV4X2hhc2hfbGVzcyhuZXcsIGZwaCkpIHtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkxNS1cdFx0XHRcdFx0ZnJlZSA9IG5ldztcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjItXHRidWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKDQgKiB0aHJlYWRzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2MzpcdGJ1Y2tldHMgPSBjbGFtcChidWNrZXRzLCAxNiwgZnV0ZXhfaGFzaG1hc2sgJiM0MzsgMSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjQtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTcwLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTcxOnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODQ6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hhc2hfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTg1LSNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTgte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDE5Olx0ZnV0ZXhfaGFzaF9pbml0X21tKFx1MDAyNm1tLVx1MDAzZWZ1dGV4KTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMC1cdGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShcdTAwMjZtbS1cdTAwM2VmdXRleCk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNi1cdGNhc2UgUFJfRlVURVhfSEFTSF9HRVRfU0xPVFM6XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzc6XHRcdHJldCA9IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzgtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjA0Nz1zdGF0aWMgaW50IF9faW5pdCBmdXRleF9pbml0KHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDYwLSNlbmRpZlxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYxOlx0ZnV0ZXhfaGFzaHNoaWZ0ID0gaWxvZzIoaGFzaHNpemUpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYyOlx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQpICogaGFzaHNpemU7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjMtXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjUtXHRmb3JfZWFjaF9ub2RlKG4pIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA2NjpcdFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICp0YWJsZTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2Ny1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzUtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhhc2hzaXplOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA3NjpcdFx0XHRmdXRleF9oYXNoX2J1Y2tldF9pbml0KFx1MDAyNnRhYmxlW2ldKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA3Ny1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwODAtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwODE6XHRmdXRleF9oYXNobWFzayA9IGhhc2hzaXplIC0gMTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA4Mi1cdHByX2luZm8oXCYjMzQ7ZnV0ZXggaGFzaCB0YWJsZSBlbnRyaWVzOiAlbHUgKCVsdSBieXRlcyBvbiAlZCBOVU1BIG5vZGVzLCB0b3RhbCAlbHUgS2lCLCAlcykuXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgZnV0ZXhfa2V5X2lzX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMTUwLSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MTUxOnN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCB7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTItXHRhdG9taWNfdCB3YWl0ZXJzO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDI6XHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQzLVx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1NC1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1NTpleHRlcm4gc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTYtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTgtXHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1OTpcdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg3PWV4dGVybiBpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mjg4OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yODktXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzA4PWV4dGVybiB2b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMDk6ZXh0ZXJuIHZvaWQgX19mdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMC1cdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zMTE9ZXh0ZXJuIGludCBmdXRleF91bnF1ZXVlKHN0cnVjdCBmdXRleF9xICpxKTtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTMtLyoqXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMTQ6ICogZnV0ZXhfcXVldWUoKSAtIEVucXVldWUgdGhlIGZ1dGV4X3Egb24gdGhlIGZ1dGV4X2hhc2hfYnVja2V0XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTUtICogQHE6XHRUaGUgZnV0ZXhfcSB0byBlbnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI3LSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzI4OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMyOS1cdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTM0MD1leHRlcm4gdm9pZCB3YWl0X2Zvcl9vd25lcl9leGl0aW5nKGludCByZXQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXhpdGluZyk7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ0LSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2luYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ2LXtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNTktICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozNjA6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hiX3dhaXRlcnNfZGVjKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjEte1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2NzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYl93YWl0ZXJzX3BlbmRpbmcoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2OC17XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzc5LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzgwOmV4dGVybiB2b2lkIGZ1dGV4X3FfbG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4MS1cdF9fYWNxdWlyZXMoXHUwMDI2aGItXHUwMDNlbG9jaylcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODMtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODQ6ZXh0ZXJuIHZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4NS1cdF9fcmVsZWFzZXMoXHUwMDI2aGItXHUwMDNlbG9jayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4OC1cdFx0XHRcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTQwMj1zdGF0aWMgaW5saW5lIHZvaWRcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQwMzpkb3VibGVfbG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00MDQtXHRfX2FjcXVpcmVzKFx1MDAyNmhiMS1cdTAwM2Vsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTQxNj1zdGF0aWMgaW5saW5lIHZvaWRcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQxNzpkb3VibGVfdW5sb2NrX2hiKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQxOC1cdF9fcmVsZWFzZXMoXHUwMDI2aGIxLVx1MDAzZWxvY2spXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9NDc2PXN0YXRpYyBpbnQgbG9ja19waV91cGRhdGVfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdTMyIG5ld3ZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTUtICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MTY6aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L3BpLmMtNTE3LVx0XHRcdCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc1PXN0YXRpYyBpbmxpbmVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzY6dm9pZCByZXF1ZXVlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Nzc6XHRcdCAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyLCB1bmlvbiBmdXRleF9rZXkgKmtleTIpXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc4LXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkwLVx0XHQvKlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MTpcdFx0ICogaGIxIGFuZCBoYjIgYmVsb25nIHRvIHRoZSBzYW1lIGZ1dGV4X2hhc2hfYnVja2V0X3ByaXZhdGVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTItXHRcdCAqIGJlY2F1c2UgaWYgd2UgbWFuYWdlZCBnZXQgYSByZWZlcmVuY2Ugb24gaGIxIHRoZW4gaXQgY2FuJiMzOTt0IGJlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yMzA9dm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMzE6XHRcdFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjMyLXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MD1zdGF0aWMgaW50XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjI4MTpmdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjgyOlx0XHRcdCAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyLCB1bmlvbiBmdXRleF9rZXkgKmtleTEsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI4My1cdFx0XHQgICB1bmlvbiBmdXRleF9rZXkgKmtleTIsIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9NzEyPXN0YXRpYyBpbmxpbmVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzEzOmludCBoYW5kbGVfZWFybHlfcmVxdWV1ZV9waV93YWtldXAoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzE0LVx0XHRcdFx0ICAgc3RydWN0IGZ1dGV4X3EgKnEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgZnV0ZXhfaGFzaGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmdXRleF9oYXNoYC4gSXQmIzM5O3MgZmxhZ2dlZCBhcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKj8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgaW50ZXJhY3Rpb24uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0LiBBaCwgcmlnaHQsIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkIHRvIG1vZHVsZXMsIGJ1dCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGl0c2VsZiB3aXRoaW4gdGhhdCBjb3JlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2MDpzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBIYXNoIFBpdm90aW5nIFBhdGNoKioKCk9rYXksIHNvIGBmdXRleF9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIExldCYjMzk7cyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUga2V5IHN5bWJvbHMuIEkgc2VlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoYCwgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gCgpSaWdodCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgaXMgY2FsbGVkIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgZnJvbSBgY29weV9wcm9jZXNzYCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHRyaWdnZXJlZCBieSBgc3lzX3ByY3RsYC4gVGhlc2UgbG9vayBsaWtlIHNvbGlkIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIHNvbGUgZW5hYmxlci4gWWVwLCBpdCBpcy4gQnV0LCBob2xkIG9uLi4uIGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gYEZVVEVYYC4gU28sIGJvdGggYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy4KCkxldCYjMzk7cyByZS1leGFtaW5lIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSXQgc2VlbXMgdG8gbW9kaWZ5IGBfX2Z1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gVGhlc2UgYXJlIGFsbCBjbGVhcmx5IGNvbm5lY3RlZCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgcGl2b3Rpbmcgb2YgdGhlIHByaXZhdGUgaGFzaCB0YWJsZS4gCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgaW52b2x2ZToKCjEuICBJbnRyb2R1Y2luZyBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgIGZvciBgbW1waC0mZ3Q7aGFzaF9uZXdgLgoyLiAgUmVwbGFjaW5nIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAgd2l0aCBgZ3VhcmQocmN1KSgpYCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuCjMuICBBZGRpbmcgYHNtcF9ybWIoKWAgd2l0aGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nLiBDb25zaWRlcmluZyB0aGUgY29yZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZXhwbG9yZSBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KClRvIHN1bW1hcml6ZSwgaGVyZSBhcmUgdGhlIGZvY3VzZWQgc3ltYm9scyBhZ2FpbjoKLSAgIGBmdXRleF9oYXNoX3ByY3RsYAotICAgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAKLSAgIGBmdXRleF9oYXNoYAotICAgYGZ1dGV4X3ByaXZhdGVfaGFzaGAKCldhaXQgYSBtaW51dGUsIGlzIGBmdXRleF9wcml2YXRlX2hhc2hgIGFsc28gZ2xvYmFsPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCBcXCpmdXRleF9wcml2YXRlX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MjIwPXN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTk5CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBQYXRjaCoqCgpPa2F5LCBzbyBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCBnb29kIHRvIGNvbmZpcm0uIE5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgcHJldHR5IGNsZWFyOiBgRlVURVhfUFJJVkFURV9IQVNIYCBoaW5nZXMgb24gYEZVVEVYICZhbXA7JmFtcDsgIUJBU0VfU01BTEwgJmFtcDsmYW1wOyBNTVVgLiBHaXZlbiB0aGF0IHdlIGhhdmUgYEZVVEVYYCwgdGhhdCBtZWFucywgaWYgYWxsIGlzIGNvcnJlY3QsIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgbW9kaWZ5aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgKndpdGhpbiogdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSYjMzk7cyBwaXZvdGluZyBtZWNoYW5pc20uIFRoZXkmIzM5O3JlIHRvdWNoaW5nIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLCBzbyBpdCBzZWVtcyBxdWl0ZSBsb3ctbGV2ZWwuIFRoZSBtYWluIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgYW5kIG1lbW9yeSBiYXJyaWVycywgc3BlY2lmaWNhbGx5IGBzbXBfcm1iYCwgYFJFQURfT05DRWAsIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gb3B0aW1pemUgb3IgcG90ZW50aWFsbHkgZml4IHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIHByb2Nlc3NlcyBvZiB0aGUgZnV0ZXggaGFzaC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEhCgpCZWNhdXNlIHRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIGFuZCBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgb3IgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIGl0IG1ha2VzIHRoZW0gYSBoaWdoLXByaW9yaXR5IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6CiogICBgV29ydGhGdXp6aW5nOiB0cnVlYCAtIEFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywgJiMzNDtmdXRleF9oYXNoJiMzNDssICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDtdYCAtIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMuCiogICBgRW5hYmxlQ29uZmlnczogWyYjMzQ7RlVURVgmIzM0OywgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0O11gIC0gVGhlc2UgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LgoqICAgYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uJiMzNDtgIC0gVGhlIHJhdGlvbmFsZSBiZWhpbmQgbXkgY2hvaWNlcyBpcyBvdXRsaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBwaXZvdGluZyBtZWNoYW5pc20sIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gb3B0aW1pemUgb3IgZml4IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0gcmVhY2hhYmxlIHZpYSBwcmN0bCBvciBwcm9jZXNzIGNyZWF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgICAmIzM0O2Z1dGV4X3ByaXZhdGVfaGFzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKgogCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC0mZ3Q7aGFzaCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bW1waC0mZ3Q7bG9jaykpOwogCWlmIChmcGgpIHsKIAkJaWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7Ci0JCQltbXBoLSZndDtoYXNoX25ldyA9IG5ldzsKJiM0MzsJCQlXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogCQlmcGggPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7CiAJCWlmIChmcGgpIHsKLQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCQkJX19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpOwogCQl9CiAJfQpAQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSAmYW1wO21tLSZndDtmdXRleC5waGFzaDsKIAlzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7CiAKLQlndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JaWYgKCFtbXBoLSZndDtoYXNoX25ldykKJiM0MzsJZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtJmd0O2hhc2gpOwomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkCiYjNDM7CSAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW4KJiM0MzsJICogX19mdXRleF9waXZvdF9oYXNoKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CWlmICghUkVBRF9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtJmd0O2hhc2gpOwogCXJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpOwogfQogCkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCWN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2gsCiAJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2gubG9jaykpOwogCQluZXcgPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7Ci0JCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAKIAkJaWYgKGZwaCkgewogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFjdXItJmd0O2hhc2hfbWFzaykgewpAQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJCSAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS4KIAkJCQkgKi8KIAkJCQlmcmVlID0gZnBoOwotCQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldzsKJiM0MzsJCQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhbmV3KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzCgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDU5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25jdXJyZW5jeSBGaXg6IEZ1dGV4IENvcmUgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBvcHRpbWl6YXRpb24uIFRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSB3YXkgYG1tcGgtJmd0O2hhc2hfbmV3YCAob3IgYG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ld2AsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIGFsbCBhYm91dCBhdG9taWNpdHkgYW5kIG1lbW9yeSBiYXJyaWVycy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAuICBUaGlzIGlzIGEgdGV4dGJvb2sgdGVjaG5pcXVlIGZvciBlbnN1cmluZyBhdG9taWMgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZXMgYWNyb3NzIENQVXMsIHByZXZlbnRpbmcgdGVhcmluZyBvciBpbmNvcnJlY3QgdmFsdWVzIGR1ZSB0byBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBhIG11dGV4IChgZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jaylgKSBmb3IgYW4gUkNVIChgZ3VhcmQocmN1KSgpO2ApLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBhbmQgaXQmIzM5O3MgYWNjb21wYW5pZWQgYnkgYW4gYHNtcF9ybWIoKWAgbWVtb3J5IGJhcnJpZXIuIFRoZSBgc21wX3JtYigpYCBhbmQgYHJjdV9kZXJlZmVyZW5jZSgpYCBjYWxscyBlbnN1cmUgdGhhdCBpZiB0aGUgbmV3IGhhc2ggaXMgc2Vlbiwgc28gaXMgdGhlIGNsZWFyZWQgcG9pbnRlci4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOgoKKiAgIFRoZSBjb2RlIGlzIHJlcGxhY2luZyBgbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7YCB3aXRoIGBXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpO2AKKiAgIEFuZCBgbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtgIHdpdGggYFdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtgCiogICBJbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYCwgdGhleSBzd2l0Y2ggZnJvbSBhIG11dGV4IHRvIFJDVSBhbmQgaW50cm9kdWNlIGFuIGBzbXBfcm1iKClgIGFmdGVyIHVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgYW5kIGBSRUFEX09OQ0UoKWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG9yZGVyaW5nIG9mIHRoZSBtZW1vcnkgYWNjZXNzLgoKVGhlcmUgYXJlIG5vIG1ham9yIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgbm8gbmV3IGFsbG9jYXRpb25zLCBhbmQgbm90aGluZyB1c2VyLXNwYWNlIHZpc2libGUuIFRoaXMgaXMgYWxsIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgZnV0ZXggaW1wbGVtZW50YXRpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoZSBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIGJ1Z3MgaXMgY29uZmluZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVhZGlseSBkZXRlY3RlZCBieSBleGlzdGluZyBrZXJuZWwgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlIHBhdGNoIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBteSBmcmllbmRzIGhlcmUuIFNvLCBteSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBjbGVhbiwgZm9jdXNlZCBjb25jdXJyZW5jeSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgZGF0YSByYWNlcyBhbmQgbG9jayBjb250ZW50aW9uLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgZGF0YSByYWNlcyBhbmQgbG9jayBjb250ZW50aW9uLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDA6NTcuNTI5MDg2MTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNzcwODQyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICAgIFwiZnV0ZXhfaGFzaFwiLFxuICAgIFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU3LjUyOTA5NDIzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyODQxMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxYjRmZjM0MzI0MzNkMzVhNDVhOWExMzIzNjk5MzI1Y2FlZjY1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU4LjA2MjUwNDU4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwNDE1ODUxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgICBcImZ1dGV4X2hhc2hcIixcbiAgICBcImZ1dGV4X3ByaXZhdGVfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBwaXZvdGluZyBtZWNoYW5pc20sIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gb3B0aW1pemUgb3IgZml4IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0gcmVhY2hhYmxlIHZpYSBwcmN0bCBvciBwcm9jZXNzIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjFiNGZmMzQzMjQzM2QzNWE0NWE5YTEzMjM2OTkzMjVjYWVmNjUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NDA6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU4LjA2MjUwNjM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MTUyMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBmb2N1cyBvbiBob3cgd2UncmUgaGFuZGxpbmcgdGhlIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AgZmllbGQuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgZGlyZWN0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlbnRpb24gdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcsIHdoaWNoIGlzIGNydWNpYWwgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIGtlcm5lbCBpdHNlbGYuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBmdXRleF9waXZvdF9wZW5kaW5nYC4uLiB0aGV5J3JlIGRpdGNoaW5nIHRoZSBtdXRleCBndWFyZCAoYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCkgaW4gZmF2b3Igb2YgUkNVIChgZ3VhcmQocmN1KSgpYCkuIEFoLCBzbyB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBvciBlbGltaW5hdGUgYSByYWNlIGNvbmRpdGlvbiBieSBsZXZlcmFnaW5nIFJDVS4gVGhlIGFkZGVkIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSBpbnZvbHZpbmcgbWVtb3J5IGJhcnJpZXJzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24sIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpcyB2ZXJ5IHNob3J0IGFuZCBtYWtlcyBpdCB2ZXJ5IGVmZmljaWVudCBmb3IgY29uY3VycmVudCBhY2Nlc3MuIFNvLCB0aGlzIG1pZ2h0IGJlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3IsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgYSBjcml0aWNhbCBidWcgZml4IHJlbGF0ZWQgdG8gZnV0ZXggaGFzaCBwaXZvdGluZy5cblxuSSByZWFsbHkgbmVlZCB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2Agbm93LiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgaG93IHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQsIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgaXMgYSBsb3QgbW9yZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MDIuODU0MDI5NDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5NjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MDIuOTY1NzMwNDc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1OTU2NTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYF9fZnV0ZXhfcGl2b3RfaGFzaGAuIFJpZ2h0IGF3YXksIEknbSBzZWVpbmcgdGhpcyBpcyBhbGwgYWJvdXQgZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZy4gVGhhdCdzIGEgY29yZSBrZXJuZWwgYXJlYSDigJMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBzY3JlYW1zIFwiZnV6emluZyBjYW5kaWRhdGVcIiB0byBtZS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmcuIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IG9uZS4gVGhlbiwgdGhlcmXigJlzIGBmdXRleF9waXZvdF9oYXNoYC4gSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGZ1dGV4X2hhc2hfZnJlZWAsIGJ1dCB0aGF0J3Mgbm90IGJlZW4gbW9kaWZpZWQsIHNvIGl0J3MgcHJvYmFibHkgbGVzcyByZWxldmFudCB0byB0aGlzIGNoYW5nZS5cblxuV2FpdCBhIHNlY29uZOKApiBMb29raW5nIGNsb3NlciwgYm90aCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBhcmUgbWFya2VkIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJIGNvdWxkIGhhdmUgbWlzc2VkIHNvbWV0aGluZywgYnV0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSB0cmlja2llciBmb3IgZXh0ZXJuYWwgZnV6emluZyBzaW5jZSB0aGV5IGhhdmUgbGltaXRlZCB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjA3LjUyNTI5OTQyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ2OTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjA3LjU4Njc3NTMwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTM5NTQwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGdXRleCBIYXNoaW5nIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBpbml0aWFsaXplZCwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gYWN0dWFsbHkgaGFwcGVucywgYW5kIGdpdmVuIHRoYXQsIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZnV0ZXhfaGFzaF9wcmN0bGAuIFRoYXQncyB3aGVyZSB0aGUgY29udHJvbCBwbGFuZSB3aWxsIGxpa2VseSBiZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGZyb20gdGhhdCBlbnRyeSBwb2ludCwgYW5kIHRoZW4gdHJhY2UgZnJvbSB0aGVyZSBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToxMS4xNDA3MzI5MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTg1NjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzc9bG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjc5OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05ND1zdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjk5OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjg4NC1cXHRjYXNlIFBSX0ZVVEVYX0hBU0g6XFxua2VybmVsL3N5cy5jOjI4ODU6XFx0XFx0ZXJyb3IgPSBmdXRleF9oYXNoX3ByY3RsKGFyZzIsIGFyZzMsIGFyZzQpO1xcbmtlcm5lbC9zeXMuYy0yODg2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToxMy41OTI1OTc1NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3OTEwMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGVsZW1lbnRzLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipEZWNvbnN0cnVjdGluZyBGdXRleCBIYXNoaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAuLi4gUmlnaHQsIHNvIHRoYXQncyAqZGVmaW5pdGVseSogYW4gZW50cnkgcG9pbnQsIGEgaG9vaywgc29tZXRoaW5nIHRoZSBrZXJuZWwgZXhwb3NlcyB0byB1c2VybGFuZCwgcHJvYmFibHkgdGhyb3VnaCBhIGBwcmN0bGAgY2FsbC4gR2l2ZW4gdGhlIG5hbWUsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNvbmZpZ3VyaW5nIG9yIG1hbmlwdWxhdGluZyB0aGUgZnV0ZXggaGFzaCB0YWJsZSDigJMgbGlrZWx5IHNldHRpbmcgc29tZSBwb2xpY3kgb3IgcGFyYW1ldGVyLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMgb3IgZG9jdW1lbnRhdGlvbiB0byBzZWUgKmV4YWN0bHkqIHdoYXQgdGhpcyBgcHJjdGxgIGRvZXMgd2l0aCBmdXRleGVzLiBJcyBpdCByZWxhdGVkIHRvIGNvbnRlbnRpb24gcHJvZmlsaW5nPyBNYXliZSBzZXR0aW5nIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSdkIGV4cGxvcmUuXG5cbkFuZCB0aGVuIHdlIGhhdmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgb3IgYWxsb2NhdGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGUgZnV0ZXggaGFzaCB0YWJsZS4gU291bmRzIGxpa2UgaXQncyB1c2VkIGlmIG5vdGhpbmcgZWxzZSBpcyBzcGVjaWZpZWQuIEknZCB3YW50IHRvIGNoZWNrIGlmIGl0J3MgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlmIGl0J3MgZG9uZSBsYXppbHksIG9uIGZpcnN0IGZ1dGV4IHVzZSwgb3Igc29tZSBvdGhlciBzdWNoIGNvbmRpdGlvbi4gSG93IGlzIHRoZSBzaXplIG9mIHRoZSB0YWJsZSBkZXRlcm1pbmVkPyBJcyB0aGF0IGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcz8gQW5kIGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBgcHJjdGxgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhleSB3b3JrIGFzIGEgcGFpciBzb21laG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MTcuODUwNTExMDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcyMTA3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjIwLjMyMjYyNjA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE2Mzc4MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gRlVURVhfUFJJVkFURV9IQVNIKipcblxuQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGlzIHRvIHVzZSBgRlVURVhfUFJJVkFURV9IQVNIYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBGVVRFWF9QUklWQVRFX0hBU0hgLi4uIGxldCdzIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGFuZCBob3cgaXQncyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLlwiIEl0J3MgYSByZWZsZXgsIHJlYWxseSwgdG8gdmVyaWZ5IHRoZSBmZWF0dXJlJ3MgYXZhaWxhYmlsaXR5IGFuZCBhbnkgZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW4uIE5lZWQgdG8gZ28gbG9vayBpbiB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUFJJVkFURV9IQVNIYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGVuYWJsZWQgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGluZyBpdCBlbnRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGltcGxpY2F0aW9ucy4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MjMuNTM5MDA2OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzI2MDA1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXFxuLS1cXG5pbml0L0tjb25maWctMTg0OC1cXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToyNS43NzE2MTE2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MTcxOTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyByZXF1ZXN0OlxuXG4qKkFuYWx5emluZyB0aGUgUXVlcnk6IFwiV2hhdCBTZWxlY3RzIEZVVEVYX1BSSVZBVEVfSEFTSD9cIioqXG5cblJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMgZXNzZW50aWFsbHksIFwiV2hhdCBjb2RlIG9yIHByb2Nlc3MgaW4gdGhlIHN5c3RlbSBpcyAqY2hvb3NpbmcqIHRvIHV0aWxpemUgdGhlIGBGVVRFWF9QUklWQVRFX0hBU0hgIGZlYXR1cmU/XCIuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB3aGVyZSBpdCdzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSBpdCdzIGJlaW5nICp1c2VkKiBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBkZWNpc2lvbi1tYWtpbmcgcG9pbnQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgcmVsYXRlZCB0byBmYXN0IHVzZXItc3BhY2UgbXV0ZXhlcyAoZnV0ZXhlcykgYW5kIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhlbS4gSXQgc3VnZ2VzdHMgYSBoYXNoZWQgaW1wbGVtZW50YXRpb24gZm9yIHByaXZhdGUgZnV0ZXhlcy4gVGhlcmVmb3JlLCBJIGtub3cgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIGZ1dGV4IGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBwcml2YXRlIG5hbWVzcGFjZS4gTm93LCBJIGhhdmUgdG8gdGhpbms6XG5cbiogICAqKkNvcmUgRnV0ZXggQ29kZToqKiBJIG5lZWQgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZ1dGV4IGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgZGVhbGluZyB3aXRoIGZ1dGV4IHN5c2NhbGxzIChlLmcuLCBgZnV0ZXguY2Agb3Igc2ltaWxhcikuIEkgd291bGQgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHRoYXQgaGFuZGxlcyBgRlVURVhfUFJJVkFURV9IQVNIYCBzZWxlY3Rpb24gaW4gdGhlIHBhdGggd2hlcmUgZnV0ZXggc3lzY2FsbHMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRoaXMgd291bGQgYmUgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gb3Igc2VsZWN0aW9uIGxvZ2ljLlxuKiAgICoqS2VybmVsIENvbmZpZ3VyYXRpb246KiogSXMgdGhpcyBzZWxlY3Rpb24gY29udHJvbGxlZCBieSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiAobGlrZSBhIGAjZGVmaW5lYCBvciBhIGBDT05GSUdfYCBvcHRpb24gaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMpPyBJZiBzbywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IG9wdGlvbiB0byBpdHMgdXNlIGluIHRoZSBjb2RlLiBJIHdvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgdXNpbmcgZ3JlcCwgYW5kIHNlZSBpZiBpdCdzIHRoZXJlLlxuKiAgICoqUnVudGltZSBUdW5pbmc6KiogQ291bGQgaXQgYmUgZHluYW1pY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gc29tZSBydW50aW1lIHBhcmFtZXRlciBvciBzeXN0ZW0gY2hhcmFjdGVyaXN0aWMgKGUuZy4sIGF2YWlsYWJsZSBtZW1vcnksIG51bWJlciBvZiBDUFVzLCB0eXBlIG9mIHByb2Nlc3Nvcik/IElmIHNvLCBJJ2QgbmVlZCB0byBsb29rIGZvciBjb2RlIHRoYXQgY2hlY2tzIHRob3NlIGZhY3RvcnMgYW5kIG1ha2VzIHRoZSBkZWNpc2lvbi5cbiogICAqKkxpYnJhcmllcyBcdTAwMjYgZ2xpYmM6KiogSXMgdGhpcyBzb21ldGhpbmcgaW4gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSAoZ2xpYmMpIHRoYXQncyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uIGJlaGFsZiBvZiB1c2VyLXNwYWNlIHByb2Nlc3Nlcz8gSWYgc28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnV0ZXgtcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIHBhdGggdGhhdCBkZWFscyB3aXRoIHRoZSAqY3JlYXRpb24qIG9yICppbml0aWFsaXphdGlvbiogb2YgdGhlc2UgcHJpdmF0ZSBmdXRleGVzLiBXaGVyZSBpcyB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBob3cgdG8gaGFuZGxlIHRoZSBmdXRleD9cblxuTXkgcGxhbiBpcyB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSwgc3RhcnRpbmcgd2l0aCB0aGUgY29yZSBmdXRleCBmaWxlcywgYW5kIGZvbGxvd2luZyB0aGUgY2FsbHMgdGhhdCBoYW5kbGUgdGhlIHByaXZhdGUgZnV0ZXggbmFtZXNwYWNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGNvbmZpZ3VyYXRpb24gY2hlY2tzLCBvciBvdGhlciBkZWNpc2lvbi1tYWtpbmcgbG9naWMgdGhhdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBzZWxlY3Rpb24gb2YgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEknbSByZWFkeSB0byB1c2UgdG9vbHMgbGlrZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjMyLjQzMzMzNDI4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MDQ3OTE0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjM0LjcyMzgyMTYyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5MTM3MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBGVVRFWF9QUklWQVRFX0hBU0hgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGZ1enp5LiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODQ5IOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBncm91cGVkIG9yIGRlZmluZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmZWF0dXJlIGdldHMgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBkZWZhdWx0IHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQtdGltZSBjaGFyYWN0ZXJpc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MTozNy43MzI5NjE0MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcbjE4NTQ6XFx0Y29uZmlnIEZVVEVYX01QT0xcXG4xODU1OlxcdFxcdGJvb2xcXG4xODU2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgTlVNQVxcbjE4NTc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1ODpcXHRcXG4xODU5OlxcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODYwOlxcdFxcdGJvb2xcXG4xODYxOlxcdFxcbjE4NjI6XFx0Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODYzOlxcdFxcdGRlZl9ib29sIEZVVEVYIFxcdTAwMjZcXHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFxcdTAwMjZcXHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFxcdTAwMjZcXHUwMDI2IFJTRVEgXFx1MDAyNlxcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuMTg2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MzcuNzMzMTM3NDM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDE2MDMxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZVVEVYIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBpZiBgRlVURVhgLCBhbmQgbm90IGBCQVNFX1NNQUxMYCwgYW5kIHRoZXJlJ3MgYW4gYE1NVWAsIHRoZW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdGhhdCBgeWAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gU28sIHJlYWxseSwgSSBkb24ndCAqaGF2ZSogdG8gZXhwbGljaXRseSBhZGQgaXQgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgaXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byB0aHJvdyBpbiBgRlVURVhgIGluIHRoZXJlLCBqdXN0IGZvciBjbGFyaXR5J3Mgc2FrZSwgYWx0aG91Z2ggdXN1YWxseSBgRlVURVhgIGlzIGVuYWJsZWQgYW55d2F5LiBXYWl0IGEgbWludXRlLi4uIHllcywgYWRkaW5nIGBGVVRFWGAgaXMgYSBnb29kIGNhbGwsIGZvciBlbXBoYXNpcy5cblxuSGFuZyBvbi4uLiBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGEgY29uZmlnIGZsYWcuIEkgY2FuIGFkZCBgRlVURVhfUFJJVkFURV9IQVNIYCB0byBFbmFibGVDb25maWdzLCB0b28uXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkndmUgZ290IGEgY29tcGxldGUgcGljdHVyZSwgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gQWgsIEkgc2VlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuLi4gd2FpdCwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gUmlnaHQsIHJpZ2h0LiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbj8gTmVlZCB0byBiZSBzdXJlIEkndmUgZ290IHRoZSBmdWxsIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NDIuOTc0NzQyNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgxMjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjQzLjA2ODU2MDUyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk1NjI0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRnV0ZXggSGFzaGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIGJlLiBIbW0sIGJ1dCBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBfX2Z1dGV4X3Bpdm90X2hhc2hgIGFuZCBgZnV0ZXhfcGl2b3RfaGFzaGAgYXMgd2VsbC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGZ1dGV4X3Bpdm90X2hhc2hgIGlzIGJlaW5nIGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSB0aGlzIG11Y2ggY2xlYXJlci4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NDcuMDY0MTg2Njg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzMDcwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk1OnN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjE5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjI4OlxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNTY6XFx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXFx0Z290byBhZ2FpbjtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzI6XFx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXFx1MDAzZXByaXZhdGUubW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjczLVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVxcdCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3OlxcdCAqIGZ1dGV4X2hhc2goKVxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk4LVxcdCAqICAgZ3VhcmQocmN1KTtcXHRcXHQgIGd1YXJkKG1tLVxcdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVxcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk2LVxcdCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzMTpcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMyLVxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjQ3LjE3NDQ5NzY2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjExODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGZ1dGV4X2hhc2ggYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGZ1dGV4X3Bpdm90X2hhc2hgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLiBNYWtlcyBzZW5zZSwgYGZ1dGV4X2hhc2hgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBoYXNoaW5nIGZ1dGV4IGtleXMsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYSBjb3JlIGZ1dGV4IGZ1bmN0aW9uIHNpbmNlIGl0J3MgdXNlZCBzbyBtYW55IHBsYWNlcy5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlOiBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBgZnV0ZXhfaGFzaGAsIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBmdXRleF9oYXNoYCBhY3R1YWxseSBhbiBleHBvcnRlZCBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NTEuMjM4MTEyMjk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgwODM1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYy01NS0gKiBUaGUgYmFzZSBvZiB0aGUgYnVja2V0IGFycmF5IGFuZCBpdHMgc2l6ZSBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXJcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjU2OiAqIChhZnRlciBpbml0aWFsaXphdGlvbiBvbmx5IGluIGZ1dGV4X2hhc2goKSksIHNvIGVuc3VyZSB0aGF0IHRoZXlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTU3LSAqIHJlc2lkZSBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTU5PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy02MS1cXHR1bnNpZ25lZCBpbnRcXHRcXHQgaGFzaHNoaWZ0O1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjI6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpxdWV1ZXNbTUFYX05VTU5PREVTXTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTYzLX0gX19mdXRleF9kYXRhIF9fcmVhZF9tb3N0bHkgX19hbGlnbmVkKDIqc2l6ZW9mKGxvbmcpKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTY0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjU6I2RlZmluZSBmdXRleF9oYXNobWFza1xcdChfX2Z1dGV4X2RhdGEuaGFzaG1hc2spXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo2NjojZGVmaW5lIGZ1dGV4X2hhc2hzaGlmdFxcdChfX2Z1dGV4X2RhdGEuaGFzaHNoaWZ0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjctI2RlZmluZSBmdXRleF9xdWV1ZXNcXHQoX19mdXRleF9kYXRhLnF1ZXVlcylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9Njk9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0LVxcdGJvb2xcXHRcXHRjdXN0b207XFxua2VybmVsL2Z1dGV4L2NvcmUuYzo3NTpcXHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgcXVldWVzW107XFxua2VybmVsL2Z1dGV4L2NvcmUuYy03Ni19O1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMjM9bGF0ZV9pbml0Y2FsbChmYWlsX2Z1dGV4X2RlYnVnZnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMjk6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE0ND12b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNDktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTA6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTE6X19mdXRleF9oYXNoX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjQ6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYl9vbGQsICpoYl9uZXc7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjUtXFx0dW5zaWduZWQgaW50IHNsb3RzID0gb2xkLVxcdTAwM2VoYXNoX21hc2sgKyAxO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODA6XFx0XFx0XFx0aGJfbmV3ID0gX19mdXRleF9oYXNoKFxcdTAwMjZ0aGlzLVxcdTAwM2VrZXksIG5ldywgTlVMTCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODEtXFx0XFx0XFx0ZnV0ZXhfaGJfd2FpdGVyc19pbmMoaGJfbmV3KTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjM4LVxcdCAqIG9idGFpbmVkIG9uY2UgdGhlIGxhc3QgdXNlciBkcm9wcGVkIGl0J3MuXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzk6XFx0ICogSW4gdGhhdCBjYXNlIHdlIGJsb2NrIG9uIG1tX3N0cnVjdDo6ZnV0ZXhfaGFzaF9sb2NrIGFuZCBlaXRoZXIgaGF2ZVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjQwLVxcdCAqIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50IG9yIHdhaXQgd2hpbGUgc29tZW9uZSBlbHNlIGlzIGRvaW5nIHRoZVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NC1cXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGggPSBOVUxMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY1OlxcdFxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjYtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjc6XFx0XFx0aGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBcXHUwMDI2ZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2OC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6Mjc4OnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzkte1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgwOlxcdHJldHVybiAoc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYpeyAuaGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBOVUxMKSwgLmZwaCA9IE5VTEwgfTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4MS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM0Nz1zdGF0aWMgaW50IGZ1dGV4X21wb2woc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzU0LS8qKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzU1OiAqIF9fZnV0ZXhfaGFzaCAtIFJldHVybiB0aGUgaGFzaCBidWNrZXRcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM1Ni0gKiBAa2V5OlxcdFBvaW50ZXIgdG8gdGhlIGZ1dGV4IGtleSBmb3Igd2hpY2ggdGhlIGhhc2ggaXMgY2FsY3VsYXRlZFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjYtICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjc6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjg6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM3OS1cXHRcXHRcXHRcXHQqZnBoX3AgPSBmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzozODA6XFx0XFx0XFx0cmV0dXJuIF9fZnV0ZXhfaGFzaF9wcml2YXRlKGtleSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM4MS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5Ny1cXHRcXHQgKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM5ODpcXHRcXHRub2RlID0gKGhhc2ggXFx1MDAzZVxcdTAwM2UgZnV0ZXhfaGFzaHNoaWZ0KSAlIG5yX25vZGVfaWRzO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzk5LVxcdFxcdGlmICghbm9kZV9wb3NzaWJsZShub2RlKSkge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy00MDMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo0MDQ6XFx0cmV0dXJuIFxcdTAwMjZmdXRleF9xdWV1ZXNbbm9kZV1baGFzaCBcXHUwMDI2IGZ1dGV4X2hhc2htYXNrXTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTQwNS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTczOD1pbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1Ny0gKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc1ODpzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTc3Nj12b2lkIHdhaXRfZm9yX293bmVyX2V4aXRpbmcoaW50IHJldCwgc3RydWN0IHRhc2tfc3RydWN0ICpleGl0aW5nKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDAtLyoqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4MDE6ICogX19mdXRleF91bnF1ZXVlKCkgLSBSZW1vdmUgdGhlIGZ1dGV4X3EgZnJvbSBpdHMgZnV0ZXhfaGFzaF9idWNrZXRcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwMi0gKiBAcTpcXHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTgwNj12b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwNy17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4MDg6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwOS1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODEzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODE0OlxcdGhiID0gY29udGFpbmVyX29mKHEtXFx1MDAzZWxvY2tfcHRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQsIGxvY2spO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtODE1LVxcdHBsaXN0X2RlbChcXHUwMDI2cS1cXHUwMDNlbGlzdCwgXFx1MDAyNmhiLVxcdTAwM2VjaGFpbik7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgxOS0vKiBUaGUga2V5IG11c3QgYmUgYWxyZWFkeSBzdG9yZWQgaW4gcS1cXHUwMDNla2V5LiAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODIwOnZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODIxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODM4OnZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTg0My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjg0NDp2b2lkIF9fZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NDUtXFx0XFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjQtLyoqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4NjU6ICogZnV0ZXhfdW5xdWV1ZSgpIC0gUmVtb3ZlIHRoZSBmdXRleF9xIGZyb20gaXRzIGZ1dGV4X2hhc2hfYnVja2V0XFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjYtICogQHE6XFx0VGhlIGZ1dGV4X3EgdG8gdW5xdWV1ZVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzQxPXN0YXRpYyB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzNDctXFx0LypcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzNDg6XFx0ICogVGhlIG11dGV4IG1tX3N0cnVjdDo6ZnV0ZXhfaGFzaF9sb2NrIG1pZ2h0IGJlIGFjcXVpcmVkLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM0OS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2MD12b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU2Ni1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1Njc6c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Njgte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5Ni1cXHQgKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcXHQgKiBmdXRleF9oYXNoKClcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2goKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cXHQgKiAgIGd1YXJkKHJjdSk7XFx0XFx0ICBndWFyZChtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXFx0ICpcXHRcXHRcXHRcXHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlxcdCAqXFx0XFx0XFx0XFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVxcdCAqXFx0XFx0XFx0XFx0ICBmdXRleF9yZWZfZHJvcCgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NTQ9c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzY1LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc2NjpzdGF0aWMgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc2Ny17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzczOnZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc3NC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4MDQ6c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODA1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpiKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODcwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBoYXNoX3Nsb3RzOyBpKyspXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODcxOlxcdFxcdGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoXFx1MDAyNmZwaC1cXHUwMDNlcXVldWVzW2ldKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzItXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MTMtXFx0XFx0XFx0XFx0ICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTE0OlxcdFxcdFxcdFxcdGlmIChmdXRleF9oYXNoX2xlc3MobmV3LCBmcGgpKSB7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTE1LVxcdFxcdFxcdFxcdFxcdGZyZWUgPSBuZXc7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTYyLVxcdGJ1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oNCAqIHRocmVhZHMpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2MzpcXHRidWNrZXRzID0gY2xhbXAoYnVja2V0cywgMTYsIGZ1dGV4X2hhc2htYXNrICsgMSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY0LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcXHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NzE6c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGFzaF9pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTg1LSNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTgte1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxOTpcXHRmdXRleF9oYXNoX2luaXRfbW0oXFx1MDAyNm1tLVxcdTAwM2VmdXRleCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIwLVxcdGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4KTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzYtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIX0dFVF9TTE9UUzpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzc6XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9nZXRfc2xvdHMoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwNDc9c3RhdGljIGludCBfX2luaXQgZnV0ZXhfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDYwLSNlbmRpZlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA2MTpcXHRmdXRleF9oYXNoc2hpZnQgPSBpbG9nMihoYXNoc2l6ZSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYyOlxcdHNpemUgPSBzaXplb2Yoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0KSAqIGhhc2hzaXplO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2My1cXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2NS1cXHRmb3JfZWFjaF9ub2RlKG4pIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwNjY6XFx0XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICp0YWJsZTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzUtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhhc2hzaXplOyBpKyspXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDc2OlxcdFxcdFxcdGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoXFx1MDAyNnRhYmxlW2ldKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwODAtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDgxOlxcdGZ1dGV4X2hhc2htYXNrID0gaGFzaHNpemUgLSAxO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA4Mi1cXHRwcl9pbmZvKFxcXCJmdXRleCBoYXNoIHRhYmxlIGVudHJpZXM6ICVsdSAoJWx1IGJ5dGVzIG9uICVkIE5VTUEgbm9kZXMsIHRvdGFsICVsdSBLaUIsICVzKS5cXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0xMzc9c3RhdGljIGlubGluZSBib29sIGZ1dGV4X2tleV9pc19wcml2YXRlKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMTUwLSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjE1MTpzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQge1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1Mi1cXHRhdG9taWNfdCB3YWl0ZXJzO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQxPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIHtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDI6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDMtXFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCkgeyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTQtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU1OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjU3PURFRklORV9DTEFTUyhoYnIsIHN0cnVjdCBmdXRleF9idWNrZXRfcmVmLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OC1cXHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTk6XFx0ICAgICBmdXRleF9oYXNoKGtleSksIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yODc9ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mjg4OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjg5LVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzA4PWV4dGVybiB2b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzA5OmV4dGVybiB2b2lkIF9fZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEwLVxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzExPWV4dGVybiBpbnQgZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTMtLyoqXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzE0OiAqIGZ1dGV4X3F1ZXVlKCkgLSBFbnF1ZXVlIHRoZSBmdXRleF9xIG9uIHRoZSBmdXRleF9oYXNoX2J1Y2tldFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxNS0gKiBAcTpcXHRUaGUgZnV0ZXhfcSB0byBlbnF1ZXVlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjctICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzI4OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTM0MD1leHRlcm4gdm9pZCB3YWl0X2Zvcl9vd25lcl9leGl0aW5nKGludCByZXQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXhpdGluZyk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDQtICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2luYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM0Ni17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNTktICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzYwOnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2RlYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzY3OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hiX3dhaXRlcnNfcGVuZGluZyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2OC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNzktXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzgwOmV4dGVybiB2b2lkIGZ1dGV4X3FfbG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODEtXFx0X19hY3F1aXJlcyhcXHUwMDI2aGItXFx1MDAzZWxvY2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODMtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg0OmV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg1LVxcdF9fcmVsZWFzZXMoXFx1MDAyNmhiLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVxcdFxcdFxcdFxcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDAyPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQwMzpkb3VibGVfbG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDA0LVxcdF9fYWNxdWlyZXMoXFx1MDAyNmhiMS1cXHUwMDNlbG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTQxNj1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0MTc6ZG91YmxlX3VubG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDE4LVxcdF9fcmVsZWFzZXMoXFx1MDAyNmhiMS1cXHUwMDNlbG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTQ3Nj1zdGF0aWMgaW50IGxvY2tfcGlfdXBkYXRlX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHUzMiBuZXd2YWwpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTUtICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTE2OmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTctXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03NT1zdGF0aWMgaW5saW5lXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo3Njp2b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Nzc6XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MilcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc4LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjkxOlxcdFxcdCAqIGhiMSBhbmQgaGIyIGJlbG9uZyB0byB0aGUgc2FtZSBmdXRleF9oYXNoX2J1Y2tldF9wcml2YXRlXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05Mi1cXHRcXHQgKiBiZWNhdXNlIGlmIHdlIG1hbmFnZWQgZ2V0IGEgcmVmZXJlbmNlIG9uIGhiMSB0aGVuIGl0IGNhbid0IGJlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMzE6XFx0XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTIzMi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MD1zdGF0aWMgaW50XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyODE6ZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWModTMyIF9fdXNlciAqcGlmdXRleCwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyODI6XFx0XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MSxcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI4My1cXHRcXHRcXHQgICB1bmlvbiBmdXRleF9rZXkgKmtleTIsIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTI9c3RhdGljIGlubGluZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzEzOmludCBoYW5kbGVfZWFybHlfcmVxdWV1ZV9waV93YWtldXAoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTcxNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnV0ZXhfcSAqcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NTEuMzA1OTI1ODcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI0NjczMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBgZnV0ZXhfaGFzaGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnV0ZXhfaGFzaGAuIEl0J3MgZmxhZ2dlZCBhcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKj8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1vZHVsZSBpbnRlcmFjdGlvbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQuIEFoLCByaWdodCwgaXQncyAqbm90KiBleHBvcnRlZCB0byBtb2R1bGVzLCBidXQgaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGl0c2VsZiB3aXRoaW4gdGhhdCBjb3JlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjU0LjU5ODM5NTk5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDE5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjYwOnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjU0LjY4MjQ0MzcwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM0MTYzNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggSGFzaCBQaXZvdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgc3ltYm9scy4gSSBzZWUgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYGZ1dGV4X2hhc2hgLCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLiBcblxuUmlnaHQsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIGNhbGxlZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGZyb20gYGNvcHlfcHJvY2Vzc2Agd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgYW5kIGBmdXRleF9oYXNoX3ByY3RsYCBpcyB0cmlnZ2VyZWQgYnkgYHN5c19wcmN0bGAuIFRoZXNlIGxvb2sgbGlrZSBzb2xpZCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIHNvbGUgZW5hYmxlci4gWWVwLCBpdCBpcy4gQnV0LCBob2xkIG9uLi4uIGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gYEZVVEVYYC4gU28sIGJvdGggYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy5cblxuTGV0J3MgcmUtZXhhbWluZSB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIG1vZGlmeSBgX19mdXRleF9waXZvdF9oYXNoYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBjb25uZWN0ZWQgdG8gdGhlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIG9mIHRoZSBwcml2YXRlIGhhc2ggdGFibGUuIFxuXG5GdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgaW52b2x2ZTpcblxuMS4gIEludHJvZHVjaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGBtbXBoLVx1MDAzZWhhc2hfbmV3YC5cbjIuICBSZXBsYWNpbmcgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCB3aXRoIGBndWFyZChyY3UpKClgIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC5cbjMuICBBZGRpbmcgYHNtcF9ybWIoKWAgd2l0aGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcuIENvbnNpZGVyaW5nIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cblRvIHN1bW1hcml6ZSwgaGVyZSBhcmUgdGhlIGZvY3VzZWQgc3ltYm9scyBhZ2Fpbjpcbi0gICBgZnV0ZXhfaGFzaF9wcmN0bGBcbi0gICBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YFxuLSAgIGBmdXRleF9oYXNoYFxuLSAgIGBmdXRleF9wcml2YXRlX2hhc2hgXG5cbldhaXQgYSBtaW51dGUsIGlzIGBmdXRleF9wcml2YXRlX2hhc2hgIGFsc28gZ2xvYmFsPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MjowMS41MTY2MTA3MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggXFxcXCpmdXRleF9wcml2YXRlX2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzM6c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDEuNTc4NDIwODk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzQzMDc4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV0ZXggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCBnb29kIHRvIGNvbmZpcm0uIE5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBwcmV0dHkgY2xlYXI6IGBGVVRFWF9QUklWQVRFX0hBU0hgIGhpbmdlcyBvbiBgRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVgLiBHaXZlbiB0aGF0IHdlIGhhdmUgYEZVVEVYYCwgdGhhdCBtZWFucywgaWYgYWxsIGlzIGNvcnJlY3QsIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IG1vZGlmeWluZyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljICp3aXRoaW4qIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUncyBwaXZvdGluZyBtZWNoYW5pc20uIFRoZXkncmUgdG91Y2hpbmcgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIHNvIGl0IHNlZW1zIHF1aXRlIGxvdy1sZXZlbC4gVGhlIG1haW4gY2hhbmdlIGlzIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBhbmQgbWVtb3J5IGJhcnJpZXJzLCBzcGVjaWZpY2FsbHkgYHNtcF9ybWJgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpbmRpY2F0ZXMgYW4gYXR0ZW1wdCB0byBvcHRpbWl6ZSBvciBwb3RlbnRpYWxseSBmaXggcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgcHJvY2Vzc2VzIG9mIHRoZSBmdXRleCBoYXNoLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhIVxuXG5CZWNhdXNlIHRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIGFuZCBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgb3IgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIGl0IG1ha2VzIHRoZW0gYSBoaWdoLXByaW9yaXR5IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoOlxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgIC0gQWJzb2x1dGVseSwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcImZ1dGV4X2hhc2hfcHJjdGxcIiwgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIiwgXCJmdXRleF9oYXNoXCIsIFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCJdYCAtIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMuXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkZVVEVYXCIsIFwiRlVURVhfUFJJVkFURV9IQVNIXCJdYCAtIFRoZXNlIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyB0byBiZSByZWxldmFudC5cbiogICBgUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cImAgLSBUaGUgcmF0aW9uYWxlIGJlaGluZCBteSBjaG9pY2VzIGlzIG91dGxpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5OSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguMzUyNzMxMjQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjIyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCIsXG4gICAgXCJmdXRleF9wcml2YXRlX2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCIsXG4gICAgXCJmdXRleF9wcml2YXRlX2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguNDc4MzYwNjU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNzc5NjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQyOjA4LjQ3ODg5NDE3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDMyNzI1ODA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguNDc4ODk0ODY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzI3MjI5MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmN1cnJlbmN5IEZpeDogRnV0ZXggQ29yZSBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBvcHRpbWl6YXRpb24uIFRoZXkncmUgY2hhbmdpbmcgdGhlIHdheSBgbW1waC1cdTAwM2VoYXNoX25ld2AgKG9yIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkgaXMgYWNjZXNzZWQuIEl0J3MgYWxsIGFib3V0IGF0b21pY2l0eSBhbmQgbWVtb3J5IGJhcnJpZXJzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAuICBUaGlzIGlzIGEgdGV4dGJvb2sgdGVjaG5pcXVlIGZvciBlbnN1cmluZyBhdG9taWMgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZXMgYWNyb3NzIENQVXMsIHByZXZlbnRpbmcgdGVhcmluZyBvciBpbmNvcnJlY3QgdmFsdWVzIGR1ZSB0byBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYC4gVGhleSd2ZSBzd2FwcGVkIGEgbXV0ZXggKGBndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKWApIGZvciBhbiBSQ1UgKGBndWFyZChyY3UpKCk7YCksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdCB0byByZWR1Y2UgbG9jayBjb250ZW50aW9uIGFuZCBpdCdzIGFjY29tcGFuaWVkIGJ5IGFuIGBzbXBfcm1iKClgIG1lbW9yeSBiYXJyaWVyLiBUaGUgYHNtcF9ybWIoKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY2FsbHMgZW5zdXJlIHRoYXQgaWYgdGhlIG5ldyBoYXNoIGlzIHNlZW4sIHNvIGlzIHRoZSBjbGVhcmVkIHBvaW50ZXIuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246XG5cbiogICBUaGUgY29kZSBpcyByZXBsYWNpbmcgYG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7YCB3aXRoIGBXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7YFxuKiAgIEFuZCBgbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO2Agd2l0aCBgV1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7YFxuKiAgIEluIGBmdXRleF9waXZvdF9wZW5kaW5nKClgLCB0aGV5IHN3aXRjaCBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBpbnRyb2R1Y2UgYW4gYHNtcF9ybWIoKWAgYWZ0ZXIgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCBhbmQgYFJFQURfT05DRSgpYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUgb3JkZXJpbmcgb2YgdGhlIG1lbW9yeSBhY2Nlc3MuXG5cblRoZXJlIGFyZSBubyBtYWpvciBhcmNoaXRlY3R1cmFsIGNoYW5nZXMsIG5vIG5ldyBhbGxvY2F0aW9ucywgYW5kIG5vdGhpbmcgdXNlci1zcGFjZSB2aXNpYmxlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgZnV0ZXggaW1wbGVtZW50YXRpb24uXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyBpcyBjb25maW5lZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcywgYWxsIG9mIHdoaWNoIHNob3VsZCBiZSByZWFkaWx5IGRldGVjdGVkIGJ5IGV4aXN0aW5nIGtlcm5lbCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgcGF0Y2ggaXMgdW5saWtlbHkgdG8gZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG15IGZyaWVuZHMgaGVyZS4gU28sIG15IGNvbmNsdXNpb246IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCdzIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzLCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQyOjE4LjgwNjEyNzExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrfxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 06:39:22 +0000 UTC FinishedAt: 2026-08-13 06:42:20 +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", "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", "FUTEX_PRIVATE_HASH" ], "series_id": "d111d478-973f-4901-88c4-3a717b14dd0b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default", "futex_hash", "futex_private_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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuJiM0MztcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuJiM0MztcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbiYjNDM7XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVgmIzM0OywKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaCYjMzQ7LAogICAgJiMzNDtmdXRleF9wcml2YXRlX2hhc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3NjFiNGZmMzQzMjQzM2QzNWE0NWE5YTEzMjM2OTkzMjVjYWVmNjUyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NDA6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoKIAlmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtJmd0O2hhc2gsIGxvY2tkZXBfaXNfaGVsZCgmYW1wO21tcGgtJmd0O2xvY2spKTsKIAlpZiAoZnBoKSB7CiAJCWlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkgewotCQkJbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJV1JJVEVfT05DRShtbXBoLSZndDtoYXNoX25ldywgbmV3KTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkJZnBoID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwogCQlpZiAoZnBoKSB7Ci0JCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAkJCV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTsKIAkJfQogCX0KQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIApAQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQljdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLSZndDtmdXRleC5waGFzaC5oYXNoLAogCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoLmxvY2spKTsKIAkJbmV3ID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwotCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCiAJCWlmIChmcGgpIHsKIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhY3VyLSZndDtoYXNoX21hc2spIHsKQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCQkgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuCiAJCQkJICovCiAJCQkJZnJlZSA9IGZwaDsKLQkJCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIW5ldykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBmb2N1cyBvbiBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBgbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3YCBmaWVsZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXBsYWNpbmcgZGlyZWN0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlbnRpb24gdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcsIHdoaWNoIGlzIGNydWNpYWwgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIGtlcm5lbCBpdHNlbGYuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLi4uIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBtdXRleCBndWFyZCAoYGd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spYCkgaW4gZmF2b3Igb2YgUkNVIChgZ3VhcmQocmN1KSgpYCkuIEFoLCBzbyB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBvciBlbGltaW5hdGUgYSByYWNlIGNvbmRpdGlvbiBieSBsZXZlcmFnaW5nIFJDVS4gVGhlIGFkZGVkIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSBpbnZvbHZpbmcgbWVtb3J5IGJhcnJpZXJzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb25hbCBhbHRlcmF0aW9uLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gUkNVJiMzOTtzIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGlzIHZlcnkgc2hvcnQgYW5kIG1ha2VzIGl0IHZlcnkgZWZmaWNpZW50IGZvciBjb25jdXJyZW50IGFjY2Vzcy4gU28sIHRoaXMgbWlnaHQgYmUgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvciwgcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCBhIGNyaXRpY2FsIGJ1ZyBmaXggcmVsYXRlZCB0byBmdXRleCBoYXNoIHBpdm90aW5nLgoKSSByZWFsbHkgbmVlZCB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2Agbm93LiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgaG93IHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQsIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgaXMgYSBsb3QgbW9yZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X3Bpdm90X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3Ny1hZ2Fpbjpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcdFx0d2FpdF92YXJfZXZlbnQobW0sIGZ1dGV4X3Bpdm90X3BlbmRpbmcobW0pKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDEyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYF9fZnV0ZXhfcGl2b3RfaGFzaGAuIFJpZ2h0IGF3YXksIEkmIzM5O20gc2VlaW5nIHRoaXMgaXMgYWxsIGFib3V0IGZ1dGV4IGhhc2ggYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcuIFRoYXQmIzM5O3MgYSBjb3JlIGtlcm5lbCBhcmVhIOKAkyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6aW5nIGNhbmRpZGF0ZSYjMzQ7IHRvIG1lLgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgdGhlIGtleSBzeW1ib2xzIGZvciBmdXp6aW5nLiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgZGVmaW5pdGVseSBvbmUuIFRoZW4sIHRoZXJl4oCZcyBgZnV0ZXhfcGl2b3RfaGFzaGAuIEkgaW5pdGlhbGx5IHRob3VnaHQgYWJvdXQgaW5jbHVkaW5nIGBmdXRleF9oYXNoX2ZyZWVgLCBidXQgdGhhdCYjMzk7cyBub3QgYmVlbiBtb2RpZmllZCwgc28gaXQmIzM5O3MgcHJvYmFibHkgbGVzcyByZWxldmFudCB0byB0aGlzIGNoYW5nZS4KCldhaXQgYSBzZWNvbmTigKYgTG9va2luZyBjbG9zZXIsIGJvdGggYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgYXJlIG1hcmtlZCBzdGF0aWMuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgSSBjb3VsZCBoYXZlIG1pc3NlZCBzb21ldGhpbmcsIGJ1dCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBnZW5lcmFsbHkgdHJpY2tpZXIgZm9yIGV4dGVybmFsIGZ1enppbmcgc2luY2UgdGhleSBoYXZlIGxpbWl0ZWQgdmlzaWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cdCAqXHRcdFx0XHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlx0ICpcdFx0XHRcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVx0ICpcdFx0XHRcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4MS0jZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyBJbml0aWFsaXphdGlvbioqCgpSaWdodCwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCBpbml0aWFsaXplZCwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGFjdHVhbGx5IGhhcHBlbnMsIGFuZCBnaXZlbiB0aGF0LCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBmdXRleF9oYXNoX3ByY3RsYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29udHJvbCBwbGFuZSB3aWxsIGxpa2VseSBiZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBmcm9tIHRoYXQgZW50cnkgcG9pbnQsIGFuZCB0aGVuIHRyYWNlIGZyb20gdGhlcmUgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc3PWxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cdCAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo3OTppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTQ9c3RhdGljIGlubGluZSBsb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTk4LX1cbmluY2x1ZGUvbGludXgvZnV0ZXguaDo5OTpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTc9dm9pZCBmdXRleF9tbV9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAyNDppbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcbi0tXG5rZXJuZWwvc3lzLmM9MjUzND1TWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuLS1cbmtlcm5lbC9zeXMuYy0yODg0LVx0Y2FzZSBQUl9GVVRFWF9IQVNIOlxua2VybmVsL3N5cy5jOjI4ODU6XHRcdGVycm9yID0gZnV0ZXhfaGFzaF9wcmN0bChhcmcyLCBhcmczLCBhcmc0KTtcbmtlcm5lbC9zeXMuYy0yODg2LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGVsZW1lbnRzLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazoKCioqRGVjb25zdHJ1Y3RpbmcgRnV0ZXggSGFzaGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAuLi4gUmlnaHQsIHNvIHRoYXQmIzM5O3MgKmRlZmluaXRlbHkqIGFuIGVudHJ5IHBvaW50LCBhIGhvb2ssIHNvbWV0aGluZyB0aGUga2VybmVsIGV4cG9zZXMgdG8gdXNlcmxhbmQsIHByb2JhYmx5IHRocm91Z2ggYSBgcHJjdGxgIGNhbGwuIEdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gY29uZmlndXJpbmcgb3IgbWFuaXB1bGF0aW5nIHRoZSBmdXRleCBoYXNoIHRhYmxlIOKAkyBsaWtlbHkgc2V0dGluZyBzb21lIHBvbGljeSBvciBwYXJhbWV0ZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMgb3IgZG9jdW1lbnRhdGlvbiB0byBzZWUgKmV4YWN0bHkqIHdoYXQgdGhpcyBgcHJjdGxgIGRvZXMgd2l0aCBmdXRleGVzLiBJcyBpdCByZWxhdGVkIHRvIGNvbnRlbnRpb24gcHJvZmlsaW5nPyBNYXliZSBzZXR0aW5nIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHF1ZXN0aW9uIEkmIzM5O2QgZXhwbG9yZS4KCkFuZCB0aGVuIHdlIGhhdmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgaXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBvciBhbGxvY2F0aW5nIHRoZSBkZWZhdWx0IGluc3RhbmNlIG9mIHRoZSBmdXRleCBoYXNoIHRhYmxlLiBTb3VuZHMgbGlrZSBpdCYjMzk7cyB1c2VkIGlmIG5vdGhpbmcgZWxzZSBpcyBzcGVjaWZpZWQuIEkmIzM5O2Qgd2FudCB0byBjaGVjayBpZiBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgb3IgaWYgaXQmIzM5O3MgZG9uZSBsYXppbHksIG9uIGZpcnN0IGZ1dGV4IHVzZSwgb3Igc29tZSBvdGhlciBzdWNoIGNvbmRpdGlvbi4gSG93IGlzIHRoZSBzaXplIG9mIHRoZSB0YWJsZSBkZXRlcm1pbmVkPyBJcyB0aGF0IGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcz8gQW5kIGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBgcHJjdGxgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhleSB3b3JrIGFzIGEgcGFpciBzb21laG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byBGVVRFWF9QUklWQVRFX0hBU0gqKgoKQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGlzIHRvIHVzZSBgRlVURVhfUFJJVkFURV9IQVNIYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGBGVVRFWF9QUklWQVRFX0hBU0hgLi4uIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uLiYjMzQ7IEl0JiMzOTtzIGEgcmVmbGV4LCByZWFsbHksIHRvIHZlcmlmeSB0aGUgZmVhdHVyZSYjMzk7cyBhdmFpbGFiaWxpdHkgYW5kIGFueSBkZXBlbmRlbmNpZXMgYmVmb3JlIGRpdmluZyBpbi4gTmVlZCB0byBnbyBsb29rIGluIHRoZSBgS2NvbmZpZ2AgZm9yIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGVuYWJsZWQgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGluZyBpdCBlbnRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGltcGxpY2F0aW9ucy4gSnVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlVURVhfUFJJVkFURV9IQVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODQ0PWNvbmZpZyBGVVRFWF9QSVxuLS1cbmluaXQvS2NvbmZpZy0xODQ4LVxuaW5pdC9LY29uZmlnOjE4NDk6Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuaW5pdC9LY29uZmlnLTE4NTAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzIHJlcXVlc3Q6CgoqKkFuYWx5emluZyB0aGUgUXVlcnk6ICYjMzQ7V2hhdCBTZWxlY3RzIEZVVEVYX1BSSVZBVEVfSEFTSD8mIzM0OyoqCgpSaWdodCwgc28gdGhlIHF1ZXN0aW9uIGlzIGVzc2VudGlhbGx5LCAmIzM0O1doYXQgY29kZSBvciBwcm9jZXNzIGluIHRoZSBzeXN0ZW0gaXMgKmNob29zaW5nKiB0byB1dGlsaXplIHRoZSBgRlVURVhfUFJJVkFURV9IQVNIYCBmZWF0dXJlPyYjMzQ7LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHdoZXJlIGl0JiMzOTtzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSBpdCYjMzk7cyBiZWluZyAqdXNlZCogYXMgYSBzZWxlY3Rpb24gY3JpdGVyaW9uIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgdGhlIGRlY2lzaW9uLW1ha2luZyBwb2ludC4KCkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgcmVsYXRlZCB0byBmYXN0IHVzZXItc3BhY2UgbXV0ZXhlcyAoZnV0ZXhlcykgYW5kIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhlbS4gSXQgc3VnZ2VzdHMgYSBoYXNoZWQgaW1wbGVtZW50YXRpb24gZm9yIHByaXZhdGUgZnV0ZXhlcy4gVGhlcmVmb3JlLCBJIGtub3cgSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGF0IGNvZGUgcmVsYXRlZCB0byBmdXRleCBpbXBsZW1lbnRhdGlvbnMsIHNwZWNpZmljYWxseSB0aGUgb25lIHRoYXQgZGVhbHMgd2l0aCB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UuIE5vdywgSSBoYXZlIHRvIHRoaW5rOgoKKiAgICoqQ29yZSBGdXRleCBDb2RlOioqIEkgbmVlZCB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvcmUgZnV0ZXggaW1wbGVtZW50YXRpb24gaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHRoZSBmaWxlcyBkZWFsaW5nIHdpdGggZnV0ZXggc3lzY2FsbHMgKGUuZy4sIGBmdXRleC5jYCBvciBzaW1pbGFyKS4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNvZGUgdGhhdCBoYW5kbGVzIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNlbGVjdGlvbiBpbiB0aGUgcGF0aCB3aGVyZSBmdXRleCBzeXNjYWxscyBhcmUgaGFuZGxlZC4gSSBleHBlY3QgdGhpcyB3b3VsZCBiZSBzb21lIHNvcnQgb2YgY29uZmlndXJhdGlvbiBvciBzZWxlY3Rpb24gbG9naWMuCiogICAqKktlcm5lbCBDb25maWd1cmF0aW9uOioqIElzIHRoaXMgc2VsZWN0aW9uIGNvbnRyb2xsZWQgYnkgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24gKGxpa2UgYSBgI2RlZmluZWAgb3IgYSBgQ09ORklHX2Agb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzKT8gSWYgc28sIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBvcHRpb24gdG8gaXRzIHVzZSBpbiB0aGUgY29kZS4gSSB3b3VsZCBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHVzaW5nIGdyZXAsIGFuZCBzZWUgaWYgaXQmIzM5O3MgdGhlcmUuCiogICAqKlJ1bnRpbWUgVHVuaW5nOioqIENvdWxkIGl0IGJlIGR5bmFtaWNhbGx5IHNlbGVjdGVkIGJhc2VkIG9uIHNvbWUgcnVudGltZSBwYXJhbWV0ZXIgb3Igc3lzdGVtIGNoYXJhY3RlcmlzdGljIChlLmcuLCBhdmFpbGFibGUgbWVtb3J5LCBudW1iZXIgb2YgQ1BVcywgdHlwZSBvZiBwcm9jZXNzb3IpPyBJZiBzbywgSSYjMzk7ZCBuZWVkIHRvIGxvb2sgZm9yIGNvZGUgdGhhdCBjaGVja3MgdGhvc2UgZmFjdG9ycyBhbmQgbWFrZXMgdGhlIGRlY2lzaW9uLgoqICAgKipMaWJyYXJpZXMgJmFtcDsgZ2xpYmM6KiogSXMgdGhpcyBzb21ldGhpbmcgaW4gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSAoZ2xpYmMpIHRoYXQmIzM5O3MgbWFraW5nIHRoZSBkZWNpc2lvbiBvbiBiZWhhbGYgb2YgdXNlci1zcGFjZSBwcm9jZXNzZXM/IElmIHNvLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGZ1dGV4LXJlbGF0ZWQgZnVuY3Rpb25zIGFuZCB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBrZXJuZWwuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNvZGUgcGF0aCB0aGF0IGRlYWxzIHdpdGggdGhlICpjcmVhdGlvbiogb3IgKmluaXRpYWxpemF0aW9uKiBvZiB0aGVzZSBwcml2YXRlIGZ1dGV4ZXMuIFdoZXJlIGlzIHRoZSBkZXRlcm1pbmF0aW9uIG9mIGhvdyB0byBoYW5kbGUgdGhlIGZ1dGV4PwoKTXkgcGxhbiBpcyB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSwgc3RhcnRpbmcgd2l0aCB0aGUgY29yZSBmdXRleCBmaWxlcywgYW5kIGZvbGxvd2luZyB0aGUgY2FsbHMgdGhhdCBoYW5kbGUgdGhlIHByaXZhdGUgZnV0ZXggbmFtZXNwYWNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBjb25maWd1cmF0aW9uIGNoZWNrcywgb3Igb3RoZXIgZGVjaXNpb24tbWFraW5nIGxvZ2ljIHRoYXQgdWx0aW1hdGVseSBsZWFkcyB0byB0aGUgc2VsZWN0aW9uIG9mIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJJiMzOTttIHJlYWR5IHRvIHVzZSB0b29scyBsaWtlIGBncmVwYCwgYGNzY29wZWAsIG9yIGBjbGFuZ2RgIHRvIG5hdmlnYXRlIHRoZSBjb2RlIGVmZmljaWVudGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTAwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgRlVURVhfUFJJVkFURV9IQVNIYCBDb25maWd1cmF0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEkgdmFndWVseSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGl0LCBidXQgdGhlIHNwZWNpZmljcyBhcmUgZnV6enkuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODQ5IOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZ3JvdXBlZCBvciBkZWZpbmVkLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhhdCBmaWxlIGFuZCBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgZmVhdHVyZSBnZXRzIGVuYWJsZWQsIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgZGVmYXVsdCBzZXR0aW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkLXRpbWUgY2hhcmFjdGVyaXN0aWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdFx0Ym9vbFxuMTg0NjpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuMTg0NzpcdFx0ZGVmYXVsdCB5XG4xODQ4Olx0XG4xODQ5Olx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxuMTg1MDpcdFx0Ym9vbFxuMTg1MTpcdFx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuMTg1MjpcdFx0ZGVmYXVsdCB5XG4xODUzOlx0XG4xODU0Olx0Y29uZmlnIEZVVEVYX01QT0xcbjE4NTU6XHRcdGJvb2xcbjE4NTY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbjE4NTc6XHRcdGRlZmF1bHQgeVxuMTg1ODpcdFxuMTg1OTpcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcbjE4NjA6XHRcdGJvb2xcbjE4NjE6XHRcbjE4NjI6XHRjb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuMTg2MzpcdFx0ZGVmX2Jvb2wgRlVURVggXHUwMDI2XHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFx1MDAyNlx1MDAyNiBHRU5FUklDX0lSUV9FTlRSWSBcdTAwMjZcdTAwMjYgUlNFUSBcdTAwMjZcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4xODY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEZVVEVYIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gaWYgYEZVVEVYYCwgYW5kIG5vdCBgQkFTRV9TTUFMTGAsIGFuZCB0aGVyZSYjMzk7cyBhbiBgTU1VYCwgdGhlbiB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0aGF0IGB5YCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU28sIHJlYWxseSwgSSBkb24mIzM5O3QgKmhhdmUqIHRvIGV4cGxpY2l0bHkgYWRkIGl0IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIGl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gdGhyb3cgaW4gYEZVVEVYYCBpbiB0aGVyZSwganVzdCBmb3IgY2xhcml0eSYjMzk7cyBzYWtlLCBhbHRob3VnaCB1c3VhbGx5IGBGVVRFWGAgaXMgZW5hYmxlZCBhbnl3YXkuIFdhaXQgYSBtaW51dGUuLi4geWVzLCBhZGRpbmcgYEZVVEVYYCBpcyBhIGdvb2QgY2FsbCwgZm9yIGVtcGhhc2lzLgoKSGFuZyBvbi4uLiBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nLCBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBhIGNvbmZpZyBmbGFnLiBJIGNhbiBhZGQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgdG8gRW5hYmxlQ29uZmlncywgdG9vLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcGxldGUgcGljdHVyZSwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHN5bWJvbHMgYWZmZWN0ZWQuIEFoLCBJIHNlZSBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLi4uIHdhaXQsIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFJpZ2h0LCByaWdodC4gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVyZSAqYW55KiBvdGhlciBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24/IE5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEZ1dGV4IEhhc2hpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgdG8gYmUuIEhtbSwgYnV0IEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYF9fZnV0ZXhfcGl2b3RfaGFzaGAgYW5kIGBmdXRleF9waXZvdF9oYXNoYCBhcyB3ZWxsLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGZ1dGV4X3Bpdm90X2hhc2hgIGlzIGJlaW5nIGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSB0aGlzIG11Y2ggY2xlYXJlci4gVGltZSB0byBzdGFydCBkaWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9waXZvdF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTQtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIxOS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyMS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyODpcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cdFx0fVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cdH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjU2Olx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1Ny1cdGdvdG8gYWdhaW47XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNjA9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cdH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjcyOlx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXHUwMDNlcHJpdmF0ZS5tbSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3My1cdGdvdG8gYWdhaW47XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTYtXHQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3Olx0ICogZnV0ZXhfaGFzaCgpXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cdCAqICAgZ3VhcmQocmN1KTtcdFx0ICBndWFyZChtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTQtXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc5Ni1cdCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzAtXHRcdFx0ICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5MzE6XHRcdFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXHUwMDI2XHUwMDI2IGN1c3RvbSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMi1cdFx0XHRcdGdvdG8gYWdhaW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MTkKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgZnV0ZXhfaGFzaCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgZnV0ZXhfcGl2b3RfaGFzaGAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAuIE1ha2VzIHNlbnNlLCBgZnV0ZXhfaGFzaGAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGhhc2hpbmcgZnV0ZXgga2V5cywgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYSBjb3JlIGZ1dGV4IGZ1bmN0aW9uIHNpbmNlIGl0JiMzOTtzIHVzZWQgc28gbWFueSBwbGFjZXMuCgpTbywgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIHJpZ2h0IG5vdyBhcmU6IGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoYCwgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBmdXRleF9oYXNoYCBhY3R1YWxseSBhbiBleHBvcnRlZCBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgbWFrZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jLTU1LSAqIFRoZSBiYXNlIG9mIHRoZSBidWNrZXQgYXJyYXkgYW5kIGl0cyBzaXplIGFyZSBhbHdheXMgdXNlZCB0b2dldGhlclxua2VybmVsL2Z1dGV4L2NvcmUuYzo1NjogKiAoYWZ0ZXIgaW5pdGlhbGl6YXRpb24gb25seSBpbiBmdXRleF9oYXNoKCkpLCBzbyBlbnN1cmUgdGhhdCB0aGV5XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTU3LSAqIHJlc2lkZSBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz01OT1zdGF0aWMgc3RydWN0IHtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTYxLVx0dW5zaWduZWQgaW50XHRcdCBoYXNoc2hpZnQ7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjYyOlx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpxdWV1ZXNbTUFYX05VTU5PREVTXTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjMtfSBfX2Z1dGV4X2RhdGEgX19yZWFkX21vc3RseSBfX2FsaWduZWQoMipzaXplb2YobG9uZykpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy02NC1cbmtlcm5lbC9mdXRleC9jb3JlLmM6NjU6I2RlZmluZSBmdXRleF9oYXNobWFza1x0KF9fZnV0ZXhfZGF0YS5oYXNobWFzaylcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjY6I2RlZmluZSBmdXRleF9oYXNoc2hpZnRcdChfX2Z1dGV4X2RhdGEuaGFzaHNoaWZ0KVxua2VybmVsL2Z1dGV4L2NvcmUuYy02Ny0jZGVmaW5lIGZ1dGV4X3F1ZXVlc1x0KF9fZnV0ZXhfZGF0YS5xdWV1ZXMpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz02OT1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoIHtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0LVx0Ym9vbFx0XHRjdXN0b207XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc1Olx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0IHF1ZXVlc1tdO1xua2VybmVsL2Z1dGV4L2NvcmUuYy03Ni19O1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTIzPWxhdGVfaW5pdGNhbGwoZmFpbF9mdXRleF9kZWJ1Z2ZzKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEyOC1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTI5OnN0YXRpYyBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE0ND12b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQ5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTA6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1MTpfX2Z1dGV4X2hhc2hfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTIte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2NDpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGJfb2xkLCAqaGJfbmV3O1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjUtXHR1bnNpZ25lZCBpbnQgc2xvdHMgPSBvbGQtXHUwMDNlaGFzaF9tYXNrICYjNDM7IDE7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4MDpcdFx0XHRoYl9uZXcgPSBfX2Z1dGV4X2hhc2goXHUwMDI2dGhpcy1cdTAwM2VrZXksIG5ldywgTlVMTCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MS1cdFx0XHRmdXRleF9oYl93YWl0ZXJzX2luYyhoYl9uZXcpO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzOC1cdCAqIG9idGFpbmVkIG9uY2UgdGhlIGxhc3QgdXNlciBkcm9wcGVkIGl0JiMzOTtzLlxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzk6XHQgKiBJbiB0aGF0IGNhc2Ugd2UgYmxvY2sgb24gbW1fc3RydWN0OjpmdXRleF9oYXNoX2xvY2sgYW5kIGVpdGhlciBoYXZlXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI0MC1cdCAqIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50IG9yIHdhaXQgd2hpbGUgc29tZW9uZSBlbHNlIGlzIGRvaW5nIHRoZVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjYxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NC1cdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoID0gTlVMTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY1Olx0XHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjYtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2NzpcdFx0aGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBcdTAwMjZmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3ODpzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzkte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyODA6XHRyZXR1cm4gKHN0cnVjdCBmdXRleF9idWNrZXRfcmVmKXsgLmhiID0gX19mdXRleF9oYXNoKGtleSwgTlVMTCwgTlVMTCksIC5mcGggPSBOVUxMIH07XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4MS19XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNDc9c3RhdGljIGludCBmdXRleF9tcG9sKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNTQtLyoqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM1NTogKiBfX2Z1dGV4X2hhc2ggLSBSZXR1cm4gdGhlIGhhc2ggYnVja2V0XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM1Ni0gKiBAa2V5Olx0UG9pbnRlciB0byB0aGUgZnV0ZXgga2V5IGZvciB3aGljaCB0aGUgaGFzaCBpcyBjYWxjdWxhdGVkXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjYtICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM2NzpzdGF0aWMgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzY4Ol9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNzktXHRcdFx0XHQqZnBoX3AgPSBmcGg7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM4MDpcdFx0XHRyZXR1cm4gX19mdXRleF9oYXNoX3ByaXZhdGUoa2V5LCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0zODEtXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5Ny1cdFx0ICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM5ODpcdFx0bm9kZSA9IChoYXNoIFx1MDAzZVx1MDAzZSBmdXRleF9oYXNoc2hpZnQpICUgbnJfbm9kZV9pZHM7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5OS1cdFx0aWYgKCFub2RlX3Bvc3NpYmxlKG5vZGUpKSB7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy00MDMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjQwNDpcdHJldHVybiBcdTAwMjZmdXRleF9xdWV1ZXNbbm9kZV1baGFzaCBcdTAwMjYgZnV0ZXhfaGFzaG1hc2tdO1xua2VybmVsL2Z1dGV4L2NvcmUuYy00MDUtfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9NzM4PWludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcilcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1Ny0gKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6NzU4OnN0cnVjdCBmdXRleF9xICpmdXRleF90b3Bfd2FpdGVyKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy03NTkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9Nzc2PXZvaWQgd2FpdF9mb3Jfb3duZXJfZXhpdGluZyhpbnQgcmV0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmV4aXRpbmcpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDAtLyoqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjgwMTogKiBfX2Z1dGV4X3VucXVldWUoKSAtIFJlbW92ZSB0aGUgZnV0ZXhfcSBmcm9tIGl0cyBmdXRleF9oYXNoX2J1Y2tldFxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDItICogQHE6XHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz04MDY9dm9pZCBfX2Z1dGV4X3VucXVldWUoc3RydWN0IGZ1dGV4X3EgKnEpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwNy17XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjgwODpcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwOS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgxMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6ODE0Olx0aGIgPSBjb250YWluZXJfb2YocS1cdTAwM2Vsb2NrX3B0ciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0LCBsb2NrKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtODE1LVx0cGxpc3RfZGVsKFx1MDAyNnEtXHUwMDNlbGlzdCwgXHUwMDI2aGItXHUwMDNlY2hhaW4pO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODE5LS8qIFRoZSBrZXkgbXVzdCBiZSBhbHJlYWR5IHN0b3JlZCBpbiBxLVx1MDAzZWtleS4gKi9cbmtlcm5lbC9mdXRleC9jb3JlLmM6ODIwOnZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2NvcmUuYy04MjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzo4Mzg6dm9pZCBmdXRleF9xX3VubG9jayhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2NvcmUuYy04Mzkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtODQzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzo4NDQ6dm9pZCBfX2Z1dGV4X3F1ZXVlKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NDUtXHRcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTg2NC0vKipcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODY1OiAqIGZ1dGV4X3VucXVldWUoKSAtIFJlbW92ZSB0aGUgZnV0ZXhfcSBmcm9tIGl0cyBmdXRleF9oYXNoX2J1Y2tldFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjYtICogQHE6XHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzQxPXN0YXRpYyB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzQ3LVx0Lypcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM0ODpcdCAqIFRoZSBtdXRleCBtbV9zdHJ1Y3Q6OmZ1dGV4X2hhc2hfbG9jayBtaWdodCBiZSBhY3F1aXJlZC5cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM0OS1cdCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2MD12b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NjYtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1Njc6c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU2OC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTYtXHQgKlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3Olx0ICogZnV0ZXhfaGFzaCgpXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cdCAqICAgZ3VhcmQocmN1KTtcdFx0ICBndWFyZChtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXHQgKlx0XHRcdFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXHUwMDI2bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcdCAqXHRcdFx0XHRmdXRleF9oYXNoX2FsbG9jYXRlKClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cdCAqXHRcdFx0XHQgIGZ1dGV4X3JlZl9kcm9wKClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NTQ9c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc2NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc2NjpzdGF0aWMgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzY3LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NzM6dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzQte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNDpzdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwNS1cdFx0XHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MjctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhhc2hfc2xvdHM7IGkmIzQzOyYjNDM7KVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODcxOlx0XHRmdXRleF9oYXNoX2J1Y2tldF9pbml0KFx1MDAyNmZwaC1cdTAwM2VxdWV1ZXNbaV0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xODcyLVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkxMy1cdFx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTE0Olx0XHRcdFx0aWYgKGZ1dGV4X2hhc2hfbGVzcyhuZXcsIGZwaCkpIHtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkxNS1cdFx0XHRcdFx0ZnJlZSA9IG5ldztcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjItXHRidWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKDQgKiB0aHJlYWRzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2MzpcdGJ1Y2tldHMgPSBjbGFtcChidWNrZXRzLCAxNiwgZnV0ZXhfaGFzaG1hc2sgJiM0MzsgMSk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjQtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTcwLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTcxOnN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODQ6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hhc2hfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTg1LSNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTgte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDE5Olx0ZnV0ZXhfaGFzaF9pbml0X21tKFx1MDAyNm1tLVx1MDAzZWZ1dGV4KTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMC1cdGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShcdTAwMjZtbS1cdTAwM2VmdXRleCk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIzLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzMi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcdFx0cmV0ID0gZnV0ZXhfaGFzaF9hbGxvY2F0ZShhcmczLCBmbGFncyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNi1cdGNhc2UgUFJfRlVURVhfSEFTSF9HRVRfU0xPVFM6XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzc6XHRcdHJldCA9IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzgtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjA0Nz1zdGF0aWMgaW50IF9faW5pdCBmdXRleF9pbml0KHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDYwLSNlbmRpZlxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYxOlx0ZnV0ZXhfaGFzaHNoaWZ0ID0gaWxvZzIoaGFzaHNpemUpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYyOlx0c2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQpICogaGFzaHNpemU7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjMtXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjUtXHRmb3JfZWFjaF9ub2RlKG4pIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA2NjpcdFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICp0YWJsZTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2Ny1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzUtXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhhc2hzaXplOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA3NjpcdFx0XHRmdXRleF9oYXNoX2J1Y2tldF9pbml0KFx1MDAyNnRhYmxlW2ldKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA3Ny1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwODAtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwODE6XHRmdXRleF9oYXNobWFzayA9IGhhc2hzaXplIC0gMTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA4Mi1cdHByX2luZm8oXCYjMzQ7ZnV0ZXggaGFzaCB0YWJsZSBlbnRyaWVzOiAlbHUgKCVsdSBieXRlcyBvbiAlZCBOVU1BIG5vZGVzLCB0b3RhbCAlbHUgS2lCLCAlcykuXFxuXCYjMzQ7LFxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgZnV0ZXhfa2V5X2lzX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMTUwLSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MTUxOnN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCB7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0xNTItXHRhdG9taWNfdCB3YWl0ZXJzO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDI6XHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQzLVx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTI1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1NC1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1NTpleHRlcm4gc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTYtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTgtXHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1OTpcdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9Mjg3PWV4dGVybiBpbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mjg4OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yODktXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzA4PWV4dGVybiB2b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMDk6ZXh0ZXJuIHZvaWQgX19mdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxMC1cdFx0XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0zMTE9ZXh0ZXJuIGludCBmdXRleF91bnF1ZXVlKHN0cnVjdCBmdXRleF9xICpxKTtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTMtLyoqXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozMTQ6ICogZnV0ZXhfcXVldWUoKSAtIEVucXVldWUgdGhlIGZ1dGV4X3Egb24gdGhlIGZ1dGV4X2hhc2hfYnVja2V0XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTUtICogQHE6XHRUaGUgZnV0ZXhfcSB0byBlbnF1ZXVlXG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzI3LSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzI4OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMyOS1cdFx0XHQgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTM0MD1leHRlcm4gdm9pZCB3YWl0X2Zvcl9vd25lcl9leGl0aW5nKGludCByZXQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXhpdGluZyk7XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ0LSAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2luYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzQ2LXtcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNTktICovXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozNjA6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2hiX3dhaXRlcnNfZGVjKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjEte1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2Ni1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjM2NzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYl93YWl0ZXJzX3BlbmRpbmcoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2OC17XG4tLVxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzc5LVxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzgwOmV4dGVybiB2b2lkIGZ1dGV4X3FfbG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4MS1cdF9fYWNxdWlyZXMoXHUwMDI2aGItXHUwMDNlbG9jaylcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODMtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODQ6ZXh0ZXJuIHZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4NS1cdF9fcmVsZWFzZXMoXHUwMDI2aGItXHUwMDNlbG9jayk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDozODc6ZXh0ZXJuIGludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM4OC1cdFx0XHRcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTQwMj1zdGF0aWMgaW5saW5lIHZvaWRcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQwMzpkb3VibGVfbG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC00MDQtXHRfX2FjcXVpcmVzKFx1MDAyNmhiMS1cdTAwM2Vsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oPTQxNj1zdGF0aWMgaW5saW5lIHZvaWRcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQxNzpkb3VibGVfdW5sb2NrX2hiKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMilcbmtlcm5lbC9mdXRleC9mdXRleC5oLTQxOC1cdF9fcmVsZWFzZXMoXHUwMDI2aGIxLVx1MDAzZWxvY2spXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9NDc2PXN0YXRpYyBpbnQgbG9ja19waV91cGRhdGVfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCB1MzIgdXZhbCwgdTMyIG5ld3ZhbClcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTUtICovXG5rZXJuZWwvZnV0ZXgvcGkuYzo1MTY6aW50IGZ1dGV4X2xvY2tfcGlfYXRvbWljKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLFxua2VybmVsL2Z1dGV4L3BpLmMtNTE3LVx0XHRcdCB1bmlvbiBmdXRleF9rZXkgKmtleSxcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc1PXN0YXRpYyBpbmxpbmVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzY6dm9pZCByZXF1ZXVlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Nzc6XHRcdCAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyLCB1bmlvbiBmdXRleF9rZXkgKmtleTIpXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc4LXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkwLVx0XHQvKlxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MTpcdFx0ICogaGIxIGFuZCBoYjIgYmVsb25nIHRvIHRoZSBzYW1lIGZ1dGV4X2hhc2hfYnVja2V0X3ByaXZhdGVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTItXHRcdCAqIGJlY2F1c2UgaWYgd2UgbWFuYWdlZCBnZXQgYSByZWZlcmVuY2Ugb24gaGIxIHRoZW4gaXQgY2FuJiMzOTt0IGJlXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz0yMzA9dm9pZCByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMzE6XHRcdFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjMyLXtcbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MD1zdGF0aWMgaW50XG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjI4MTpmdXRleF9wcm94eV90cnlsb2NrX2F0b21pYyh1MzIgX191c2VyICpwaWZ1dGV4LCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjgyOlx0XHRcdCAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIyLCB1bmlvbiBmdXRleF9rZXkgKmtleTEsXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI4My1cdFx0XHQgICB1bmlvbiBmdXRleF9rZXkgKmtleTIsIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9NzEyPXN0YXRpYyBpbmxpbmVcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzEzOmludCBoYW5kbGVfZWFybHlfcmVxdWV1ZV9waV93YWtldXAoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtNzE0LVx0XHRcdFx0ICAgc3RydWN0IGZ1dGV4X3EgKnEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Njg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgZnV0ZXhfaGFzaGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmdXRleF9oYXNoYC4gSXQmIzM5O3MgZmxhZ2dlZCBhcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKj8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgaW50ZXJhY3Rpb24uIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0LiBBaCwgcmlnaHQsIGl0JiMzOTtzICpub3QqIGV4cG9ydGVkIHRvIG1vZHVsZXMsIGJ1dCBpdCAqaXMqIGEgZ2xvYmFsIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGl0c2VsZiB3aXRoaW4gdGhhdCBjb3JlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gdGhpcyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2MDpzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXRleCBIYXNoIFBpdm90aW5nIFBhdGNoKioKCk9rYXksIHNvIGBmdXRleF9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIExldCYjMzk7cyBzdGFydCBieSBpZGVudGlmeWluZyB0aGUga2V5IHN5bWJvbHMuIEkgc2VlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoYCwgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgIGFzIHRoZSBwcmltYXJ5IGZvY3VzIHBvaW50cy4gCgpSaWdodCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgaXMgY2FsbGVkIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLCBzcGVjaWZpY2FsbHkgZnJvbSBgY29weV9wcm9jZXNzYCB3aXRoaW4gYGtlcm5lbC9mb3JrLmNgLCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHRyaWdnZXJlZCBieSBgc3lzX3ByY3RsYC4gVGhlc2UgbG9vayBsaWtlIHNvbGlkIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMgYW5kIHBvdGVudGlhbCBmdXp6aW5nLgoKTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIHNvbGUgZW5hYmxlci4gWWVwLCBpdCBpcy4gQnV0LCBob2xkIG9uLi4uIGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gYEZVVEVYYC4gU28sIGJvdGggYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy4KCkxldCYjMzk7cyByZS1leGFtaW5lIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSXQgc2VlbXMgdG8gbW9kaWZ5IGBfX2Z1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gVGhlc2UgYXJlIGFsbCBjbGVhcmx5IGNvbm5lY3RlZCB0byB0aGUgYWxsb2NhdGlvbiBhbmQgcGl2b3Rpbmcgb2YgdGhlIHByaXZhdGUgaGFzaCB0YWJsZS4gCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgaW52b2x2ZToKCjEuICBJbnRyb2R1Y2luZyBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgIGZvciBgbW1waC0mZ3Q7aGFzaF9uZXdgLgoyLiAgUmVwbGFjaW5nIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAgd2l0aCBgZ3VhcmQocmN1KSgpYCBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuCjMuICBBZGRpbmcgYHNtcF9ybWIoKWAgd2l0aGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4KClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBmdXRleCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbiB0aGUgcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nLiBDb25zaWRlcmluZyB0aGUgY29yZSBtb2RpZmljYXRpb25zLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gZXhwbG9yZSBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KClRvIHN1bW1hcml6ZSwgaGVyZSBhcmUgdGhlIGZvY3VzZWQgc3ltYm9scyBhZ2FpbjoKLSAgIGBmdXRleF9oYXNoX3ByY3RsYAotICAgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAKLSAgIGBmdXRleF9oYXNoYAotICAgYGZ1dGV4X3ByaXZhdGVfaGFzaGAKCldhaXQgYSBtaW51dGUsIGlzIGBmdXRleF9wcml2YXRlX2hhc2hgIGFsc28gZ2xvYmFsPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2suLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCBcXCpmdXRleF9wcml2YXRlX2hhc2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MjIwPXN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTk5CgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBQYXRjaCoqCgpPa2F5LCBzbyBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCBnb29kIHRvIGNvbmZpcm0uIE5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGRlcGVuZGVuY3kgY2hhaW4gaXMgcHJldHR5IGNsZWFyOiBgRlVURVhfUFJJVkFURV9IQVNIYCBoaW5nZXMgb24gYEZVVEVYICZhbXA7JmFtcDsgIUJBU0VfU01BTEwgJmFtcDsmYW1wOyBNTVVgLiBHaXZlbiB0aGF0IHdlIGhhdmUgYEZVVEVYYCwgdGhhdCBtZWFucywgaWYgYWxsIGlzIGNvcnJlY3QsIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVhc29uaW5nIGhlcmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgbW9kaWZ5aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgKndpdGhpbiogdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSYjMzk7cyBwaXZvdGluZyBtZWNoYW5pc20uIFRoZXkmIzM5O3JlIHRvdWNoaW5nIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLCBzbyBpdCBzZWVtcyBxdWl0ZSBsb3ctbGV2ZWwuIFRoZSBtYWluIGNoYW5nZSBpcyByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgYW5kIG1lbW9yeSBiYXJyaWVycywgc3BlY2lmaWNhbGx5IGBzbXBfcm1iYCwgYFJFQURfT05DRWAsIGFuZCBgV1JJVEVfT05DRWAuIFRoaXMgaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gb3B0aW1pemUgb3IgcG90ZW50aWFsbHkgZml4IHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIHByb2Nlc3NlcyBvZiB0aGUgZnV0ZXggaGFzaC4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIGFyZWEhCgpCZWNhdXNlIHRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIGFuZCBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgb3IgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIGl0IG1ha2VzIHRoZW0gYSBoaWdoLXByaW9yaXR5IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGg6CiogICBgV29ydGhGdXp6aW5nOiB0cnVlYCAtIEFic29sdXRlbHksIHRoaXMgaXMgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywgJiMzNDtmdXRleF9oYXNoJiMzNDssICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDtdYCAtIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMuCiogICBgRW5hYmxlQ29uZmlnczogWyYjMzQ7RlVURVgmIzM0OywgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0O11gIC0gVGhlc2UgY29uZmlncyBhcmUgbmVjZXNzYXJ5IGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LgoqICAgYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uJiMzNDtgIC0gVGhlIHJhdGlvbmFsZSBiZWhpbmQgbXkgY2hvaWNlcyBpcyBvdXRsaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYJiMzNDssCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2gmIzM0OywKICAgICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBwaXZvdGluZyBtZWNoYW5pc20sIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gb3B0aW1pemUgb3IgZml4IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0gcmVhY2hhYmxlIHZpYSBwcmN0bCBvciBwcm9jZXNzIGNyZWF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGVVRFWCYjMzQ7LAogICAgJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgICAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoJiMzNDssCiAgICAmIzM0O2Z1dGV4X3ByaXZhdGVfaGFzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2Z1dGV4L2NvcmUuYwpAQCAtMjAyLDcgJiM0MzsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKgogCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC0mZ3Q7aGFzaCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bW1waC0mZ3Q7bG9jaykpOwogCWlmIChmcGgpIHsKIAkJaWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7Ci0JCQltbXBoLSZndDtoYXNoX25ldyA9IG5ldzsKJiM0MzsJCQlXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTIyNCw3ICYjNDM7MjI0LDcgQEAgc3RhdGljIHZvaWQgZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogCQlmcGggPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7CiAJCWlmIChmcGgpIHsKLQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCQkJX19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpOwogCQl9CiAJfQpAQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSAmYW1wO21tLSZndDtmdXRleC5waGFzaDsKIAlzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7CiAKLQlndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKTsKJiM0MzsJZ3VhcmQocmN1KSgpOwogCi0JaWYgKCFtbXBoLSZndDtoYXNoX25ldykKJiM0MzsJZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtJmd0O2hhc2gpOwomIzQzOwkvKgomIzQzOwkgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkCiYjNDM7CSAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW4KJiM0MzsJICogX19mdXRleF9waXZvdF9oYXNoKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfcm1iKCk7CiYjNDM7CWlmICghUkVBRF9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3KSkKIAkJcmV0dXJuIHRydWU7CiAKLQlmcGggPSByY3VfZGVyZWZlcmVuY2VfcmF3KG1tcGgtJmd0O2hhc2gpOwogCXJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpOwogfQogCkBAIC0xODc5LDcgJiM0MzsxODg1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCWN1ciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2gsCiAJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2gubG9jaykpOwogCQluZXcgPSBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXc7Ci0JCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7CiYjNDM7CQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAKIAkJaWYgKGZwaCkgewogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFjdXItJmd0O2hhc2hfbWFzaykgewpAQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQkJCSAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS4KIAkJCQkgKi8KIAkJCQlmcmVlID0gZnBoOwotCQkJCW1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldzsKJiM0MzsJCQkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7CiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCX0KIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhbmV3KSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjYzCgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDU5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25jdXJyZW5jeSBGaXg6IEZ1dGV4IENvcmUgUGF0Y2ggQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBvcHRpbWl6YXRpb24uIFRoZXkmIzM5O3JlIGNoYW5naW5nIHRoZSB3YXkgYG1tcGgtJmd0O2hhc2hfbmV3YCAob3IgYG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ld2AsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkgaXMgYWNjZXNzZWQuIEl0JiMzOTtzIGFsbCBhYm91dCBhdG9taWNpdHkgYW5kIG1lbW9yeSBiYXJyaWVycy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAuICBUaGlzIGlzIGEgdGV4dGJvb2sgdGVjaG5pcXVlIGZvciBlbnN1cmluZyBhdG9taWMgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZXMgYWNyb3NzIENQVXMsIHByZXZlbnRpbmcgdGVhcmluZyBvciBpbmNvcnJlY3QgdmFsdWVzIGR1ZSB0byBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYC4gVGhleSYjMzk7dmUgc3dhcHBlZCBhIG11dGV4IChgZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jaylgKSBmb3IgYW4gUkNVIChgZ3VhcmQocmN1KSgpO2ApLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiBhbmQgaXQmIzM5O3MgYWNjb21wYW5pZWQgYnkgYW4gYHNtcF9ybWIoKWAgbWVtb3J5IGJhcnJpZXIuIFRoZSBgc21wX3JtYigpYCBhbmQgYHJjdV9kZXJlZmVyZW5jZSgpYCBjYWxscyBlbnN1cmUgdGhhdCBpZiB0aGUgbmV3IGhhc2ggaXMgc2Vlbiwgc28gaXMgdGhlIGNsZWFyZWQgcG9pbnRlci4KCkxldCYjMzk7cyBicmVhayBpdCBkb3duOgoKKiAgIFRoZSBjb2RlIGlzIHJlcGxhY2luZyBgbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7YCB3aXRoIGBXUklURV9PTkNFKG1tcGgtJmd0O2hhc2hfbmV3LCBuZXcpO2AKKiAgIEFuZCBgbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtgIHdpdGggYFdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtgCiogICBJbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYCwgdGhleSBzd2l0Y2ggZnJvbSBhIG11dGV4IHRvIFJDVSBhbmQgaW50cm9kdWNlIGFuIGBzbXBfcm1iKClgIGFmdGVyIHVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgYW5kIGBSRUFEX09OQ0UoKWAsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIG9yZGVyaW5nIG9mIHRoZSBtZW1vcnkgYWNjZXNzLgoKVGhlcmUgYXJlIG5vIG1ham9yIGFyY2hpdGVjdHVyYWwgY2hhbmdlcywgbm8gbmV3IGFsbG9jYXRpb25zLCBhbmQgbm90aGluZyB1c2VyLXNwYWNlIHZpc2libGUuIFRoaXMgaXMgYWxsIGludGVybmFsIHRvIHRoZSBrZXJuZWwmIzM5O3MgZnV0ZXggaW1wbGVtZW50YXRpb24uCgpHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMsIHRoZSBwb3RlbnRpYWwgZm9yIGludHJvZHVjaW5nIGJ1Z3MgaXMgY29uZmluZWQgdG8gZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMsIGFsbCBvZiB3aGljaCBzaG91bGQgYmUgcmVhZGlseSBkZXRlY3RlZCBieSBleGlzdGluZyBrZXJuZWwgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlIHBhdGNoIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuICBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBiZSBteSBmcmllbmRzIGhlcmUuIFNvLCBteSBjb25jbHVzaW9uOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBjbGVhbiwgZm9jdXNlZCBjb25jdXJyZW5jeSBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgZGF0YSByYWNlcyBhbmQgbG9jayBjb250ZW50aW9uLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBmdXRleCBjb3JlLCBzcGVjaWZpY2FsbHkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIGFkZGluZyBSRUFEX09OQ0UvV1JJVEVfT05DRSBhbmQgYSBtZW1vcnkgYmFycmllciAoc21wX3JtYikgZm9yIGFjY2Vzc2luZyB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgZGF0YSByYWNlcyBhbmQgbG9jayBjb250ZW50aW9uLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNraW5nIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcyAoZGF0YSByYWNlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgYnVncyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQ1NBTiwgS0FTQU4sIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDA6NTcuNTI5MDg2MTk1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyNzcwODQyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhcIixcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICAgIFwiZnV0ZXhfaGFzaFwiLFxuICAgIFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN5bmNocm9uaXphdGlvbiBsb2dpYyBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIHBpdm90aW5nIG1lY2hhbmlzbSwgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyB0byBvcHRpbWl6ZSBvciBmaXggcmFjZSBjb25kaXRpb25zLiBUaGVzZSBhcmUgY29yZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGZ1dGV4IHN1YnN5c3RlbSByZWFjaGFibGUgdmlhIHByY3RsIG9yIHByb2Nlc3MgY3JlYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU3LjUyOTA5NDIzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyODQxMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYxYjRmZjM0MzI0MzNkMzVhNDVhOWExMzIzNjk5MzI1Y2FlZjY1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU4LjA2MjUwNDU4OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcwNDE1ODUxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYXCIsXG4gICAgXCJGVVRFWF9QUklWQVRFX0hBU0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gICAgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgICBcImZ1dGV4X2hhc2hcIixcbiAgICBcImZ1dGV4X3ByaXZhdGVfaGFzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBwaXZvdGluZyBtZWNoYW5pc20sIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gb3B0aW1pemUgb3IgZml4IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBmdXRleCBzdWJzeXN0ZW0gcmVhY2hhYmxlIHZpYSBwcmN0bCBvciBwcm9jZXNzIGNyZWF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjFiNGZmMzQzMjQzM2QzNWE0NWE5YTEzMjM2OTkzMjVjYWVmNjUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NDA6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQwOjU4LjA2MjUwNjM0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MTUyMDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1dGV4IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoZSBmb2N1cyBvbiBob3cgd2UncmUgaGFuZGxpbmcgdGhlIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AgZmllbGQuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgZGlyZWN0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBTbWFydCBtb3ZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBpbnRlbnRpb24gdG8gZW5zdXJlIHByb3BlciBtZW1vcnkgb3JkZXJpbmcsIHdoaWNoIGlzIGNydWNpYWwgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGRhdGEgc3RydWN0dXJlcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMgYW5kIHBvdGVudGlhbGx5IHdpdGggdGhlIGtlcm5lbCBpdHNlbGYuXG5cbk5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIGBmdXRleF9waXZvdF9wZW5kaW5nYC4uLiB0aGV5J3JlIGRpdGNoaW5nIHRoZSBtdXRleCBndWFyZCAoYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCkgaW4gZmF2b3Igb2YgUkNVIChgZ3VhcmQocmN1KSgpYCkuIEFoLCBzbyB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBvciBlbGltaW5hdGUgYSByYWNlIGNvbmRpdGlvbiBieSBsZXZlcmFnaW5nIFJDVS4gVGhlIGFkZGVkIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgdGhpcyBpcyBhIGNoYW5nZSBpbnZvbHZpbmcgbWVtb3J5IGJhcnJpZXJzLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5jdGlvbmFsIGFsdGVyYXRpb24sIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBSQ1UncyByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBpcyB2ZXJ5IHNob3J0IGFuZCBtYWtlcyBpdCB2ZXJ5IGVmZmljaWVudCBmb3IgY29uY3VycmVudCBhY2Nlc3MuIFNvLCB0aGlzIG1pZ2h0IGJlIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb3IsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgYSBjcml0aWNhbCBidWcgZml4IHJlbGF0ZWQgdG8gZnV0ZXggaGFzaCBwaXZvdGluZy5cblxuSSByZWFsbHkgbmVlZCB0byBkaWcgaW50byBgZnV0ZXhfcGl2b3RfcGVuZGluZ2Agbm93LiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZ1bmN0aW9uIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBiZWZvcmUgYW5kIGFmdGVyLCBwYXlpbmcgcGFydGljdWxhciBhdHRlbnRpb24gdG8gdGhlIG1lbW9yeSBvcmRlcmluZyBhbmQgaG93IHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQsIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgaXMgYSBsb3QgbW9yZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MDIuODU0MDI5NDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTY5NjQ4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9waXZvdF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzgzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzctYWdhaW46XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4OlxcdFxcdHdhaXRfdmFyX2V2ZW50KG1tLCBmdXRleF9waXZvdF9wZW5kaW5nKG1tKSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MDIuOTY1NzMwNDc4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU1OTU2NTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBhbmQgYF9fZnV0ZXhfcGl2b3RfaGFzaGAuIFJpZ2h0IGF3YXksIEknbSBzZWVpbmcgdGhpcyBpcyBhbGwgYWJvdXQgZnV0ZXggaGFzaCBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZy4gVGhhdCdzIGEgY29yZSBrZXJuZWwgYXJlYSDigJMgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBzY3JlYW1zIFwiZnV6emluZyBjYW5kaWRhdGVcIiB0byBtZS5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmcuIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBkZWZpbml0ZWx5IG9uZS4gVGhlbiwgdGhlcmXigJlzIGBmdXRleF9waXZvdF9oYXNoYC4gSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGZ1dGV4X2hhc2hfZnJlZWAsIGJ1dCB0aGF0J3Mgbm90IGJlZW4gbW9kaWZpZWQsIHNvIGl0J3MgcHJvYmFibHkgbGVzcyByZWxldmFudCB0byB0aGlzIGNoYW5nZS5cblxuV2FpdCBhIHNlY29uZOKApiBMb29raW5nIGNsb3NlciwgYm90aCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBhcmUgbWFya2VkIHN0YXRpYy4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBJIGNvdWxkIGhhdmUgbWlzc2VkIHNvbWV0aGluZywgYnV0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIGdlbmVyYWxseSB0cmlja2llciBmb3IgZXh0ZXJuYWwgZnV6emluZyBzaW5jZSB0aGV5IGhhdmUgbGltaXRlZCB2aXNpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjA3LjUyNTI5OTQyMVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQ2OTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjA3LjU4Njc3NTMwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTM5NTQwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBGdXRleCBIYXNoaW5nIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBpbml0aWFsaXplZCwgd2hpY2ggaXMgaGVscGZ1bC4gTm93LCB0aGUgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gYWN0dWFsbHkgaGFwcGVucywgYW5kIGdpdmVuIHRoYXQsIEknbGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgZnV0ZXhfaGFzaF9wcmN0bGAuIFRoYXQncyB3aGVyZSB0aGUgY29udHJvbCBwbGFuZSB3aWxsIGxpa2VseSBiZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGZyb20gdGhhdCBlbnRyeSBwb2ludCwgYW5kIHRoZW4gdHJhY2UgZnJvbSB0aGVyZSBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToxMS4xNDA3MzI5MjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTg1NjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzc9bG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjc5OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05ND1zdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjk5OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjg4NC1cXHRjYXNlIFBSX0ZVVEVYX0hBU0g6XFxua2VybmVsL3N5cy5jOjI4ODU6XFx0XFx0ZXJyb3IgPSBmdXRleF9oYXNoX3ByY3RsKGFyZzIsIGFyZzMsIGFyZzQpO1xcbmtlcm5lbC9zeXMuYy0yODg2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToxMy41OTI1OTc1NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjU3OTEwMzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGVsZW1lbnRzLCB0aGlua2luZyB0aHJvdWdoIHRoZW0gYXMgSSB3b3VsZCBpbiBteSBvd24gd29yazpcblxuKipEZWNvbnN0cnVjdGluZyBGdXRleCBIYXNoaW5nKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAuLi4gUmlnaHQsIHNvIHRoYXQncyAqZGVmaW5pdGVseSogYW4gZW50cnkgcG9pbnQsIGEgaG9vaywgc29tZXRoaW5nIHRoZSBrZXJuZWwgZXhwb3NlcyB0byB1c2VybGFuZCwgcHJvYmFibHkgdGhyb3VnaCBhIGBwcmN0bGAgY2FsbC4gR2l2ZW4gdGhlIG5hbWUsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGNvbmZpZ3VyaW5nIG9yIG1hbmlwdWxhdGluZyB0aGUgZnV0ZXggaGFzaCB0YWJsZSDigJMgbGlrZWx5IHNldHRpbmcgc29tZSBwb2xpY3kgb3IgcGFyYW1ldGVyLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzeXN0ZW0gY2FsbHMgb3IgZG9jdW1lbnRhdGlvbiB0byBzZWUgKmV4YWN0bHkqIHdoYXQgdGhpcyBgcHJjdGxgIGRvZXMgd2l0aCBmdXRleGVzLiBJcyBpdCByZWxhdGVkIHRvIGNvbnRlbnRpb24gcHJvZmlsaW5nPyBNYXliZSBzZXR0aW5nIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24/IFRoYXQncyB0aGUgZmlyc3QgcXVlc3Rpb24gSSdkIGV4cGxvcmUuXG5cbkFuZCB0aGVuIHdlIGhhdmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBpdCdzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgb3IgYWxsb2NhdGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSBvZiB0aGUgZnV0ZXggaGFzaCB0YWJsZS4gU291bmRzIGxpa2UgaXQncyB1c2VkIGlmIG5vdGhpbmcgZWxzZSBpcyBzcGVjaWZpZWQuIEknZCB3YW50IHRvIGNoZWNrIGlmIGl0J3MgY2FsbGVkIGR1cmluZyBzeXN0ZW0gaW5pdGlhbGl6YXRpb24sIG9yIGlmIGl0J3MgZG9uZSBsYXppbHksIG9uIGZpcnN0IGZ1dGV4IHVzZSwgb3Igc29tZSBvdGhlciBzdWNoIGNvbmRpdGlvbi4gSG93IGlzIHRoZSBzaXplIG9mIHRoZSB0YWJsZSBkZXRlcm1pbmVkPyBJcyB0aGF0IGNvbmZpZ3VyYWJsZT8gQXJlIHRoZXJlIG90aGVyIGFsbG9jYXRpb24gbWV0aG9kcz8gQW5kIGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBgcHJjdGxgPyBJIG5lZWQgdG8gbG9vayBpbnRvIHdoZXRoZXIgdGhleSB3b3JrIGFzIGEgcGFpciBzb21laG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTQzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MTcuODUwNTExMDM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcyMTA3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjIwLjMyMjYyNjA5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE2Mzc4MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gRlVURVhfUFJJVkFURV9IQVNIKipcblxuQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGlzIHRvIHVzZSBgRlVURVhfUFJJVkFURV9IQVNIYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBGVVRFWF9QUklWQVRFX0hBU0hgLi4uIGxldCdzIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGFuZCBob3cgaXQncyBkZWZpbmVkIGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLlwiIEl0J3MgYSByZWZsZXgsIHJlYWxseSwgdG8gdmVyaWZ5IHRoZSBmZWF0dXJlJ3MgYXZhaWxhYmlsaXR5IGFuZCBhbnkgZGVwZW5kZW5jaWVzIGJlZm9yZSBkaXZpbmcgaW4uIE5lZWQgdG8gZ28gbG9vayBpbiB0aGUgYEtjb25maWdgIGZvciBgRlVURVhfUFJJVkFURV9IQVNIYC4gSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGVuYWJsZWQgYW5kIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGluZyBpdCBlbnRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZnVsbHkgYXdhcmUgb2YgdGhlIGltcGxpY2F0aW9ucy4gSnVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MjMuNTM5MDA2OTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzI2MDA1MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NDQ9Y29uZmlnIEZVVEVYX1BJXFxuLS1cXG5pbml0L0tjb25maWctMTg0OC1cXG5pbml0L0tjb25maWc6MTg0OTpjb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MToyNS43NzE2MTE2OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2MTcxOTg3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyByZXF1ZXN0OlxuXG4qKkFuYWx5emluZyB0aGUgUXVlcnk6IFwiV2hhdCBTZWxlY3RzIEZVVEVYX1BSSVZBVEVfSEFTSD9cIioqXG5cblJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMgZXNzZW50aWFsbHksIFwiV2hhdCBjb2RlIG9yIHByb2Nlc3MgaW4gdGhlIHN5c3RlbSBpcyAqY2hvb3NpbmcqIHRvIHV0aWxpemUgdGhlIGBGVVRFWF9QUklWQVRFX0hBU0hgIGZlYXR1cmU/XCIuIFRoaXMgaXNuJ3QganVzdCBhYm91dCB3aGVyZSBpdCdzICpkZWZpbmVkKiwgYnV0IHJhdGhlciB3aGVyZSBpdCdzIGJlaW5nICp1c2VkKiBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBkZWNpc2lvbi1tYWtpbmcgcG9pbnQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2Yga2VybmVsIGludGVybmFscywgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgcmVsYXRlZCB0byBmYXN0IHVzZXItc3BhY2UgbXV0ZXhlcyAoZnV0ZXhlcykgYW5kIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdGhlbS4gSXQgc3VnZ2VzdHMgYSBoYXNoZWQgaW1wbGVtZW50YXRpb24gZm9yIHByaXZhdGUgZnV0ZXhlcy4gVGhlcmVmb3JlLCBJIGtub3cgSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgY29kZSByZWxhdGVkIHRvIGZ1dGV4IGltcGxlbWVudGF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBvbmUgdGhhdCBkZWFscyB3aXRoIHRoZSBwcml2YXRlIG5hbWVzcGFjZS4gTm93LCBJIGhhdmUgdG8gdGhpbms6XG5cbiogICAqKkNvcmUgRnV0ZXggQ29kZToqKiBJIG5lZWQgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb3JlIGZ1dGV4IGltcGxlbWVudGF0aW9uIGluIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0aGUgZmlsZXMgZGVhbGluZyB3aXRoIGZ1dGV4IHN5c2NhbGxzIChlLmcuLCBgZnV0ZXguY2Agb3Igc2ltaWxhcikuIEkgd291bGQgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjb2RlIHRoYXQgaGFuZGxlcyBgRlVURVhfUFJJVkFURV9IQVNIYCBzZWxlY3Rpb24gaW4gdGhlIHBhdGggd2hlcmUgZnV0ZXggc3lzY2FsbHMgYXJlIGhhbmRsZWQuIEkgZXhwZWN0IHRoaXMgd291bGQgYmUgc29tZSBzb3J0IG9mIGNvbmZpZ3VyYXRpb24gb3Igc2VsZWN0aW9uIGxvZ2ljLlxuKiAgICoqS2VybmVsIENvbmZpZ3VyYXRpb246KiogSXMgdGhpcyBzZWxlY3Rpb24gY29udHJvbGxlZCBieSBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiAobGlrZSBhIGAjZGVmaW5lYCBvciBhIGBDT05GSUdfYCBvcHRpb24gaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZXMpPyBJZiBzbywgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IG9wdGlvbiB0byBpdHMgdXNlIGluIHRoZSBjb2RlLiBJIHdvdWxkIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcywgdXNpbmcgZ3JlcCwgYW5kIHNlZSBpZiBpdCdzIHRoZXJlLlxuKiAgICoqUnVudGltZSBUdW5pbmc6KiogQ291bGQgaXQgYmUgZHluYW1pY2FsbHkgc2VsZWN0ZWQgYmFzZWQgb24gc29tZSBydW50aW1lIHBhcmFtZXRlciBvciBzeXN0ZW0gY2hhcmFjdGVyaXN0aWMgKGUuZy4sIGF2YWlsYWJsZSBtZW1vcnksIG51bWJlciBvZiBDUFVzLCB0eXBlIG9mIHByb2Nlc3Nvcik/IElmIHNvLCBJJ2QgbmVlZCB0byBsb29rIGZvciBjb2RlIHRoYXQgY2hlY2tzIHRob3NlIGZhY3RvcnMgYW5kIG1ha2VzIHRoZSBkZWNpc2lvbi5cbiogICAqKkxpYnJhcmllcyBcdTAwMjYgZ2xpYmM6KiogSXMgdGhpcyBzb21ldGhpbmcgaW4gdGhlIHN0YW5kYXJkIEMgbGlicmFyeSAoZ2xpYmMpIHRoYXQncyBtYWtpbmcgdGhlIGRlY2lzaW9uIG9uIGJlaGFsZiBvZiB1c2VyLXNwYWNlIHByb2Nlc3Nlcz8gSWYgc28sIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgZnV0ZXgtcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGggdGhlIGtlcm5lbC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBjb2RlIHBhdGggdGhhdCBkZWFscyB3aXRoIHRoZSAqY3JlYXRpb24qIG9yICppbml0aWFsaXphdGlvbiogb2YgdGhlc2UgcHJpdmF0ZSBmdXRleGVzLiBXaGVyZSBpcyB0aGUgZGV0ZXJtaW5hdGlvbiBvZiBob3cgdG8gaGFuZGxlIHRoZSBmdXRleD9cblxuTXkgcGxhbiBpcyB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSwgc3RhcnRpbmcgd2l0aCB0aGUgY29yZSBmdXRleCBmaWxlcywgYW5kIGZvbGxvd2luZyB0aGUgY2FsbHMgdGhhdCBoYW5kbGUgdGhlIHByaXZhdGUgZnV0ZXggbmFtZXNwYWNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGNvbmZpZ3VyYXRpb24gY2hlY2tzLCBvciBvdGhlciBkZWNpc2lvbi1tYWtpbmcgbG9naWMgdGhhdCB1bHRpbWF0ZWx5IGxlYWRzIHRvIHRoZSBzZWxlY3Rpb24gb2YgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEknbSByZWFkeSB0byB1c2UgdG9vbHMgbGlrZSBgZ3JlcGAsIGBjc2NvcGVgLCBvciBgY2xhbmdkYCB0byBuYXZpZ2F0ZSB0aGUgY29kZSBlZmZpY2llbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQzNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjMyLjQzMzMzNDI4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MDQ3OTE0MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjM0LjcyMzgyMTYyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA5MTM3MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBGVVRFWF9QUklWQVRFX0hBU0hgIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBGVVRFWF9QUklWQVRFX0hBU0hgLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCBpdCwgYnV0IHRoZSBzcGVjaWZpY3MgYXJlIGZ1enp5LiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgYGluaXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODQ5IOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgcmVsYXRlZCBvcHRpb25zIGFyZSBncm91cGVkIG9yIGRlZmluZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGZpbGUgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBmZWF0dXJlIGdldHMgZW5hYmxlZCwgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBkZWZhdWx0IHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQtdGltZSBjaGFyYWN0ZXJpc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MTozNy43MzI5NjE0MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQ1OlxcdFxcdGJvb2xcXG4xODQ2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgUlRfTVVURVhFU1xcbjE4NDc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg0ODpcXHRcXG4xODQ5OlxcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG4xODUwOlxcdFxcdGJvb2xcXG4xODUxOlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuMTg1MjpcXHRcXHRkZWZhdWx0IHlcXG4xODUzOlxcdFxcbjE4NTQ6XFx0Y29uZmlnIEZVVEVYX01QT0xcXG4xODU1OlxcdFxcdGJvb2xcXG4xODU2OlxcdFxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgTlVNQVxcbjE4NTc6XFx0XFx0ZGVmYXVsdCB5XFxuMTg1ODpcXHRcXG4xODU5OlxcdGNvbmZpZyBIQVZFX0ZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODYwOlxcdFxcdGJvb2xcXG4xODYxOlxcdFxcbjE4NjI6XFx0Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4xODYzOlxcdFxcdGRlZl9ib29sIEZVVEVYIFxcdTAwMjZcXHUwMDI2IEhBVkVfR0VORVJJQ19WRFNPIFxcdTAwMjZcXHUwMDI2IEdFTkVSSUNfSVJRX0VOVFJZIFxcdTAwMjZcXHUwMDI2IFJTRVEgXFx1MDAyNlxcdTAwMjYgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXFxuMTg2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6MzcuNzMzMTM3NDM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDE2MDMxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZVVEVYIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBpZiBgRlVURVhgLCBhbmQgbm90IGBCQVNFX1NNQUxMYCwgYW5kIHRoZXJlJ3MgYW4gYE1NVWAsIHRoZW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdGhhdCBgeWAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gU28sIHJlYWxseSwgSSBkb24ndCAqaGF2ZSogdG8gZXhwbGljaXRseSBhZGQgaXQgdG8gdGhlIGBFbmFibGVDb25maWdzYC4gSG93ZXZlciwgaXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byB0aHJvdyBpbiBgRlVURVhgIGluIHRoZXJlLCBqdXN0IGZvciBjbGFyaXR5J3Mgc2FrZSwgYWx0aG91Z2ggdXN1YWxseSBgRlVURVhgIGlzIGVuYWJsZWQgYW55d2F5LiBXYWl0IGEgbWludXRlLi4uIHllcywgYWRkaW5nIGBGVVRFWGAgaXMgYSBnb29kIGNhbGwsIGZvciBlbXBoYXNpcy5cblxuSGFuZyBvbi4uLiBJJ20gbWlzc2luZyBzb21ldGhpbmcsIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGEgY29uZmlnIGZsYWcuIEkgY2FuIGFkZCBgRlVURVhfUFJJVkFURV9IQVNIYCB0byBFbmFibGVDb25maWdzLCB0b28uXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkndmUgZ290IGEgY29tcGxldGUgcGljdHVyZSwgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyBhZmZlY3RlZC4gQWgsIEkgc2VlIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuLi4gd2FpdCwgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gUmlnaHQsIHJpZ2h0LiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgaXMgY2FsbGVkIGJ5IGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXJlICphbnkqIG90aGVyIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbj8gTmVlZCB0byBiZSBzdXJlIEkndmUgZ290IHRoZSBmdWxsIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTgxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NDIuOTc0NzQyNTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzgxMjc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMC1cXHQgKlxcdFxcdFxcdFxcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCwgbmV3KTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XFx0ICpcXHRcXHRcXHRcXHRmdXRleF9oYXNoX2FsbG9jYXRlKClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXFx0ICpcXHRcXHRcXHRcXHQgIGZ1dGV4X3JlZl9kcm9wKClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgwND1zdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4Mjg6c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4OlxcdHJldHVybiBmdXRleF9oYXNoX2FsbG9jYXRlKGJ1Y2tldHMsIDApO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2OS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTgyOnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgzLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpIHsgcmV0dXJuIDA7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAyND1pbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjQzLjA2ODU2MDUyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTk1NjI0MTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgRnV0ZXggSGFzaGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdXRleCBoYXNoaW5nIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBmdXRleF9oYXNoX3ByY3RsYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGxvZ2ljIHRvIGJlLiBIbW0sIGJ1dCBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGBfX2Z1dGV4X3Bpdm90X2hhc2hgIGFuZCBgZnV0ZXhfcGl2b3RfaGFzaGAgYXMgd2VsbC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWxsIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LiBMZXQgbWUgdHJhY2Ugd2hlcmUgYGZ1dGV4X3Bpdm90X2hhc2hgIGlzIGJlaW5nIGNhbGxlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBDb250ZXh0IGlzIGtleSBoZXJlOyBrbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSB0aGlzIG11Y2ggY2xlYXJlci4gVGltZSB0byBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NzM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NDcuMDY0MTg2Njg0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzMDcwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk1OnN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjE5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjI4OlxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNTY6XFx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXFx0Z290byBhZ2FpbjtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzI6XFx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXFx1MDAzZXByaXZhdGUubW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjczLVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVxcdCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3OlxcdCAqIGZ1dGV4X2hhc2goKVxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk4LVxcdCAqICAgZ3VhcmQocmN1KTtcXHRcXHQgIGd1YXJkKG1tLVxcdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVxcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk2LVxcdCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzMTpcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMyLVxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjQ3LjE3NDQ5NzY2MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDYzNjExODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGZ1dGV4X2hhc2ggYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYGZ1dGV4X3Bpdm90X2hhc2hgIGdldHMgY2FsbGVkIGZyb20gYm90aCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLiBNYWtlcyBzZW5zZSwgYGZ1dGV4X2hhc2hgIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBoYXNoaW5nIGZ1dGV4IGtleXMsIGFuZCBpdCBzZWVtcyBsaWtlIGl0J3MgYSBjb3JlIGZ1dGV4IGZ1bmN0aW9uIHNpbmNlIGl0J3MgdXNlZCBzbyBtYW55IHBsYWNlcy5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiByaWdodCBub3cgYXJlOiBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBgZnV0ZXhfaGFzaGAsIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGlzIGBmdXRleF9oYXNoYCBhY3R1YWxseSBhbiBleHBvcnRlZCBzeW1ib2w/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGF0IGFuZCBtYWtlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NTEuMjM4MTEyMjk4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgwODM1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYy01NS0gKiBUaGUgYmFzZSBvZiB0aGUgYnVja2V0IGFycmF5IGFuZCBpdHMgc2l6ZSBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXJcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjU2OiAqIChhZnRlciBpbml0aWFsaXphdGlvbiBvbmx5IGluIGZ1dGV4X2hhc2goKSksIHNvIGVuc3VyZSB0aGF0IHRoZXlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTU3LSAqIHJlc2lkZSBpbiB0aGUgc2FtZSBjYWNoZWxpbmUuXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTU5PXN0YXRpYyBzdHJ1Y3Qge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy02MS1cXHR1bnNpZ25lZCBpbnRcXHRcXHQgaGFzaHNoaWZ0O1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjI6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpxdWV1ZXNbTUFYX05VTU5PREVTXTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTYzLX0gX19mdXRleF9kYXRhIF9fcmVhZF9tb3N0bHkgX19hbGlnbmVkKDIqc2l6ZW9mKGxvbmcpKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTY0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6NjU6I2RlZmluZSBmdXRleF9oYXNobWFza1xcdChfX2Z1dGV4X2RhdGEuaGFzaG1hc2spXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo2NjojZGVmaW5lIGZ1dGV4X2hhc2hzaGlmdFxcdChfX2Z1dGV4X2RhdGEuaGFzaHNoaWZ0KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjctI2RlZmluZSBmdXRleF9xdWV1ZXNcXHQoX19mdXRleF9kYXRhLnF1ZXVlcylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9Njk9c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc0LVxcdGJvb2xcXHRcXHRjdXN0b207XFxua2VybmVsL2Z1dGV4L2NvcmUuYzo3NTpcXHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgcXVldWVzW107XFxua2VybmVsL2Z1dGV4L2NvcmUuYy03Ni19O1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMjM9bGF0ZV9pbml0Y2FsbChmYWlsX2Z1dGV4X2RlYnVnZnMpO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMjk6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE0ND12b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNDktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTA6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTE6X19mdXRleF9oYXNoX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2MT1zdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjQ6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYl9vbGQsICpoYl9uZXc7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjUtXFx0dW5zaWduZWQgaW50IHNsb3RzID0gb2xkLVxcdTAwM2VoYXNoX21hc2sgKyAxO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODA6XFx0XFx0XFx0aGJfbmV3ID0gX19mdXRleF9oYXNoKFxcdTAwMjZ0aGlzLVxcdTAwM2VrZXksIG5ldywgTlVMTCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODEtXFx0XFx0XFx0ZnV0ZXhfaGJfd2FpdGVyc19pbmMoaGJfbmV3KTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjM4LVxcdCAqIG9idGFpbmVkIG9uY2UgdGhlIGxhc3QgdXNlciBkcm9wcGVkIGl0J3MuXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzk6XFx0ICogSW4gdGhhdCBjYXNlIHdlIGJsb2NrIG9uIG1tX3N0cnVjdDo6ZnV0ZXhfaGFzaF9sb2NrIGFuZCBlaXRoZXIgaGF2ZVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjQwLVxcdCAqIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50IG9yIHdhaXQgd2hpbGUgc29tZW9uZSBlbHNlIGlzIGRvaW5nIHRoZVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTktXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjA6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NC1cXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGggPSBOVUxMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY1OlxcdFxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjYtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjc6XFx0XFx0aGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBcXHUwMDI2ZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2OC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6Mjc4OnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzkte1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgwOlxcdHJldHVybiAoc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYpeyAuaGIgPSBfX2Z1dGV4X2hhc2goa2V5LCBOVUxMLCBOVUxMKSwgLmZwaCA9IE5VTEwgfTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4MS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM0Nz1zdGF0aWMgaW50IGZ1dGV4X21wb2woc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzU0LS8qKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzU1OiAqIF9fZnV0ZXhfaGFzaCAtIFJldHVybiB0aGUgaGFzaCBidWNrZXRcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM1Ni0gKiBAa2V5OlxcdFBvaW50ZXIgdG8gdGhlIGZ1dGV4IGtleSBmb3Igd2hpY2ggdGhlIGhhc2ggaXMgY2FsY3VsYXRlZFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjYtICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjc6c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjg6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM3OS1cXHRcXHRcXHRcXHQqZnBoX3AgPSBmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzozODA6XFx0XFx0XFx0cmV0dXJuIF9fZnV0ZXhfaGFzaF9wcml2YXRlKGtleSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM4MS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM5Ny1cXHRcXHQgKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM5ODpcXHRcXHRub2RlID0gKGhhc2ggXFx1MDAzZVxcdTAwM2UgZnV0ZXhfaGFzaHNoaWZ0KSAlIG5yX25vZGVfaWRzO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzk5LVxcdFxcdGlmICghbm9kZV9wb3NzaWJsZShub2RlKSkge1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy00MDMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo0MDQ6XFx0cmV0dXJuIFxcdTAwMjZmdXRleF9xdWV1ZXNbbm9kZV1baGFzaCBcXHUwMDI2IGZ1dGV4X2hhc2htYXNrXTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTQwNS19XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTczOD1pbnQgZmF1bHRfaW5fdXNlcl93cml0ZWFibGUodTMyIF9fdXNlciAqdWFkZHIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1Ny0gKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjc1ODpzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTc1OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTc3Nj12b2lkIHdhaXRfZm9yX293bmVyX2V4aXRpbmcoaW50IHJldCwgc3RydWN0IHRhc2tfc3RydWN0ICpleGl0aW5nKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04MDAtLyoqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4MDE6ICogX19mdXRleF91bnF1ZXVlKCkgLSBSZW1vdmUgdGhlIGZ1dGV4X3EgZnJvbSBpdHMgZnV0ZXhfaGFzaF9idWNrZXRcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwMi0gKiBAcTpcXHRUaGUgZnV0ZXhfcSB0byB1bnF1ZXVlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTgwNj12b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwNy17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4MDg6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgwOS1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODEzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODE0OlxcdGhiID0gY29udGFpbmVyX29mKHEtXFx1MDAzZWxvY2tfcHRyLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQsIGxvY2spO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtODE1LVxcdHBsaXN0X2RlbChcXHUwMDI2cS1cXHUwMDNlbGlzdCwgXFx1MDAyNmhiLVxcdTAwM2VjaGFpbik7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgxOS0vKiBUaGUga2V5IG11c3QgYmUgYWxyZWFkeSBzdG9yZWQgaW4gcS1cXHUwMDNla2V5LiAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODIwOnZvaWQgZnV0ZXhfcV9sb2NrKHN0cnVjdCBmdXRleF9xICpxLCBzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODIxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtODM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6ODM4OnZvaWQgZnV0ZXhfcV91bmxvY2soc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTgzOS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTg0My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjg0NDp2b2lkIF9fZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NDUtXFx0XFx0ICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjQtLyoqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo4NjU6ICogZnV0ZXhfdW5xdWV1ZSgpIC0gUmVtb3ZlIHRoZSBmdXRleF9xIGZyb20gaXRzIGZ1dGV4X2hhc2hfYnVja2V0XFxua2VybmVsL2Z1dGV4L2NvcmUuYy04NjYtICogQHE6XFx0VGhlIGZ1dGV4X3EgdG8gdW5xdWV1ZVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzQxPXN0YXRpYyB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzNDctXFx0LypcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzNDg6XFx0ICogVGhlIG11dGV4IG1tX3N0cnVjdDo6ZnV0ZXhfaGFzaF9sb2NrIG1pZ2h0IGJlIGFjcXVpcmVkLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM0OS1cXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2MD12b2lkIGZ1dGV4X2V4aXRfcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU2Ni1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1Njc6c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Njgte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjgwPXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5Ni1cXHQgKlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcXHQgKiBmdXRleF9oYXNoKClcXHRcXHRcXHRfX2Z1dGV4X3Bpdm90X2hhc2goKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY5OC1cXHQgKiAgIGd1YXJkKHJjdSk7XFx0XFx0ICBndWFyZChtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDAtXFx0ICpcXHRcXHRcXHRcXHQgIHJjdV9hc3NpZ25fcG9pbnRlcihcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzAxOlxcdCAqXFx0XFx0XFx0XFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAyLVxcdCAqXFx0XFx0XFx0XFx0ICBmdXRleF9yZWZfZHJvcCgpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NTQ9c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzY1LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc2NjpzdGF0aWMgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc2Ny17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzczOnZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc3NC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3ODQ9c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4MDQ6c3RhdGljIGJvb2wgZnV0ZXhfaGFzaF9sZXNzKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmEsXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODA1LVxcdFxcdFxcdCAgICBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpiKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODcwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBoYXNoX3Nsb3RzOyBpKyspXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODcxOlxcdFxcdGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoXFx1MDAyNmZwaC1cXHUwMDNlcXVldWVzW2ldKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4NzItXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MTMtXFx0XFx0XFx0XFx0ICovXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTE0OlxcdFxcdFxcdFxcdGlmIChmdXRleF9oYXNoX2xlc3MobmV3LCBmcGgpKSB7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTE1LVxcdFxcdFxcdFxcdFxcdGZyZWUgPSBuZXc7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTYyLVxcdGJ1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oNCAqIHRocmVhZHMpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2MzpcXHRidWNrZXRzID0gY2xhbXAoYnVja2V0cywgMTYsIGZ1dGV4X2hhc2htYXNrICsgMSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY0LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk2ODpcXHRyZXR1cm4gZnV0ZXhfaGFzaF9hbGxvY2F0ZShidWNrZXRzLCAwKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NzE6c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODM6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NDpzdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGFzaF9pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTg1LSNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTgte1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxOTpcXHRmdXRleF9oYXNoX2luaXRfbW0oXFx1MDAyNm1tLVxcdTAwM2VmdXRleCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDIwLVxcdGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4KTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyMy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAzMzpcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzQtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzYtXFx0Y2FzZSBQUl9GVVRFWF9IQVNIX0dFVF9TTE9UUzpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMzc6XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9nZXRfc2xvdHMoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwNDc9c3RhdGljIGludCBfX2luaXQgZnV0ZXhfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDYwLSNlbmRpZlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjA2MTpcXHRmdXRleF9oYXNoc2hpZnQgPSBpbG9nMihoYXNoc2l6ZSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDYyOlxcdHNpemUgPSBzaXplb2Yoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0KSAqIGhhc2hzaXplO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2My1cXHRvcmRlciA9IGdldF9vcmRlcihzaXplKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA2NS1cXHRmb3JfZWFjaF9ub2RlKG4pIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwNjY6XFx0XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICp0YWJsZTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNjctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzUtXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGhhc2hzaXplOyBpKyspXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDc2OlxcdFxcdFxcdGZ1dGV4X2hhc2hfYnVja2V0X2luaXQoXFx1MDAyNnRhYmxlW2ldKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwNzctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwODAtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDgxOlxcdGZ1dGV4X2hhc2htYXNrID0gaGFzaHNpemUgLSAxO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjA4Mi1cXHRwcl9pbmZvKFxcXCJmdXRleCBoYXNoIHRhYmxlIGVudHJpZXM6ICVsdSAoJWx1IGJ5dGVzIG9uICVkIE5VTUEgbm9kZXMsIHRvdGFsICVsdSBLaUIsICVzKS5cXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0xMzc9c3RhdGljIGlubGluZSBib29sIGZ1dGV4X2tleV9pc19wcml2YXRlKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMTUwLSAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oOjE1MTpzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQge1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTE1Mi1cXHRhdG9taWNfdCB3YWl0ZXJzO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQxPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIHtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDI6XFx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDMtXFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjUyPXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCkgeyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTQtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU1OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjU3PURFRklORV9DTEFTUyhoYnIsIHN0cnVjdCBmdXRleF9idWNrZXRfcmVmLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OC1cXHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTk6XFx0ICAgICBmdXRleF9oYXNoKGtleSksIHVuaW9uIGZ1dGV4X2tleSAqa2V5KTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yODc9ZXh0ZXJuIGludCBmYXVsdF9pbl91c2VyX3dyaXRlYWJsZSh1MzIgX191c2VyICp1YWRkcik7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mjg4OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcSAqZnV0ZXhfdG9wX3dhaXRlcihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjg5LVxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzA4PWV4dGVybiB2b2lkIF9fZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzA5OmV4dGVybiB2b2lkIF9fZnV0ZXhfcXVldWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzEwLVxcdFxcdFxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MzExPWV4dGVybiBpbnQgZnV0ZXhfdW5xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMTMtLyoqXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzE0OiAqIGZ1dGV4X3F1ZXVlKCkgLSBFbnF1ZXVlIHRoZSBmdXRleF9xIG9uIHRoZSBmdXRleF9oYXNoX2J1Y2tldFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTMxNS0gKiBAcTpcXHRUaGUgZnV0ZXhfcSB0byBlbnF1ZXVlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjctICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzI4OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9xdWV1ZShzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zMjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTM0MD1leHRlcm4gdm9pZCB3YWl0X2Zvcl9vd25lcl9leGl0aW5nKGludCByZXQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXhpdGluZyk7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNDQtICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzQ1OnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2luYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM0Ni17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNTktICovXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzYwOnN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYl93YWl0ZXJzX2RlYyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNjYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzY3OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hiX3dhaXRlcnNfcGVuZGluZyhzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiKVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTM2OC17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zNzktXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MzgwOmV4dGVybiB2b2lkIGZ1dGV4X3FfbG9jayhzdHJ1Y3QgZnV0ZXhfcSAqcSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODEtXFx0X19hY3F1aXJlcyhcXHUwMDI2aGItXFx1MDAzZWxvY2spXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODMtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg0OmV4dGVybiB2b2lkIGZ1dGV4X3FfdW5sb2NrKHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg1LVxcdF9fcmVsZWFzZXMoXFx1MDAyNmhiLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0zODYtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6Mzg3OmV4dGVybiBpbnQgZnV0ZXhfbG9ja19waV9hdG9taWModTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIsXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMzg4LVxcdFxcdFxcdFxcdHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9NDAyPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjQwMzpkb3VibGVfbG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDA0LVxcdF9fYWNxdWlyZXMoXFx1MDAyNmhiMS1cXHUwMDNlbG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTQxNj1zdGF0aWMgaW5saW5lIHZvaWRcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDo0MTc6ZG91YmxlX3VubG9ja19oYihzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiMSwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIpXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtNDE4LVxcdF9fcmVsZWFzZXMoXFx1MDAyNmhiMS1cXHUwMDNlbG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTQ3Nj1zdGF0aWMgaW50IGxvY2tfcGlfdXBkYXRlX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgdTMyIHV2YWwsIHUzMiBuZXd2YWwpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTUtICovXFxua2VybmVsL2Z1dGV4L3BpLmM6NTE2OmludCBmdXRleF9sb2NrX3BpX2F0b21pYyh1MzIgX191c2VyICp1YWRkciwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcGkuYy01MTctXFx0XFx0XFx0IHVuaW9uIGZ1dGV4X2tleSAqa2V5LFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03NT1zdGF0aWMgaW5saW5lXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo3Njp2b2lkIHJlcXVldWVfZnV0ZXgoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIxLFxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6Nzc6XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MilcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTc4LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTAtXFx0XFx0LypcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jOjkxOlxcdFxcdCAqIGhiMSBhbmQgaGIyIGJlbG9uZyB0byB0aGUgc2FtZSBmdXRleF9oYXNoX2J1Y2tldF9wcml2YXRlXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05Mi1cXHRcXHQgKiBiZWNhdXNlIGlmIHdlIG1hbmFnZWQgZ2V0IGEgcmVmZXJlbmNlIG9uIGhiMSB0aGVuIGl0IGNhbid0IGJlXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyMzE6XFx0XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYilcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTIzMi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTI4MD1zdGF0aWMgaW50XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyODE6ZnV0ZXhfcHJveHlfdHJ5bG9ja19hdG9taWModTMyIF9fdXNlciAqcGlmdXRleCwgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjEsXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzoyODI6XFx0XFx0XFx0ICAgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjIsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MSxcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTI4My1cXHRcXHRcXHQgICB1bmlvbiBmdXRleF9rZXkgKmtleTIsIHN0cnVjdCBmdXRleF9waV9zdGF0ZSAqKnBzLFxcbi0tXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03MTI9c3RhdGljIGlubGluZVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6NzEzOmludCBoYW5kbGVfZWFybHlfcmVxdWV1ZV9waV93YWtldXAoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYixcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTcxNC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnV0ZXhfcSAqcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDE6NTEuMzA1OTI1ODcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTI0NjczMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBgZnV0ZXhfaGFzaGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnV0ZXhfaGFzaGAuIEl0J3MgZmxhZ2dlZCBhcyBhbiAqZXhwb3J0ZWQgc3ltYm9sKj8gVGhhdCBzZWVtcyBvZGQsIGdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1vZHVsZSBpbnRlcmFjdGlvbi4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQuIEFoLCByaWdodCwgaXQncyAqbm90KiBleHBvcnRlZCB0byBtb2R1bGVzLCBidXQgaXQgKmlzKiBhIGdsb2JhbCBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZ1dGV4X2hhc2hgIGl0c2VsZiB3aXRoaW4gdGhhdCBjb3JlIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMgaW4gdGhpcyBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjU0LjU5ODM5NTk5N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDE5NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjMzPXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjYwOnN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzg6c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQxOjU0LjY4MjQ0MzcwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODM0MTYzNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRnV0ZXggSGFzaCBQaXZvdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyB1c2VmdWwuIExldCdzIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgc3ltYm9scy4gSSBzZWUgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYGZ1dGV4X2hhc2hgLCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYXMgdGhlIHByaW1hcnkgZm9jdXMgcG9pbnRzLiBcblxuUmlnaHQsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGlzIGNhbGxlZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5IGZyb20gYGNvcHlfcHJvY2Vzc2Agd2l0aGluIGBrZXJuZWwvZm9yay5jYCwgYW5kIGBmdXRleF9oYXNoX3ByY3RsYCBpcyB0cmlnZ2VyZWQgYnkgYHN5c19wcmN0bGAuIFRoZXNlIGxvb2sgbGlrZSBzb2xpZCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMgdGhlIHNvbGUgZW5hYmxlci4gWWVwLCBpdCBpcy4gQnV0LCBob2xkIG9uLi4uIGBGVVRFWF9QUklWQVRFX0hBU0hgIGRlcGVuZHMgb24gYEZVVEVYYC4gU28sIGJvdGggYEZVVEVYYCBhbmQgYEZVVEVYX1BSSVZBVEVfSEFTSGAgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgRW5hYmxlQ29uZmlncy5cblxuTGV0J3MgcmUtZXhhbWluZSB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIEl0IHNlZW1zIHRvIG1vZGlmeSBgX19mdXRleF9waXZvdF9oYXNoYCwgYGZ1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBjb25uZWN0ZWQgdG8gdGhlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIG9mIHRoZSBwcml2YXRlIGhhc2ggdGFibGUuIFxuXG5GdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgaW52b2x2ZTpcblxuMS4gIEludHJvZHVjaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGBtbXBoLVx1MDAzZWhhc2hfbmV3YC5cbjIuICBSZXBsYWNpbmcgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCB3aXRoIGBndWFyZChyY3UpKClgIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC5cbjMuICBBZGRpbmcgYHNtcF9ybWIoKWAgd2l0aGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC5cblxuVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGZ1dGV4IHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGluIHRoZSBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcuIENvbnNpZGVyaW5nIHRoZSBjb3JlIG1vZGlmaWNhdGlvbnMsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGV4cGxvcmUgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cblRvIHN1bW1hcml6ZSwgaGVyZSBhcmUgdGhlIGZvY3VzZWQgc3ltYm9scyBhZ2Fpbjpcbi0gICBgZnV0ZXhfaGFzaF9wcmN0bGBcbi0gICBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YFxuLSAgIGBmdXRleF9oYXNoYFxuLSAgIGBmdXRleF9wcml2YXRlX2hhc2hgXG5cbldhaXQgYSBtaW51dGUsIGlzIGBmdXRleF9wcml2YXRlX2hhc2hgIGFsc28gZ2xvYmFsPyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjay4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA5NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo0MjowMS41MTY2MTA3MjVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxODA1NTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggXFxcXCpmdXRleF9wcml2YXRlX2hhc2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMzM6c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDEuNTc4NDIwODk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3NzQzMDc4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV0ZXggUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBpcyBkZWZpbml0ZWx5IGEgZ2xvYmFsIGZ1bmN0aW9uLCBnb29kIHRvIGNvbmZpcm0uIE5vdywgbGV0J3Mgc2VlIGFib3V0IHRoZSBjb25maWd1cmF0aW9uLiBUaGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBwcmV0dHkgY2xlYXI6IGBGVVRFWF9QUklWQVRFX0hBU0hgIGhpbmdlcyBvbiBgRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVgLiBHaXZlbiB0aGF0IHdlIGhhdmUgYEZVVEVYYCwgdGhhdCBtZWFucywgaWYgYWxsIGlzIGNvcnJlY3QsIGBGVVRFWF9QUklWQVRFX0hBU0hgIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5BbHJpZ2h0LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlYXNvbmluZyBoZXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFib3V0IG1vZGlmeWluZyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljICp3aXRoaW4qIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUncyBwaXZvdGluZyBtZWNoYW5pc20uIFRoZXkncmUgdG91Y2hpbmcgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAsIHNvIGl0IHNlZW1zIHF1aXRlIGxvdy1sZXZlbC4gVGhlIG1haW4gY2hhbmdlIGlzIHJlcGxhY2luZyBhIG11dGV4IHdpdGggUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBhbmQgbWVtb3J5IGJhcnJpZXJzLCBzcGVjaWZpY2FsbHkgYHNtcF9ybWJgLCBgUkVBRF9PTkNFYCwgYW5kIGBXUklURV9PTkNFYC4gVGhpcyBpbmRpY2F0ZXMgYW4gYXR0ZW1wdCB0byBvcHRpbWl6ZSBvciBwb3RlbnRpYWxseSBmaXggcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgcHJvY2Vzc2VzIG9mIHRoZSBmdXRleCBoYXNoLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhIVxuXG5CZWNhdXNlIHRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIGFuZCBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgb3IgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIGl0IG1ha2VzIHRoZW0gYSBoaWdoLXByaW9yaXR5IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBjbGVhciBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoOlxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgIC0gQWJzb2x1dGVseSwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHM6IFtcImZ1dGV4X2hhc2hfcHJjdGxcIiwgXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIiwgXCJmdXRleF9oYXNoXCIsIFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCJdYCAtIFRoZXNlIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMuXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkZVVEVYXCIsIFwiRlVURVhfUFJJVkFURV9IQVNIXCJdYCAtIFRoZXNlIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSBmb3IgdGhpcyB0byBiZSByZWxldmFudC5cbiogICBgUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cImAgLSBUaGUgcmF0aW9uYWxlIGJlaGluZCBteSBjaG9pY2VzIGlzIG91dGxpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5OSwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguMzUyNzMxMjQxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NjIyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCIsXG4gICAgXCJmdXRleF9wcml2YXRlX2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGVVRFWFwiLFxuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCIsXG4gICAgXCJmdXRleF9oYXNoXCIsXG4gICAgXCJmdXRleF9wcml2YXRlX2hhc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgcGl2b3RpbmcgbWVjaGFuaXNtLCByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIG9wdGltaXplIG9yIGZpeCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgZnV0ZXggc3Vic3lzdGVtIHJlYWNoYWJsZSB2aWEgcHJjdGwgb3IgcHJvY2VzcyBjcmVhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguNDc4MzYwNjU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNzc5NjM1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQyOjA4LjQ3ODg5NDE3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDMyNzI1ODA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2MWI0ZmYzNDMyNDMzZDM1YTQ1YTlhMTMyMzY5OTMyNWNhZWY2NTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo0MDo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleC9jb3JlLmMgYi9rZXJuZWwvZnV0ZXgvY29yZS5jXG5pbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xuKysrIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuQEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKlxuIFx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLVx1MDAzZWhhc2gsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbXBoLVx1MDAzZWxvY2spKTtcbiBcdGlmIChmcGgpIHtcbiBcdFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XG4tXHRcdFx0bW1waC1cdTAwM2VoYXNoX25ldyA9IG5ldztcbitcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXG4gXHRcdGZwaCA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuIFx0XHRpZiAoZnBoKSB7XG4tXHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO1xuK1x0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE3ODYsMTIgKzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4rXHRndWFyZChyY3UpKCk7XG4gXG4tXHRpZiAoIW1tcGgtXHUwMDNlaGFzaF9uZXcpXG4rXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cdTAwM2VoYXNoKTtcbitcdC8qXG4rXHQgKiBFbnN1cmUgdGhhdCBpZiB3ZSBzZWUgdGhlIG5ldyBoYXNoLCB3ZSB3aWxsIGFsc28gc2VlIHRoZSBjbGVhcmVkXG4rXHQgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluXG4rXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbitcdCAqL1xuK1x0c21wX3JtYigpO1xuK1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyArMTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRjdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsXG4gXHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spKTtcbiBcdFx0bmV3ID0gbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XG4tXHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXG4gXHRcdGlmIChmcGgpIHtcbiBcdFx0XHRpZiAoY3VyIFx1MDAyNlx1MDAyNiAhY3VyLVx1MDAzZWhhc2hfbWFzaykge1xuQEAgLTE4ODksNyArMTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIW5ldykge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NDI6MDguNDc4ODk0ODY4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzI3MjI5MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmN1cnJlbmN5IEZpeDogRnV0ZXggQ29yZSBQYXRjaCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBvcHRpbWl6YXRpb24uIFRoZXkncmUgY2hhbmdpbmcgdGhlIHdheSBgbW1waC1cdTAwM2VoYXNoX25ld2AgKG9yIGBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ld2AsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCkgaXMgYWNjZXNzZWQuIEl0J3MgYWxsIGFib3V0IGF0b21pY2l0eSBhbmQgbWVtb3J5IGJhcnJpZXJzLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSdyZSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAuICBUaGlzIGlzIGEgdGV4dGJvb2sgdGVjaG5pcXVlIGZvciBlbnN1cmluZyBhdG9taWMgYWNjZXNzIHRvIHNoYXJlZCB2YXJpYWJsZXMgYWNyb3NzIENQVXMsIHByZXZlbnRpbmcgdGVhcmluZyBvciBpbmNvcnJlY3QgdmFsdWVzIGR1ZSB0byBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZygpYC4gVGhleSd2ZSBzd2FwcGVkIGEgbXV0ZXggKGBndWFyZChtdXRleCkoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKWApIGZvciBhbiBSQ1UgKGBndWFyZChyY3UpKCk7YCksIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdCB0byByZWR1Y2UgbG9jayBjb250ZW50aW9uIGFuZCBpdCdzIGFjY29tcGFuaWVkIGJ5IGFuIGBzbXBfcm1iKClgIG1lbW9yeSBiYXJyaWVyLiBUaGUgYHNtcF9ybWIoKWAgYW5kIGByY3VfZGVyZWZlcmVuY2UoKWAgY2FsbHMgZW5zdXJlIHRoYXQgaWYgdGhlIG5ldyBoYXNoIGlzIHNlZW4sIHNvIGlzIHRoZSBjbGVhcmVkIHBvaW50ZXIuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246XG5cbiogICBUaGUgY29kZSBpcyByZXBsYWNpbmcgYG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7YCB3aXRoIGBXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7YFxuKiAgIEFuZCBgbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMO2Agd2l0aCBgV1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7YFxuKiAgIEluIGBmdXRleF9waXZvdF9wZW5kaW5nKClgLCB0aGV5IHN3aXRjaCBmcm9tIGEgbXV0ZXggdG8gUkNVIGFuZCBpbnRyb2R1Y2UgYW4gYHNtcF9ybWIoKWAgYWZ0ZXIgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCBhbmQgYFJFQURfT05DRSgpYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUgb3JkZXJpbmcgb2YgdGhlIG1lbW9yeSBhY2Nlc3MuXG5cblRoZXJlIGFyZSBubyBtYWpvciBhcmNoaXRlY3R1cmFsIGNoYW5nZXMsIG5vIG5ldyBhbGxvY2F0aW9ucywgYW5kIG5vdGhpbmcgdXNlci1zcGFjZSB2aXNpYmxlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCB0byB0aGUga2VybmVsJ3MgZnV0ZXggaW1wbGVtZW50YXRpb24uXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcywgdGhlIHBvdGVudGlhbCBmb3IgaW50cm9kdWNpbmcgYnVncyBpcyBjb25maW5lZCB0byBkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2NraW5nIGlzc3VlcywgYWxsIG9mIHdoaWNoIHNob3VsZCBiZSByZWFkaWx5IGRldGVjdGVkIGJ5IGV4aXN0aW5nIGtlcm5lbCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBUaGUgcGF0Y2ggaXMgdW5saWtlbHkgdG8gZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gIEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG15IGZyaWVuZHMgaGVyZS4gU28sIG15IGNvbmNsdXNpb246IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCdzIGEgY2xlYW4sIGZvY3VzZWQgY29uY3VycmVuY3kgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzLCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjQyOjE4LjgwNjEyNzExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgZnV0ZXggY29yZSwgc3BlY2lmaWNhbGx5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBhZGRpbmcgUkVBRF9PTkNFL1dSSVRFX09OQ0UgYW5kIGEgbWVtb3J5IGJhcnJpZXIgKHNtcF9ybWIpIGZvciBhY2Nlc3NpbmcgdGhlIGBoYXNoX25ld2AgcG9pbnRlci4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGRhdGEgcmFjZXMgYW5kIGxvY2sgY29udGVudGlvbi4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja2luZyBvciBpbml0aWFsaXphdGlvbiBsb2dpYy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMgKGRhdGEgcmFjZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGJ1Z3MpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0NTQU4sIEtBU0FOLCBhbmQgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIGZ1dGV4IGNvcmUsIHNwZWNpZmljYWxseSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgYWRkaW5nIFJFQURfT05DRS9XUklURV9PTkNFIGFuZCBhIG1lbW9yeSBiYXJyaWVyIChzbXBfcm1iKSBmb3IgYWNjZXNzaW5nIHRoZSBgaGFzaF9uZXdgIHBvaW50ZXIuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBkYXRhIHJhY2VzIGFuZCBsb2NrIGNvbnRlbnRpb24uIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBib3VuZHMgY2hlY2tpbmcgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzIChkYXRhIHJhY2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBidWdzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtDU0FOLCBLQVNBTiwgYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrfxw[1] Phase: Succeeded StartedAt: 2026-08-13 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[2] Phase: Succeeded StartedAt: 2026-08-13 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","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","futex_private_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"d111d478-973f-4901-88c4-3a717b14dd0b","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-13 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:45 +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","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","futex_private_hash"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"d111d478-973f-4901-88c4-3a717b14dd0b","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-workflowzrfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","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","futex_private_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"d111d478-973f-4901-88c4-3a717b14dd0b","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzrfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","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","futex_private_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"d111d478-973f-4901-88c4-3a717b14dd0b","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 06:42:31 +0000 UTC FinishedAt: 2026-08-13 06:42:37 +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","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{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzrfxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","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","futex_private_hash"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX","FUTEX_PRIVATE_HASH"],"series_id":"d111d478-973f-4901-88c4-3a717b14dd0b","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Error StartedAt: 2026-08-13 06:42:45 +0000 UTC FinishedAt: 2026-08-13 06:42:45 +0000 UTC Input: nil Output: nil