Name: series-workflowqpxsx Phase: Succeeded StartedAt: 2026-08-13 06:54:21 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[0] Phase: Succeeded StartedAt: 2026-08-13 06:54:21 +0000 UTC FinishedAt: 2026-08-13 06:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 06:54:21 +0000 UTC FinishedAt: 2026-08-13 06:57:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "79615642-c5fb-45c2-94a3-b0ef4bdf51e7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgbG9naWMgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4NDdhYzQzZTQ2Mjg5MDljOTI5OThlNjM5MGY5YjJkOWQ2MDc3YmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1NTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuJiM0MztcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuJiM0MztcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbiYjNDM7XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoKIAlmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtJmd0O2hhc2gsIGxvY2tkZXBfaXNfaGVsZCgmYW1wO21tcGgtJmd0O2xvY2spKTsKIAlpZiAoZnBoKSB7CiAJCWlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkgewotCQkJbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJV1JJVEVfT05DRShtbXBoLSZndDtoYXNoX25ldywgbmV3KTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkJZnBoID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwogCQlpZiAoZnBoKSB7Ci0JCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAkJCV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTsKIAkJfQogCX0KQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIApAQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQljdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLSZndDtmdXRleC5waGFzaC5oYXNoLAogCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoLmxvY2spKTsKIAkJbmV3ID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwotCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCiAJCWlmIChmcGgpIHsKIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhY3VyLSZndDtoYXNoX21hc2spIHsKQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCQkgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuCiAJCQkJICovCiAJCQkJZnJlZSA9IGZwaDsKLQkJCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIW5ldykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQmIzM5O3MgbW9kaWZ5aW5nIGFjY2VzcyB0byBgbW1waC0mZ3Q7aGFzaF9uZXdgIOKAkyBzcGVjaWZpY2FsbHkgdXNpbmcgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGNvbmN1cnJlbmN5IGNvbmNlcm4uIEdvb2QgY2F0Y2ggb24gdGhlIGRldmVsb3BlcnMmIzM5OyBwYXJ0OyBpdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBmdXRleCBwcml2YXRlIGhhc2guIFRoZXkmIzM5O3ZlIGFsc28gc3dpdGNoZWQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHRvIHVzZSBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAsIGFsb25nIHdpdGggYW4gYWRkZWQgYHNtcF9ybWIoKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyBSQ1UtYmFzZWQgcHJvdGVjdGlvbi4KClRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlOiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLiBZZXAsIGNvbmZpcm1lZCwgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBmb3IgZnV0ZXggcHJpdmF0ZSBoYXNoZXMuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyAodGhlIGZ1dGV4IHN1YnN5c3RlbSksIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IHRob3JvdWdobHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLiBGcm9tIHRoZSBwYXRjaCBhbmQgYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyB0aGVzZTogYF9fZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9oYXNoYCwgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBJbXBvcnRhbnQgdG8gbm90ZSBpZiB0aGV5IGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIEFoLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFRoaXMgbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB3aXRoaW4gdGhlIGZpbGUuIE9rYXksIEkgbmVlZCB0byBzZWUgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBwb2ludHMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4My1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg1LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc3LWFnYWluOlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4Olx0XHR3YWl0X3Zhcl9ldmVudChtbSwgZnV0ZXhfcGl2b3RfcGVuZGluZyhtbSkpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIEZ1dGV4IEhhc2hpbmcgYW5kIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGJlaW5nIGNhbGxlZCwgYW5kIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2FsbGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIGBmdXRleF9waXZvdF9wZW5kaW5nYCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbiBvciBtYW5hZ2VtZW50IG9mIHBlbmRpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGEgZnV0ZXgsIGJ1dCB0byByZWFsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWA/JiMzNDsuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggdXBzdHJlYW0gZnJvbSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMga2V5LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHN0b3J5LiBJcyBpdCBwYXJ0IG9mIHRoZSBpbml0aWFsIGZ1dGV4IHNldHVwLCBhIHJlYWxsb2NhdGlvbiBzdHJhdGVneSwgb3IgdHJpZ2dlcmVkIGJ5IHNvbWUgc3BlY2lmaWMgY29udGVudGlvdXMgc2l0dWF0aW9uPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBGdXRleCBIYXNoaW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1dGV4IGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkIOKAkyBjZW50cmFsaXppbmcgYWxsb2NhdGlvbiBsb2dpYyBpcyBnb29kIGRlc2lnbi4gSXQgbGV0cyB1cyBjb250cm9sIHJlc291cmNlIHVzYWdlIGFuZCBoYW5kbGUgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIHBhdGhzIGNvbnNpc3RlbnRseS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgd2hvJiMzOTtzIHVzaW5nIHRoZSBoYXNoIHRhYmxlJiMzOTtzIHBpdm90PyBGcm9tIHdoYXQgSSBzZWUsIGl0IGxvb2tzIGxpa2UgYGZ1dGV4X3Bpdm90X2hhc2hgIHdpbGwgYmUgYSBjcml0aWNhbCBmdW5jdGlvbiB0byBhbmFseXNlLCBJIHdhbnQgdG8gZmluZCBvdXQgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGUgcGl2b3QgZnVuY3Rpb24sIHRvIHNlZSBob3cgdGhhdCBwaXZvdCBpcyB1c2VkLCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjE9c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMjg6XHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1NjpcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3MjpcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVx1MDAzZXByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzMtXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcdCAqIGZ1dGV4X2hhc2goKVx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTgtXHQgKiAgIGd1YXJkKHJjdSk7XHRcdCAgZ3VhcmQobW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNzg0PXN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1Olx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTYtXHQgKi9cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTMxOlx0XHRcdGlmICghX19mdXRleF9waXZvdF9oYXNoKG1tLCBuZXcpIFx1MDAyNlx1MDAyNiBjdXN0b20pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzItXHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnV0ZXggSGFzaGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBmdXRleCBoYXNoaW5nIHNpdHVhdGlvbi4gSXQgbG9va3MgbGlrZSBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgIGJvdGggcmVseSBvbiBgZnV0ZXhfcGl2b3RfaGFzaGAgaW50ZXJuYWxseS4gIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJlbGF0aW9uc2hpcC4gIFRoZW4gd2Ugc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGNhbGxzIGBfX2Z1dGV4X3Bpdm90X2hhc2hgLiBTbywgZXNzZW50aWFsbHksIHRoZXkgYWxsIHNlZW0gY29ubmVjdGVkIHVuZGVyIHRoZSBob29kLiBOb3csIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBwdWJsaWMtZmFjaW5nLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBmdW5jdGlvbnMgd2UgbmVlZCB0byByZWFsbHkgYmUgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X3ByaXZhdGVfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaGAuIFRpbWUgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgd2FpdCBhIG1pbnV0ZS4gSSYjMzk7bSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBsaXN0ZWQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcuIEJ1dCB0aGUgcmVhbCBzdXJwcmlzZT8gSXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24hIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1dGV4IGhhc2ggdGFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5LCBob3cgaXQgY2FuIGJlIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBzZWUgd2hhdCBpdCBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyBNZWNoYW5pc21zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgZnVuY3Rpb24gd2l0aGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgY29udHJpYnV0ZSB0byBlZmZpY2llbnQgbG9va3VwIGFuZCBtYW5hZ2VtZW50IG9mIGZ1dGV4ZXMuIEFyZSB0aGV5IHNlcGFyYXRlIGhhc2ggdGFibGVzLCBvciBpcyBvbmUgYSBzdWJzZXQvdmFyaWFudCBvZiB0aGUgb3RoZXI/IEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBBcmUgdGhlc2UgaGFzaCB0YWJsZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBwcml2YXRlIGFuZCBzaGFyZWQgZnV0ZXhlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgcmVzb2x2ZSBjb2xsaXNpb25zLCBhbmQgaG93IHRoZSBzaXppbmcgb2YgdGhlc2UgdGFibGVzIGltcGFjdHMgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gSSB3aWxsIHdhbnQgdG8gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIHR3bywgdW5kZXJzdGFuZGluZyB0aGVpciBpbmRpdmlkdWFsIHJvbGVzIGFuZCBpZiB0aGV5IGNhbiBoYXZlIGFuIGVmZmVjdCBvbiBhIHNwZWNpZmljIHN5c3RlbSBvciBhcHBsaWNhdGlvbi4gVGhpcyBpbnZvbHZlcyBhc3Nlc3NpbmcgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNob3NlbiBoYXNoIGZ1bmN0aW9uIGFuZCBleHBsb3JpbmcgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIGtlcm5lbCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTU5PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtNjgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjY5OnN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2gge1xua2VybmVsL2Z1dGV4L2NvcmUuYy03MC1cdGludFx0XHRzdGF0ZTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEyOT1zdGF0aWMgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTMwOl9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMi0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzM6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2dldChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzU6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM2LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzc9ZW51bSB7IEZSX1BFUkNQVSA9IDAsIEZSX0FUT01JQyB9O1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzOTpzdGF0aWMgYm9vbCBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE0My1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTQ0OnZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE0NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1MTpfX2Z1dGV4X2hhc2hfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTIte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTYwLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjE6c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjI6XHRcdFx0XHQgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjMte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ny1cdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTg6XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5OS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjIyLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSB7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMzpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjQtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzNC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDYtXHRzY29wZWRfZ3VhcmQocmN1KSB7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI0NzpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDgtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1MzpcdFx0aWYgKGZ1dGV4X3ByaXZhdGVfaGFzaF9nZXQoZnBoKSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU0LVx0XHRcdHJldHVybiBmcGg7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNjA9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2My1cdHNjb3BlZF9ndWFyZChyY3UpIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY0Olx0XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGggPSBOVUxMO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjUtXHRcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2OTpcdFx0aWYgKCFmcGggfHwgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzAtXHRcdFx0cmV0dXJuIChzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZil7IC5oYiA9IGhiLCAuZnBoID0gZnBoIH07XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjc9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM2ODpfX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU4OT1zdGF0aWMgdm9pZCBmdXRleF9yZWZfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1OTAtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1OTE6c3RhdGljIHZvaWQgX19mdXRleF9yZWZfYXRvbWljX2JlZ2luKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU5Mi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjEyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjEzOnN0YXRpYyB2b2lkIF9fZnV0ZXhfcmVmX2F0b21pY19lbmQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjE0LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2NTU9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjU3LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG1tX3N0cnVjdCwgZnV0ZXgucGhhc2gucmN1KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY1ODpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2NTktXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjc5LSAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjgwOnN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY4MS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzA1LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwNjpcdCAqICAgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpOyAvLyBPT1BTXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDctXHQgKlxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcyNjpzdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNy17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzM5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzQwOnN0YXRpYyBib29sIGZ1dGV4X3JlZl9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzQxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NTMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NTQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzU1LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzQte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzc1Olx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzc2LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4Ni1cdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg3Olx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg4LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNDpzdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNTpcdFx0XHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwNi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgzMC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgzMTpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgzMi1cdGJvb2wgY3VzdG9tID0gZmxhZ3MgXHUwMDI2IEZIX0NVU1RPTTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4ODEtXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg4MjpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnJlZSBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4ODM6XHRcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmN1ciwgKm5ldztcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MjgtXHRcdFx0ICogV2lsbCBzZXQgbW0tXHUwMDNlZnV0ZXgucGhhc2gubmV3X2hhc2ggb24gZmFpbHVyZTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkyOTpcdFx0XHQgKiBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KCkgd2lsbCB0cnkgYWdhaW4uXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzAtXHRcdFx0ICovXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTM4PWludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDAtXHR1bnNpZ25lZCBpbnQgdGhyZWFkcywgYnVja2V0cywgY3VycmVudF9idWNrZXRzID0gMDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk0MTpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0Mi1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTcyLXtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk3MzpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3NC1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yMDg9c3RydWN0IGZ1dGV4X3Ege1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMC1cdGF0b21pY190IHJlcXVldWVfc3RhdGU7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyMjE6XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpkcm9wX2ZwaDtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMi0jaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQyLVx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0MzpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NC19O1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ni0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ3OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ4OmV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1MC0jZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjUxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKSB7IH1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1My0jZW5kaWZcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTg6XHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OS1cdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNjE6REVGSU5FX0NMQVNTKHByaXZhdGVfaGFzaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYyOlx0ICAgICBpZiAoX1QpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QpLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYzOlx0ICAgICBmdXRleF9wcml2YXRlX2hhc2gobW0pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjQtXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9OTIzPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTEwMTItXHRcdCAqL1xua2VybmVsL2Z1dGV4L3BpLmM6MTAxMzpcdFx0ZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChub19mcmVlX3B0cihoYnIuZnBoKSk7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMDE0LVx0XHQvKlxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTExMDUtXHRcdC8qIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGZyb20gZnV0ZXhfdW5sb2NrX3BpKCkgKi9cbmtlcm5lbC9mdXRleC9waS5jOjExMDY6XHRcdGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQocS5kcm9wX2ZwaCk7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTA3LVx0XHRnb3RvIG91dDtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz0xMTQxPXN0YXRpYyBpbnQgX19mdXRleF91bmxvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjIxLVx0XHRcdGlmIChmdXRleF9rZXlfaXNfcHJpdmF0ZShcdTAwMjZrZXkpKVxua2VybmVsL2Z1dGV4L3BpLmM6MTIyMjpcdFx0XHRcdHRvcF93YWl0ZXItXHUwMDNlZHJvcF9mcGggPSBmdXRleF9wcml2YXRlX2hhc2goa2V5LnByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L3BpLmMtMTIyMy1cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDQtXHRpZiAoZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSlcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjQ1Olx0XHRxLVx1MDAzZWRyb3BfZnBoID0gZnV0ZXhfcHJpdmF0ZV9oYXNoKGtleS1cdTAwM2Vwcml2YXRlLm1tKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjQ2LVx0cS1cdTAwM2Vsb2NrX3B0ciA9IFx1MDAyNmhiLVx1MDAzZWxvY2s7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03ODY9aW50IGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTA4LVx0LyogQWRkaXRpb25hbCByZWZlcmVuY2UgZnJvbSByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoKSAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MDk6XHRmdXRleF9wcml2YXRlX2hhc2hfcHV0KHEuZHJvcF9mcGgpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZnV0ZXhfaGFzaF9wcmN0bGAgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgZnV0ZXhfaGFzaF9wcmN0bGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbiBkb3duIGl0cyBvcmlnaW4uIElzIHRoaXMgZnVuY3Rpb24gY2FsbCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYHN5c19wcmN0bGAsIG9yIGFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNhbGwgcGF0aCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIHByb2Nlc3MgY29udHJvbCBtZWNoYW5pc21zLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZ1dGV4ZXMgYW5kIHRoZWlyIGhhc2ggdGFibGUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIGFuZCBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4tLVxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbi0tXG5rZXJuZWwvc3lzLmMtMjg4NC1cdGNhc2UgUFJfRlVURVhfSEFTSDpcbmtlcm5lbC9zeXMuYzoyODg1Olx0XHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XG5rZXJuZWwvc3lzLmMtMjg4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBmdXRleF9oYXNoYCBTeXN0ZW0gQ2FsbHMqKgoKUmlnaHQsIGxldCBtZSBzZWUuIEkmIzM5O3ZlIGdvdCBpdC4gYGZ1dGV4X2hhc2hfcHJjdGxgIGlzLCBhcyBJIHN1c3BlY3RlZCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIGBwcmN0bGAgaXMgY2FsbGVkIHdpdGggdGhlIGBQUl9GVVRFWF9IQVNIYCBvcHRpb24uIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN5c3RlbSBjYWxsLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXJlIGRvZXMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgY29tZSBpbnRvIHRoZSBwaWN0dXJlPyBXaGF0JiMzOTtzIHRoZSBjYWxsIHBhdGggdGhlcmU/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgYnkgYGNvcHlfcHJvY2Vzc2AsIHNwZWNpZmljYWxseSBkdXJpbmcgYGZvcmtgIGFuZCBgY2xvbmVgIG9wZXJhdGlvbnMuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYSBjb3JlIHN5c3RlbSBjYWxsIHRoYXQmIzM5O3MgdXNlZCAqYWxsKiB0aGUgdGltZS4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgYSBncmVhdCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmlvcml0eSBpcyB0byBmaW5kIGJ1Z3MgdGhhdCBjb3VsZCBiZSByZW1vdGVseSB0cmlnZ2VyZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkmIzM5O2xsIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgZGV0YWlscyBvZiBgRlVURVhfUFJJVkFURV9IQVNIYC4gRW5zdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhIHN1Y2Nlc3NmdWwgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ3JvdW5kIHdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTg2PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzMtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNDQtLyogc2FtZSBhcyBhYm92ZSBidXQgcGVyZm9ybXMgdGhlIHNsb3cgcGF0aCBmcm9tIHRoZSBhc3luYyBjb250ZXh0LiBDYW5cbi0tXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuLS1cbmtlcm5lbC9mb3JrLmM9MTIxMj1FWFBPUlRfU1lNQk9MX0dQTChtbXB1dCk7XG5rZXJuZWwvZm9yay5jLTEyMTMtXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxua2VybmVsL2ZvcmsuYy0xMjE1LXN0YXRpYyB2b2lkIG1tcHV0X2FzeW5jX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMxLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc1LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNzg9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgzOiNlbmRpZiAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM2OD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2Nz1zdGF0aWMgdm9pZCBmdXRleF9oYXNoX2J1Y2tldF9pbml0KHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqZmhiKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU3NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MTojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKSB7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQ4PWV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjUxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEZVVEVYX1BSSVZBVEVfSEFTSCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBgRlVURVhfUFJJVkFURV9IQVNIYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBzcGVjaWZpYyBzeW1ib2wgaXMgZGVmaW5lZCwgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUgZm9yIGl0cyBhY3RpdmF0aW9uLCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uLiBIb3BlZnVsbHksIGBpbml0L0tjb25maWdgIHByb3ZpZGVzIGEgY2xlYXIgYW5kIGNvbmNpc2UgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBicm91Z2h0IGludG8gcGxheS4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZpbGUgd2lsbCBwb2ludCBtZSB0byB0aGUgYnJvYWRlciBrZXJuZWwgZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyB0aGF0IHJlbHkgb24gdGhpcyBmdXRleCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGF0LCBJIGNhbiBkZWR1Y2UgdGhlIG92ZXJhbGwgcHVycG9zZSBhbmQgZGVzaWduIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQwOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTg0MTpcdFx0ICBzdXBwb3J0IGZvciBcJiMzNDtmYXN0IHVzZXJzcGFjZSBtdXRleGVzXCYjMzQ7LiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxuMTg0MjpcdFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cbjE4NDM6XHRcbjE4NDQ6XHRjb25maWcgRlVURVhfUElcbjE4NDU6XHRcdGJvb2xcbjE4NDY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IFJUX01VVEVYRVNcbjE4NDc6XHRcdGRlZmF1bHQgeVxuMTg0ODpcdFxuMTg0OTpcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbjE4NTA6XHRcdGJvb2xcbjE4NTE6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVcbjE4NTI6XHRcdGRlZmF1bHQgeVxuMTg1MzpcdFxuMTg1NDpcdGNvbmZpZyBGVVRFWF9NUE9MXG4xODU1Olx0XHRib29sXG4xODU2Olx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiBOVU1BXG4xODU3Olx0XHRkZWZhdWx0IHlcbjE4NTg6XHRcbjE4NTk6XHRjb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgbGlrZWx5IGEgY29tbW9uIHNjZW5hcmlvLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb25zLiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZSBmaXggYWRkcmVzc2VzIHRoZSByYWNlIGNvbmRpdGlvbi4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGNhbGxlZCBkdXJpbmcgZm9yaywgYGZ1dGV4X2hhc2hfcHJjdGxgIGFjY2Vzc2libGUgdmlhIGBwcmN0bGAgd2l0aCBgUFJfRlVURVhfSEFTSGAsIGFuZCB0aGVuIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAsIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiB2YXJpb3VzIGZ1dGV4IG9wZXJhdGlvbnMuCgpgZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIGl0JiMzOTtzIGEgc3BlY2lmaWMgZW50cnkgcG9pbnQgdGhyb3VnaCBgc3lzX3ByY3RsYC4gSSBzaG91bGQgYWxzbyBleGFtaW5lIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBBbmQgYWxzbyB0aGUgYGZ1dGV4X2hhc2hgIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGUsIHRvIGJ1aWxkIG91dCB0aGUgY29udGV4dC4gQWgsIHRoZXkmIzM5O3JlIGFsbCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEV4Y2VsbGVudC4KCkkgYWxzbyBzZWUgdGhhdCBgZnV0ZXhfaGFzaF9mcmVlYCBpcyBjYWxsZWQgZHVyaW5nIG1tcHV0LiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgd2hpY2ggYXJlIHN0YXRpYy4KCk15IG9yaWdpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3YXMgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYGZ1dGV4X2hhc2hgLCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAuIEJ1dCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZ1dGV4X2hhc2hgIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhcmUgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBmdXRleCBvcGVyYXRpb24uIFRoZXkgYXJlIHRvbyBnZW5lcmljLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgoKYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGEgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGZvciB0aGlzIGZlYXR1cmUsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBjYWxsZWQgZHVyaW5nIGZvcmsuIEJ1dCwgbGV0JiMzOTtzIHNlZSwgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHByb2JhYmx5IHN1ZmZpY2llbnQuIEl0IGFsbG93cyBhbGxvY2F0aW5nIGEgY3VzdG9tIGhhc2gsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGUgYnVnIGlzIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCB3aGljaCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIHdoZW4gd2FpdGluZyBmb3IgdGhlIHBpdm90IHRvIGNvbXBsZXRlLiBBbmQgdGhlIHBpdm90IGlzIGluaXRpYXRlZCBieSBlaXRoZXIgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIG9yIGBmdXRleF9waXZvdF9oYXNoYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAuCgpTbywgYGZ1dGV4X2hhc2hfcHJjdGxgIHNlZW1zIGxpa2UgdGhlIGJlc3QgZm9jdXMgc3ltYm9sLiBJdCB0cmlnZ2VycyB0aGUgYWxsb2NhdGlvbiBhbmQgc3Vic2VxdWVudCBwaXZvdCwgd2hlcmUgdGhlIGJ1ZyBpcy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGZ1bmN0aW9uJiMzOTtzIGxvY2F0aW9uIGFnYWluLiBZZXAsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0XHRmdXRleF9yb2J1c3RfdW5sb2NrX2luaXRfbW0oXHUwMDI2bW0tXHUwMDNlZnV0ZXgpO1xuMjAyMTpcdH1cbjIwMjI6XHQjZW5kaWZcbjIwMjM6XHRcbjIwMjQ6XHRpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuMjAyNTpcdHtcbjIwMjY6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IEZIX0NVU1RPTTtcbjIwMjc6XHRcdGludCByZXQ7XG4yMDI4Olx0XG4yMDI5Olx0XHRzd2l0Y2ggKGFyZzIpIHtcbjIwMzA6XHRcdGNhc2UgUFJfRlVURVhfSEFTSF9TRVRfU0xPVFM6XG4yMDMxOlx0XHRcdGlmIChhcmc0KVxuMjAzMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAzMzpcdFx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbjIwMzQ6XHRcdFx0YnJlYWs7XG4yMDM1Olx0XG4yMDM2Olx0XHRjYXNlIFBSX0ZVVEVYX0hBU0hfR0VUX1NMT1RTOlxuMjAzNzpcdFx0XHRyZXQgPSBmdXRleF9oYXNoX2dldF9zbG90cygpO1xuMjAzODpcdFx0XHRicmVhaztcbjIwMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gRnV0ZXggSGFzaGluZyoqCgpBbHJpZ2h0LCB5ZXAsIGBmdXRleF9oYXNoX3ByY3RsYCBkZWZpbml0ZWx5IGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCBvZiBmb2N1cy4gSXQgaGl0cyBhIGtleSBhcmVhLCBhbmQgaXQmIzM5O3Mgd2VsbC1kZWZpbmVkIGVub3VnaCB0byBkaWcgaW50by4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGA/IERvZXMgdGhhdCBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZT8gSXQmIzM5O3MgcmVsYXRlZCwgYnV0IGlzIGl0IGEgcG90ZW50aWFsIHNlY29uZGFyeSBhcmVhIG9mIGV4cGxvcmF0aW9uLCBvciBkb2VzIGl0IGRvdmV0YWlsIG5pY2VseT8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRcdFx0ICovXG4xOTMxOlx0XHRcdFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXHUwMDI2XHUwMDI2IGN1c3RvbSlcbjE5MzI6XHRcdFx0XHRcdGdvdG8gYWdhaW47XG4xOTMzOlx0XHRcdH1cbjE5MzQ6XHRcdH1cbjE5MzU6XHRcdHJldHVybiAwO1xuMTkzNjpcdH1cbjE5Mzc6XHRcbjE5Mzg6XHRpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG4xOTM5Olx0e1xuMTk0MDpcdFx0dW5zaWduZWQgaW50IHRocmVhZHMsIGJ1Y2tldHMsIGN1cnJlbnRfYnVja2V0cyA9IDA7XG4xOTQxOlx0XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4xOTQyOlx0XG4xOTQzOlx0XHRpZiAoIWN1cnJlbnQtXHUwMDNlbW0pXG4xOTQ0Olx0XHRcdHJldHVybiAwO1xuMTk0NTpcdFxuMTk0NjpcdFx0c2NvcGVkX2d1YXJkKHJjdSkge1xuMTk0NzpcdFx0XHR0aHJlYWRzID0gbWluX3QodW5zaWduZWQgaW50LCBnZXRfbnJfdGhyZWFkcyhjdXJyZW50KSwgbnVtX29ubGluZV9jcHVzKCkpO1xuMTk0ODpcdFxuMTk0OTpcdFx0XHRmcGggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODkKCQkJCQkJCW91dHB1dDogMTI4CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBBbmQsIG9mIGNvdXJzZSwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMga2V5LiBJdCYjMzk7cyB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgZ29vZCwgYnV0IGxldCYjMzk7cyBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGluY2x1ZGluZyBpdCBpbiBvdXIgYnVpbGQgY29uZmlndXJhdGlvbi4gQWgsIHllcywgaXQgaGFzIHRob3NlIGRlcGVuZGVuY2llczogYEZVVEVYYCwgYCFCQVNFX1NNQUxMYCwgYW5kIGBNTVVgLiBNYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLgoKUmlnaHQsIGJhY2sgdG8gdGhlIHBhdGNoLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgY2hhbmdlcyBhZ2Fpbi4gV2UmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciB3aXRoIGBXUklURV9PTkNFYC4gQW5kIHRoZSBzYW1lIHdpdGggdGhlIE5VTEwgYXNzaWdubWVudC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtdXRleCBndWFyZCB3aXRoIFJDVS4gV2UmIzM5O3ZlIGdvdCBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoKWAsIGFuZCBub3cgd2UgaGF2ZSBgc21wX3JtYigpYCBhbmQgYFJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldylgLiBZZXAsIHRoaXMgaXMgYSB0ZXh0Ym9vayBjb25jdXJyZW5jeSBmaXguIFRoZXkmIzM5O3JlIHVzaW5nIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGVzIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzd2l0Y2hpbmcuCgpUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY29uY3VycmVuY3kgaXNzdWVzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGFyZSBzdWJ0bGUgYW5kIGNhbiBiZSBlYXNpbHkgbWlzc2VkLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSByZWFjaGFibGUgdGhyb3VnaCBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiwgc28gZnV6emluZyB0aG9zZSB3aWxsIGV4ZXJjaXNlIHRoZXNlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBCeSBmdXp6aW5nIHRoZXNlLCB3ZSYjMzk7bGwgY29uZmlybSB0aGF0IHRoZSBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBsb2dpYyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDg0N2FjNDNlNDYyODkwOWM5Mjk5OGU2MzkwZjliMmQ5ZDYwNzdiYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA2OjU1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjMKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1dGV4IENvbmN1cnJlbmN5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFzaF9uZXdgIHVwZGF0ZXMuIEl0JiMzOTtzIHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGFzc2lnbm1lbnRzIHRvIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIGBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgb3JkZXJpbmcgZml4LiBHb29kLiBJdCYjMzk7cyB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGVuc3VyaW5nIHZpc2liaWxpdHkgYWNyb3NzIGNvcmVzLiBUaGUgY2hhbmdlIHRvIGBmdXRleF9waXZvdF9wZW5kaW5nYCB1c2luZyBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAgYW5kIHRoZSBhZGRpdGlvbiBvZiBgc21wX3JtYigpYCBmdXJ0aGVyIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXTigJlzIG1ha2luZyB0aGUgY29kZSBtb3JlIFJDVSBmcmllbmRseS4KCkxvb2tpbmcgYXQgdGhlIGRpZmYgZGlyZWN0bHkgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgd2l0aCBgV1JJVEVfT05DRWAsIHdoaWNoIGd1YXJhbnRlZXMgYXRvbWljIHdyaXRlcyBhbmQgcHJvcGVyIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgcmVhZHMgb2YgYG1tcGgtJmd0O2hhc2hfbmV3YCBoYXBwZW4gKmFmdGVyKiB0aGUgYHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyB3aGVuIHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQgY29uY3VycmVudGx5LgoKVGhlIGNydWNpYWwgdGhpbmcgaXMsIGFuZCB0aGlzIGlzIHdoYXQgSSBuZWVkIHRvIGVtcGhhc2l6ZSwgKnRoZXJlJiMzOTtzIG5vIG5ldyB1c2VyLXNwYWNlIGV4cG9zdXJlIGhlcmUqLiBObyBuZXcgc3RydWN0dXJlcywgbm8gbmV3IGFsbG9jYXRpb25zLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbiByaXNrcy4gVGhpcyBpcyAqcHVyZWx5KiBhYm91dCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgYW5kIHdyaXRlcnMgb2Ygc2hhcmVkIGRhdGEgc2VlIGEgY29uc2lzdGVudCB2aWV3LCBlc3BlY2lhbGx5IGR1cmluZyBoYXNoIHRhYmxlIHBpdm90cy4gSXTigJlzIGVudGlyZWx5IGFib3V0IGdldHRpbmcgdGhlIG1lbW9yeSBvcmRlcmluZyByaWdodC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgS0FTQU4sIHBhcnRpY3VsYXJseSBLQ1NBTiBmb3IgZGF0YSByYWNlcywgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcmVsZXZhbnQgaGVyZS4gS01TQU4sIG5vdCBzbyBtdWNoLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29scyBhcmUgZW5hYmxlZCB0byBwcm9wZXJseSB2YWxpZGF0ZSB0aGUgcGF0Y2gmIzM5O3MgZWZmaWNhY3kuIEJhc2ljYWxseSwgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBwYXRjaC4gR29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTozNy40MDUyMTY3MDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3NzMyMDQxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYnkgcmVwbGFjaW5nIGRpcmVjdCBhc3NpZ25tZW50cyBhbmQgcmVhZHMgb2YgYGhhc2hfbmV3YCB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIGFkZGluZyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iYCksIGFuZCBzd2l0Y2hpbmcgZnJvbSBhIG11dGV4IHRvIFJDVSBwcm90ZWN0aW9uIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3LjQwNTIyMzU5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NzY0NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDg0N2FjNDNlNDYyODkwOWM5Mjk5OGU2MzkwZjliMmQ5ZDYwNzdiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1NTozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3Ljc1NTc1NjEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5MTE0OTI0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBsb2dpYyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3Ljc1NTc1ODAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTU2Mjg3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEZ1dGV4IENvbmN1cnJlbmN5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQncyBtb2RpZnlpbmcgYWNjZXNzIHRvIGBtbXBoLVx1MDAzZWhhc2hfbmV3YCDigJMgc3BlY2lmaWNhbGx5IHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBHb29kIGNhdGNoIG9uIHRoZSBkZXZlbG9wZXJzJyBwYXJ0OyBpdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHN5bmNocm9uaXphdGlvbiBhcm91bmQgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaC4gVGhleSd2ZSBhbHNvIHN3aXRjaGVkIGBmdXRleF9waXZvdF9wZW5kaW5nYCB0byB1c2UgYGd1YXJkKHJjdSkoKWAgaW5zdGVhZCBvZiBgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jaylgLCBhbG9uZyB3aXRoIGFuIGFkZGVkIGBzbXBfcm1iKClgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyBSQ1UtYmFzZWQgcHJvdGVjdGlvbi5cblxuVGltZSB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGU6IGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIFllcCwgY29uZmlybWVkLCB0aGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGZvciBmdXRleCBwcml2YXRlIGhhc2hlcy4gR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljICh0aGUgZnV0ZXggc3Vic3lzdGVtKSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQuIEZyb20gdGhlIHBhdGNoIGFuZCBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgaXQncyBpbXBhY3RpbmcgdGhlc2U6IGBfX2Z1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gSW1wb3J0YW50IHRvIG5vdGUgaWYgdGhleSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGlzIG1lYW5zIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgd2l0aGluIHRoZSBmaWxlLiBPa2F5LCBJIG5lZWQgdG8gc2VlIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGVzZSwgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcG9pbnRzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDMuMzUxMzkwMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTk4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc3LWFnYWluOlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcXHRcXHR3YWl0X3Zhcl9ldmVudChtbSwgZnV0ZXhfcGl2b3RfcGVuZGluZyhtbSkpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjQzLjM5ODE5NjE4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTEyNTYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRnV0ZXggSGFzaGluZyBhbmQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBiZWluZyBjYWxsZWQsIGFuZCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQncyBjYWxsaW5nIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHNvdW5kcyBsaWtlIGl0J3MgaGFuZGxpbmcgdGhlIHRyYW5zaXRpb24gb3IgbWFuYWdlbWVudCBvZiBwZW5kaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhIGZ1dGV4LCBidXQgdG8gcmVhbGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWA/XCIuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggdXBzdHJlYW0gZnJvbSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMga2V5LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHN0b3J5LiBJcyBpdCBwYXJ0IG9mIHRoZSBpbml0aWFsIGZ1dGV4IHNldHVwLCBhIHJlYWxsb2NhdGlvbiBzdHJhdGVneSwgb3IgdHJpZ2dlcmVkIGJ5IHNvbWUgc3BlY2lmaWMgY29udGVudGlvdXMgc2l0dWF0aW9uPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDcuMjA5NDU1NjM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzcyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDcuMjU1MjM4MTIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Mjg0MTcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIEZ1dGV4IEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1dGV4IGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQg4oCTIGNlbnRyYWxpemluZyBhbGxvY2F0aW9uIGxvZ2ljIGlzIGdvb2QgZGVzaWduLiBJdCBsZXRzIHVzIGNvbnRyb2wgcmVzb3VyY2UgdXNhZ2UgYW5kIGhhbmRsZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgY29uc2lzdGVudGx5LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyB3aG8ncyB1c2luZyB0aGUgaGFzaCB0YWJsZSdzIHBpdm90PyBGcm9tIHdoYXQgSSBzZWUsIGl0IGxvb2tzIGxpa2UgYGZ1dGV4X3Bpdm90X2hhc2hgIHdpbGwgYmUgYSBjcml0aWNhbCBmdW5jdGlvbiB0byBhbmFseXNlLCBJIHdhbnQgdG8gZmluZCBvdXQgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGUgcGl2b3QgZnVuY3Rpb24sIHRvIHNlZSBob3cgdGhhdCBwaXZvdCBpcyB1c2VkLCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTo1MC43MjgwODM5MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NjE2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk1OnN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjE5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjI4OlxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNTY6XFx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXFx0Z290byBhZ2FpbjtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzI6XFx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXFx1MDAzZXByaXZhdGUubW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjczLVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVxcdCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3OlxcdCAqIGZ1dGV4X2hhc2goKVxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk4LVxcdCAqICAgZ3VhcmQocmN1KTtcXHRcXHQgIGd1YXJkKG1tLVxcdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVxcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk2LVxcdCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzMTpcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMyLVxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjUwLjc3ODk1MjU0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTQ5MTk5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnV0ZXggSGFzaGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgZnV0ZXggaGFzaGluZyBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYW5kIGBmdXRleF9oYXNoYCBib3RoIHJlbHkgb24gYGZ1dGV4X3Bpdm90X2hhc2hgIGludGVybmFsbHkuICBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJlbGF0aW9uc2hpcC4gIFRoZW4gd2Ugc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGNhbGxzIGBfX2Z1dGV4X3Bpdm90X2hhc2hgLiBTbywgZXNzZW50aWFsbHksIHRoZXkgYWxsIHNlZW0gY29ubmVjdGVkIHVuZGVyIHRoZSBob29kLiBOb3csIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBwdWJsaWMtZmFjaW5nLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBmdW5jdGlvbnMgd2UgbmVlZCB0byByZWFsbHkgYmUgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X3ByaXZhdGVfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaGAuIFRpbWUgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NTQuNjMzODc1MjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTo1NC42Nzg3NDc0MzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NTIyMzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuIEknbSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uLiBJdCdzIGxpc3RlZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFuZCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBCdXQgdGhlIHJlYWwgc3VycHJpc2U/IEl0J3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24hIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZnV0ZXggaGFzaCB0YWJsZSBpcyBpbml0aWFsaXplZCBhbmQgcG90ZW50aWFsbHksIGhvdyBpdCBjYW4gYmUgbW9kaWZpZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gbWlnaHQgYmUgY2FsbGluZyBpdCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBzZWUgd2hhdCBpdCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjU4LjAzMzk3NDUxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzU0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NTguMDc3NDE0NjUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc5NzA0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBGdXRleCBIYXNoaW5nIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgY29udHJpYnV0ZSB0byBlZmZpY2llbnQgbG9va3VwIGFuZCBtYW5hZ2VtZW50IG9mIGZ1dGV4ZXMuIEFyZSB0aGV5IHNlcGFyYXRlIGhhc2ggdGFibGVzLCBvciBpcyBvbmUgYSBzdWJzZXQvdmFyaWFudCBvZiB0aGUgb3RoZXI/IEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBBcmUgdGhlc2UgaGFzaCB0YWJsZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBwcml2YXRlIGFuZCBzaGFyZWQgZnV0ZXhlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgcmVzb2x2ZSBjb2xsaXNpb25zLCBhbmQgaG93IHRoZSBzaXppbmcgb2YgdGhlc2UgdGFibGVzIGltcGFjdHMgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gSSB3aWxsIHdhbnQgdG8gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIHR3bywgdW5kZXJzdGFuZGluZyB0aGVpciBpbmRpdmlkdWFsIHJvbGVzIGFuZCBpZiB0aGV5IGNhbiBoYXZlIGFuIGVmZmVjdCBvbiBhIHNwZWNpZmljIHN5c3RlbSBvciBhcHBsaWNhdGlvbi4gVGhpcyBpbnZvbHZlcyBhc3Nlc3NpbmcgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNob3NlbiBoYXNoIGZ1bmN0aW9uIGFuZCBleHBsb3JpbmcgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIGtlcm5lbCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjAyLjI2NTM4Nzk4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODkyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz01OT1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo2OTpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcwLVxcdGludFxcdFxcdHN0YXRlO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMjk9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzItI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzMzpzdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM1OnN0YXRpYyBib29sIGZ1dGV4X3JlZl9pc19kZWFkKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzYtXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzc9ZW51bSB7IEZSX1BFUkNQVSA9IDAsIEZSX0FUT01JQyB9O1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM4LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM5OnN0YXRpYyBib29sIGZ1dGV4X3ByaXZhdGVfaGFzaF9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTQ0OnZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNDUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTE6X19mdXRleF9oYXNoX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2MTpzdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjI6XFx0XFx0XFx0XFx0IHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTctXFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODpcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTktXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjItXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMzpcXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjQtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzMi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzQte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDYtXFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjQ3OlxcdFxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI0OC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjUyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjUzOlxcdFxcdGlmIChmdXRleF9wcml2YXRlX2hhc2hfZ2V0KGZwaCkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTQtXFx0XFx0XFx0cmV0dXJuIGZwaDtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2My1cXHRzY29wZWRfZ3VhcmQocmN1KSB7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjQ6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoID0gTlVMTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NS1cXHRcXHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjk6XFx0XFx0aWYgKCFmcGggfHwgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjcwLVxcdFxcdFxcdHJldHVybiAoc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYpeyAuaGIgPSBoYiwgLmZwaCA9IGZwaCB9O1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjc9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjg6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE1ODk9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU5MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1OTE6c3RhdGljIHZvaWQgX19mdXRleF9yZWZfYXRvbWljX2JlZ2luKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1OTIte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjEyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTYxMzpzdGF0aWMgdm9pZCBfX2Z1dGV4X3JlZl9hdG9taWNfZW5kKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2MTQte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjU1PXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjU3LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBtbV9zdHJ1Y3QsIGZ1dGV4LnBoYXNoLnJjdSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjU4OlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY1OS1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY3OS0gKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2ODA6c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY4MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDUtXFx0ICpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDY6XFx0ICogICBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KGZwaCk7IC8vIE9PUFNcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDctXFx0ICpcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MjY6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2dldChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzI3LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTczOS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NDA6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzQxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc1My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NTQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc1NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzc0LXtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NzU6XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc3Ni1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg2LVxcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2g7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg3OlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODgtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MDMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODA0OnN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNTpcXHRcXHRcXHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MDYte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODMwLVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODMxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MzItXFx0Ym9vbCBjdXN0b20gPSBmbGFncyBcXHUwMDI2IEZIX0NVU1RPTTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4MS1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykge1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg4MjpcXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcmVlIF9fZnJlZShrdmZyZWUpID0gTlVMTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4ODM6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqY3VyLCAqbmV3O1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkyOC1cXHRcXHRcXHQgKiBXaWxsIHNldCBtbS1cXHUwMDNlZnV0ZXgucGhhc2gubmV3X2hhc2ggb24gZmFpbHVyZTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mjk6XFx0XFx0XFx0ICogZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldCgpIHdpbGwgdHJ5IGFnYWluLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMC1cXHRcXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTkzOD1pbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDAtXFx0dW5zaWduZWQgaW50IHRocmVhZHMsIGJ1Y2tldHMsIGN1cnJlbnRfYnVja2V0cyA9IDA7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTQxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDItXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTczOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NzQtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yMDg9c3RydWN0IGZ1dGV4X3Ege1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjIwLVxcdGF0b21pY190IHJlcXVldWVfc3RhdGU7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjIxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmRyb3BfZnBoO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMi0jaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQyLVxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQzOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDQtfTtcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ni0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NzpleHRlcm4gc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDg6ZXh0ZXJuIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTAtI2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIE5VTEw7IH1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKSB7IH1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTMtI2VuZGlmXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU4OlxcdCAgICAgaWYgKF9ULmZwaCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVC5mcGgpLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OS1cXHQgICAgIGZ1dGV4X2hhc2goa2V5KSwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2MC1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNjE6REVGSU5FX0NMQVNTKHByaXZhdGVfaGFzaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI2MjpcXHQgICAgIGlmIChfVCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVCksXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYzOlxcdCAgICAgZnV0ZXhfcHJpdmF0ZV9oYXNoKG1tKSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTkyMz1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTEwMTItXFx0XFx0ICovXFxua2VybmVsL2Z1dGV4L3BpLmM6MTAxMzpcXHRcXHRmdXRleF9wcml2YXRlX2hhc2hfcHV0KG5vX2ZyZWVfcHRyKGhici5mcGgpKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMDE0LVxcdFxcdC8qXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTA1LVxcdFxcdC8qIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGZyb20gZnV0ZXhfdW5sb2NrX3BpKCkgKi9cXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMTA2OlxcdFxcdGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQocS5kcm9wX2ZwaCk7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTEwNy1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTExNDE9c3RhdGljIGludCBfX2Z1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMTIyMS1cXHRcXHRcXHRpZiAoZnV0ZXhfa2V5X2lzX3ByaXZhdGUoXFx1MDAyNmtleSkpXFxua2VybmVsL2Z1dGV4L3BpLmM6MTIyMjpcXHRcXHRcXHRcXHR0b3Bfd2FpdGVyLVxcdTAwM2Vkcm9wX2ZwaCA9IGZ1dGV4X3ByaXZhdGVfaGFzaChrZXkucHJpdmF0ZS5tbSk7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTIyMy1cXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjQ0LVxcdGlmIChmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpKVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjQ1OlxcdFxcdHEtXFx1MDAzZWRyb3BfZnBoID0gZnV0ZXhfcHJpdmF0ZV9oYXNoKGtleS1cXHUwMDNlcHJpdmF0ZS5tbSk7XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDYtXFx0cS1cXHUwMDNlbG9ja19wdHIgPSBcXHUwMDI2aGItXFx1MDAzZWxvY2s7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc4Nj1pbnQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkwOC1cXHQvKiBBZGRpdGlvbmFsIHJlZmVyZW5jZSBmcm9tIHJlcXVldWVfcGlfd2FrZV9mdXRleCgpICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MDk6XFx0ZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChxLmRyb3BfZnBoKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MDIuMzEwNTgzODM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU1Nzg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGZ1dGV4X2hhc2hfcHJjdGxgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGBmdXRleF9oYXNoX3ByY3RsYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGluIGRvd24gaXRzIG9yaWdpbi4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsIGRpcmVjdGx5IHRyaWdnZXJlZCBieSBgc3lzX3ByY3RsYCwgb3IgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY2FsbCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBrZXJuZWwncyBwcm9jZXNzIGNvbnRyb2wgbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBmdXRleGVzIGFuZCB0aGVpciBoYXNoIHRhYmxlIG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbnRvIHRoZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIGFuZCBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjA1LjQ2NjE2NDY1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjA0NTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzc9bG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjc5OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05ND1zdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjk5OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjg4NC1cXHRjYXNlIFBSX0ZVVEVYX0hBU0g6XFxua2VybmVsL3N5cy5jOjI4ODU6XFx0XFx0ZXJyb3IgPSBmdXRleF9oYXNoX3ByY3RsKGFyZzIsIGFyZzMsIGFyZzQpO1xcbmtlcm5lbC9zeXMuYy0yODg2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjowNy42OTgyMTY4MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMjcwNTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBmdXRleF9oYXNoYCBTeXN0ZW0gQ2FsbHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4gSSd2ZSBnb3QgaXQuIGBmdXRleF9oYXNoX3ByY3RsYCBpcywgYXMgSSBzdXNwZWN0ZWQsIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgdGhhdCBnZXRzIGludm9rZWQgd2hlbiBgcHJjdGxgIGlzIGNhbGxlZCB3aXRoIHRoZSBgUFJfRlVURVhfSEFTSGAgb3B0aW9uLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN5c3RlbSBjYWxsLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXJlIGRvZXMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgY29tZSBpbnRvIHRoZSBwaWN0dXJlPyBXaGF0J3MgdGhlIGNhbGwgcGF0aCB0aGVyZT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MTIuMjAwOTI1NTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5NjIzOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjE0LjQzMDU1NTYxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ3MjYyNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGJ5IGBjb3B5X3Byb2Nlc3NgLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBmb3JrYCBhbmQgYGNsb25lYCBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSBpbiB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYSBjb3JlIHN5c3RlbSBjYWxsIHRoYXQncyB1c2VkICphbGwqIHRoZSB0aW1lLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBhIGdyZWF0IHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW9yaXR5IGlzIHRvIGZpbmQgYnVncyB0aGF0IGNvdWxkIGJlIHJlbW90ZWx5IHRyaWdnZXJlZC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbjogYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJJ2xsIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgZGV0YWlscyBvZiBgRlVURVhfUFJJVkFURV9IQVNIYC4gRW5zdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhIHN1Y2Nlc3NmdWwgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ3JvdW5kIHdvcmsuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MTkuNTc3ODIxMDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE1OTcyMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODE6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9ODM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4NDojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Nj1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODc6I2VuZGlmIC8qICFDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTE1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZml4dXBfcm9idXN0X3VubG9jayhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU1LVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxNTY6I2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUk9CVVNUX1VOTE9DSylcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg9MjM9c3RydWN0IGZ1dGV4X3NjaGVkX2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oLTMzLVxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaDozNDojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNDI9ZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTQ0LS8qIHNhbWUgYXMgYWJvdmUgYnV0IHBlcmZvcm1zIHRoZSBzbG93IHBhdGggZnJvbSB0aGUgYXN5bmMgY29udGV4dC4gQ2FuXFxuLS1cXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQ4LVxcbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG5pbml0L0tjb25maWctMTg1MC1cXHRib29sXFxuLS1cXG5rZXJuZWwvZm9yay5jPTEyMTI9RVhQT1JUX1NZTUJPTF9HUEwobW1wdXQpO1xcbmtlcm5lbC9mb3JrLmMtMTIxMy1cXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxcbmtlcm5lbC9mb3JrLmMtMTIxNS1zdGF0aWMgdm9pZCBtbXB1dF9hc3luY19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzMjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3NS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3NjojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9Mjc4PXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI4MzojZW5kaWYgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjg0LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjg9X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzczOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNzQtXFx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpKSB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE1Njc9c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1NzY6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NzctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODE6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODItc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk4ND1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGFzaF9pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTg1OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxMz1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcm9idXN0X3VubG9ja19pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDE2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDUtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ2OiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0OD1leHRlcm4gdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ5LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1MS1zdGF0aWMgaW5saW5lIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gTlVMTDsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjoyMS41OTM3OTg0MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4NDMyNDI4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIHNwZWNpZmljIHN5bWJvbCBpcyBkZWZpbmVkLCB3aGF0IHRoZSBjb25kaXRpb25zIGFyZSBmb3IgaXRzIGFjdGl2YXRpb24sIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24uIEhvcGVmdWxseSwgYGluaXQvS2NvbmZpZ2AgcHJvdmlkZXMgYSBjbGVhciBhbmQgY29uY2lzZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHdoZXRoZXIgb3Igbm90IGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGJyb3VnaHQgaW50byBwbGF5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIHBvaW50IG1lIHRvIHRoZSBicm9hZGVyIGtlcm5lbCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoYXQsIEkgY2FuIGRlZHVjZSB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCBkZXNpZ24gY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjozOC40MzcwNDM5MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQwOlxcdFxcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiZSBidWlsdCB3aXRob3V0XFxuMTg0MTpcXHRcXHQgIHN1cHBvcnQgZm9yIFxcXCJmYXN0IHVzZXJzcGFjZSBtdXRleGVzXFxcIi4gIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBub3RcXG4xODQyOlxcdFxcdCAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuXFxuMTg0MzpcXHRcXG4xODQ0OlxcdGNvbmZpZyBGVVRFWF9QSVxcbjE4NDU6XFx0XFx0Ym9vbFxcbjE4NDY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuMTg0NzpcXHRcXHRkZWZhdWx0IHlcXG4xODQ4OlxcdFxcbjE4NDk6XFx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbjE4NTA6XFx0XFx0Ym9vbFxcbjE4NTE6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiAhQkFTRV9TTUFMTCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4xODUyOlxcdFxcdGRlZmF1bHQgeVxcbjE4NTM6XFx0XFxuMTg1NDpcXHRjb25maWcgRlVURVhfTVBPTFxcbjE4NTU6XFx0XFx0Ym9vbFxcbjE4NTY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBOVU1BXFxuMTg1NzpcXHRcXHRkZWZhdWx0IHlcXG4xODU4OlxcdFxcbjE4NTk6XFx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjozOC40MzcyODM1NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyMzYwMDU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXRleCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhpcyBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyB0aGlzIGlzIGxpa2VseSBhIGNvbW1vbiBzY2VuYXJpby4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGZ1bmN0aW9ucy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZml4IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24uXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMuIEkndmUgZ290IGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBjYWxsZWQgZHVyaW5nIGZvcmssIGBmdXRleF9oYXNoX3ByY3RsYCBhY2Nlc3NpYmxlIHZpYSBgcHJjdGxgIHdpdGggYFBSX0ZVVEVYX0hBU0hgLCBhbmQgdGhlbiBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gdmFyaW91cyBmdXRleCBvcGVyYXRpb25zLlxuXG5gZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIGl0J3MgYSBzcGVjaWZpYyBlbnRyeSBwb2ludCB0aHJvdWdoIGBzeXNfcHJjdGxgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIEFuZCBhbHNvIHRoZSBgZnV0ZXhfaGFzaGAgZnVuY3Rpb24uXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGUsIHRvIGJ1aWxkIG91dCB0aGUgY29udGV4dC4gQWgsIHRoZXkncmUgYWxsIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gRXhjZWxsZW50LlxuXG5JIGFsc28gc2VlIHRoYXQgYGZ1dGV4X2hhc2hfZnJlZWAgaXMgY2FsbGVkIGR1cmluZyBtbXB1dC4gQW5kIHRoZW4gdGhlcmUncyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgd2hpY2ggYXJlIHN0YXRpYy5cblxuTXkgb3JpZ2luYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdhcyBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBgZnV0ZXhfaGFzaGAsIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC4gQnV0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggaG90LXBhdGggZnVuY3Rpb25zLiBgZnV0ZXhfaGFzaGAgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgIGFyZSBjYWxsZWQgYnkgbmVhcmx5IGV2ZXJ5IGZ1dGV4IG9wZXJhdGlvbi4gVGhleSBhcmUgdG9vIGdlbmVyaWMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy5cblxuYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGEgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGZvciB0aGlzIGZlYXR1cmUsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBjYWxsZWQgZHVyaW5nIGZvcmsuIEJ1dCwgbGV0J3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgcHJvYmFibHkgc3VmZmljaWVudC4gSXQgYWxsb3dzIGFsbG9jYXRpbmcgYSBjdXN0b20gaGFzaCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoZSBidWcgaXMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHdoaWNoIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgd2hlbiB3YWl0aW5nIGZvciB0aGUgcGl2b3QgdG8gY29tcGxldGUuIEFuZCB0aGUgcGl2b3QgaXMgaW5pdGlhdGVkIGJ5IGVpdGhlciBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgb3IgYGZ1dGV4X3Bpdm90X2hhc2hgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hgIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC5cblxuU28sIGBmdXRleF9oYXNoX3ByY3RsYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC4gSXQgdHJpZ2dlcnMgdGhlIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgcGl2b3QsIHdoZXJlIHRoZSBidWcgaXMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBmdW5jdGlvbidzIGxvY2F0aW9uIGFnYWluLiBZZXAsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1Njo1Ny42NzMyOTMzNTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRmdXRleF9yb2J1c3RfdW5sb2NrX2luaXRfbW0oXFx1MDAyNm1tLVxcdTAwM2VmdXRleCk7XFxuMjAyMTpcXHR9XFxuMjAyMjpcXHQjZW5kaWZcXG4yMDIzOlxcdFxcbjIwMjQ6XFx0aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4yMDI1OlxcdHtcXG4yMDI2OlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZIX0NVU1RPTTtcXG4yMDI3OlxcdFxcdGludCByZXQ7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdHN3aXRjaCAoYXJnMikge1xcbjIwMzA6XFx0XFx0Y2FzZSBQUl9GVVRFWF9IQVNIX1NFVF9TTE9UUzpcXG4yMDMxOlxcdFxcdFxcdGlmIChhcmc0KVxcbjIwMzI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjAzMzpcXHRcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG4yMDM0OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzU6XFx0XFxuMjAzNjpcXHRcXHRjYXNlIFBSX0ZVVEVYX0hBU0hfR0VUX1NMT1RTOlxcbjIwMzc6XFx0XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9nZXRfc2xvdHMoKTtcXG4yMDM4OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjU3LjY3MzQxNjU4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkyMDQxOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBGdXRleCBIYXNoaW5nKipcblxuQWxyaWdodCwgeWVwLCBgZnV0ZXhfaGFzaF9wcmN0bGAgZGVmaW5pdGVseSBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgb2YgZm9jdXMuIEl0IGhpdHMgYSBrZXkgYXJlYSwgYW5kIGl0J3Mgd2VsbC1kZWZpbmVkIGVub3VnaCB0byBkaWcgaW50by4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGA/IERvZXMgdGhhdCBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZT8gSXQncyByZWxhdGVkLCBidXQgaXMgaXQgYSBwb3RlbnRpYWwgc2Vjb25kYXJ5IGFyZWEgb2YgZXhwbG9yYXRpb24sIG9yIGRvZXMgaXQgZG92ZXRhaWwgbmljZWx5PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTc6MDUuMDY1NDYxNjUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzA6XFx0XFx0XFx0XFx0ICovXFxuMTkzMTpcXHRcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxuMTkzMjpcXHRcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjE5MzM6XFx0XFx0XFx0fVxcbjE5MzQ6XFx0XFx0fVxcbjE5MzU6XFx0XFx0cmV0dXJuIDA7XFxuMTkzNjpcXHR9XFxuMTkzNzpcXHRcXG4xOTM4OlxcdGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG4xOTM5OlxcdHtcXG4xOTQwOlxcdFxcdHVuc2lnbmVkIGludCB0aHJlYWRzLCBidWNrZXRzLCBjdXJyZW50X2J1Y2tldHMgPSAwO1xcbjE5NDE6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoIWN1cnJlbnQtXFx1MDAzZW1tKVxcbjE5NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTk0NTpcXHRcXG4xOTQ2OlxcdFxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG4xOTQ3OlxcdFxcdFxcdHRocmVhZHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGdldF9ucl90aHJlYWRzKGN1cnJlbnQpLCBudW1fb25saW5lX2NwdXMoKSk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjA1LjA2NTYzNTkyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcyMTc3Njk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRnV0ZXggUHJpdmF0ZSBIYXNoIENvbmN1cnJlbmN5IEZpeCoqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBBbmQsIG9mIGNvdXJzZSwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMga2V5LiBJdCdzIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLCBidXQgbGV0J3MgYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGluY2x1ZGluZyBpdCBpbiBvdXIgYnVpbGQgY29uZmlndXJhdGlvbi4gQWgsIHllcywgaXQgaGFzIHRob3NlIGRlcGVuZGVuY2llczogYEZVVEVYYCwgYCFCQVNFX1NNQUxMYCwgYW5kIGBNTVVgLiBNYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLlxuXG5SaWdodCwgYmFjayB0byB0aGUgcGF0Y2guIExldCdzIGxvb2sgYXQgdGhlIGNoYW5nZXMgYWdhaW4uIFdlJ3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciB3aXRoIGBXUklURV9PTkNFYC4gQW5kIHRoZSBzYW1lIHdpdGggdGhlIE5VTEwgYXNzaWdubWVudC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtdXRleCBndWFyZCB3aXRoIFJDVS4gV2UndmUgZ290IGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KSgpYCwgYW5kIG5vdyB3ZSBoYXZlIGBzbXBfcm1iKClgIGFuZCBgUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpYC4gWWVwLCB0aGlzIGlzIGEgdGV4dGJvb2sgY29uY3VycmVuY3kgZml4LiBUaGV5J3JlIHVzaW5nIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGVzIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzd2l0Y2hpbmcuXG5cblRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb25jdXJyZW5jeSBpc3N1ZXMgd2UncmUgYWRkcmVzc2luZyBhcmUgc3VidGxlIGFuZCBjYW4gYmUgZWFzaWx5IG1pc3NlZC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4gV2UncmUgbG9va2luZyBhdCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFRoZXkncmUgcmVhY2hhYmxlIHRocm91Z2ggYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIHNvIGZ1enppbmcgdGhvc2Ugd2lsbCBleGVyY2lzZSB0aGVzZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4gQnkgZnV6emluZyB0aGVzZSwgd2UnbGwgY29uZmlybSB0aGF0IHRoZSBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4OSwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NzoxNi43ODc0MTU1NTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI2MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjE2Ljg3MDY4NjA5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDc3MjUzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NzoxNi44NzEyOTI0ODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczMDcxMTUzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjE2Ljg3MTI5Mzk0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzMwNzA5MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFzaF9uZXdgIHVwZGF0ZXMuIEl0J3MgdXNpbmcgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYXNzaWdubWVudHMgdG8gYG1tcGgtXHUwMDNlaGFzaF9uZXdgIGFuZCBgbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgb3JkZXJpbmcgZml4LiBHb29kLiBJdCdzIHRoZSByaWdodCBhcHByb2FjaCBmb3IgZW5zdXJpbmcgdmlzaWJpbGl0eSBhY3Jvc3MgY29yZXMuIFRoZSBjaGFuZ2UgdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHVzaW5nIGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJdOKAmXMgbWFraW5nIHRoZSBjb2RlIG1vcmUgUkNVIGZyaWVuZGx5LlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmIGRpcmVjdGx5IGNvbmZpcm1zIHRoaXMuIFdlJ3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgd2l0aCBgV1JJVEVfT05DRWAsIHdoaWNoIGd1YXJhbnRlZXMgYXRvbWljIHdyaXRlcyBhbmQgcHJvcGVyIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgcmVhZHMgb2YgYG1tcGgtXHUwMDNlaGFzaF9uZXdgIGhhcHBlbiAqYWZ0ZXIqIHRoZSBgcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaClgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgd2hlbiB0aGUgaGFzaCBpcyBiZWluZyB1cGRhdGVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNydWNpYWwgdGhpbmcgaXMsIGFuZCB0aGlzIGlzIHdoYXQgSSBuZWVkIHRvIGVtcGhhc2l6ZSwgKnRoZXJlJ3Mgbm8gbmV3IHVzZXItc3BhY2UgZXhwb3N1cmUgaGVyZSouIE5vIG5ldyBzdHJ1Y3R1cmVzLCBubyBuZXcgYWxsb2NhdGlvbnMuIFRoaXMgaXNuJ3QgYWJvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb24gcmlza3MuIFRoaXMgaXMgKnB1cmVseSogYWJvdXQgZW5zdXJpbmcgdGhhdCByZWFkZXJzIGFuZCB3cml0ZXJzIG9mIHNoYXJlZCBkYXRhIHNlZSBhIGNvbnNpc3RlbnQgdmlldywgZXNwZWNpYWxseSBkdXJpbmcgaGFzaCB0YWJsZSBwaXZvdHMuIEl04oCZcyBlbnRpcmVseSBhYm91dCBnZXR0aW5nIHRoZSBtZW1vcnkgb3JkZXJpbmcgcmlnaHQuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgS0FTQU4sIHBhcnRpY3VsYXJseSBLQ1NBTiBmb3IgZGF0YSByYWNlcywgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcmVsZXZhbnQgaGVyZS4gS01TQU4sIG5vdCBzbyBtdWNoLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHRvb2xzIGFyZSBlbmFibGVkIHRvIHByb3Blcmx5IHZhbGlkYXRlIHRoZSBwYXRjaCdzIGVmZmljYWN5LiBCYXNpY2FsbHksIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gcGF0Y2guIEdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjMsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTc6MzQuMTc4MzkwMzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYnkgcmVwbGFjaW5nIGRpcmVjdCBhc3NpZ25tZW50cyBhbmQgcmVhZHMgb2YgYGhhc2hfbmV3YCB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIGFkZGluZyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iYCksIGFuZCBzd2l0Y2hpbmcgZnJvbSBhIG11dGV4IHRvIFJDVSBwcm90ZWN0aW9uIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 06:54:21 +0000 UTC FinishedAt: 2026-08-13 06:57:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FUTEX_PRIVATE_HASH" ], "series_id": "79615642-c5fb-45c2-94a3-b0ef4bdf51e7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "futex_hash_prctl", "futex_hash_allocate_default" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgcGl2b3RpbmcgbG9naWMgYnkgcmVwbGFjaW5nIGEgbXV0ZXggd2l0aCBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbi4gRnV6emluZyB0aGVzZSBlbnRyeSBwb2ludHMgd2lsbCBoZWxwIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ4NDdhYzQzZTQ2Mjg5MDljOTI5OThlNjM5MGY5YjJkOWQ2MDc3YmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1NTozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXG4gXHRmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm1tcGgtXHUwMDNlbG9jaykpO1xuIFx0aWYgKGZwaCkge1xuIFx0XHRpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHtcbi1cdFx0XHRtbXBoLVx1MDAzZWhhc2hfbmV3ID0gbmV3O1xuJiM0MztcdFx0XHRXUklURV9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcsIG5ldyk7XG4gXHRcdFx0cmV0dXJuIGZhbHNlO1xuIFx0XHR9XG4gXG5AQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbiYjNDM7XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7XG4gXHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTc4NiwxMiAmIzQzOzE3ODYsMTggQEAgc3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xuIFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xuIFxuLVx0Z3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuJiM0MztcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLVx1MDAzZWhhc2gpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuJiM0MztcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cbiYjNDM7XHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfcm1iKCk7XG4mIzQzO1x0aWYgKCFSRUFEX09OQ0UobW1waC1cdTAwM2VoYXNoX25ldykpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuLVx0ZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLVx1MDAzZWhhc2gpO1xuIFx0cmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7XG4gfVxuIFxuQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4mIzQzO1x0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcbiBcdFx0aWYgKGZwaCkge1xuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFjdXItXHUwMDNlaGFzaF9tYXNrKSB7XG5AQCAtMTg4OSw3ICYjNDM7MTg5NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuIFx0XHRcdFx0ICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLlxuIFx0XHRcdFx0ICovXG4gXHRcdFx0XHRmcmVlID0gZnBoO1xuLVx0XHRcdFx0bW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuYwppbmRleCAxMjhjNTc1MmYyMjVjLi5lODRiZTU0MTA1OWFiIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXgvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKQEAgLTIwMiw3ICYjNDM7MjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoKIAlmcGggPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tcGgtJmd0O2hhc2gsIGxvY2tkZXBfaXNfaGVsZCgmYW1wO21tcGgtJmd0O2xvY2spKTsKIAlpZiAoZnBoKSB7CiAJCWlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkgewotCQkJbW1waC0mZ3Q7aGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJV1JJVEVfT05DRShtbXBoLSZndDtoYXNoX25ldywgbmV3KTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCkBAIC0yMjQsNyAmIzQzOzIyNCw3IEBAIHN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAKIAkJZnBoID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwogCQlpZiAoZnBoKSB7Ci0JCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAkJCV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTsKIAkJfQogCX0KQEAgLTE3ODYsMTIgJiM0MzsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiAJc3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gJmFtcDttbS0mZ3Q7ZnV0ZXgucGhhc2g7CiAJc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7bW1waC0mZ3Q7bG9jayk7CiYjNDM7CWd1YXJkKHJjdSkoKTsKIAotCWlmICghbW1waC0mZ3Q7aGFzaF9uZXcpCiYjNDM7CWZwaCA9IHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKTsKJiM0MzsJLyoKJiM0MzsJICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZAomIzQzOwkgKiBoYXNoX25ldyBwb2ludGVyLiBQYWlycyB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlcigpIGluCiYjNDM7CSAqIF9fZnV0ZXhfcGl2b3RfaGFzaCgpLgomIzQzOwkgKi8KJiM0MzsJc21wX3JtYigpOwomIzQzOwlpZiAoIVJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldykpCiAJCXJldHVybiB0cnVlOwogCi0JZnBoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhtbXBoLSZndDtoYXNoKTsKIAlyZXR1cm4gZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKTsKIH0KIApAQCAtMTg3OSw3ICYjNDM7MTg4NSw3IEBAIHN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKQogCQljdXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG1tLSZndDtmdXRleC5waGFzaC5oYXNoLAogCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoLmxvY2spKTsKIAkJbmV3ID0gbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3OwotCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpOwogCiAJCWlmIChmcGgpIHsKIAkJCWlmIChjdXIgJmFtcDsmYW1wOyAhY3VyLSZndDtoYXNoX21hc2spIHsKQEAgLTE4ODksNyAmIzQzOzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJCQkgKiB0aGUgc2Vjb25kIG9uZSByZXR1cm5zIGhlcmUuCiAJCQkJICovCiAJCQkJZnJlZSA9IGZwaDsKLQkJCQltbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXcgPSBuZXc7CiYjNDM7CQkJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBuZXcpOwogCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIW5ldykgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjY2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQmIzM5O3MgbW9kaWZ5aW5nIGFjY2VzcyB0byBgbW1waC0mZ3Q7aGFzaF9uZXdgIOKAkyBzcGVjaWZpY2FsbHkgdXNpbmcgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGNvbmN1cnJlbmN5IGNvbmNlcm4uIEdvb2QgY2F0Y2ggb24gdGhlIGRldmVsb3BlcnMmIzM5OyBwYXJ0OyBpdCB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzeW5jaHJvbml6YXRpb24gYXJvdW5kIHRoZSBmdXRleCBwcml2YXRlIGhhc2guIFRoZXkmIzM5O3ZlIGFsc28gc3dpdGNoZWQgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHRvIHVzZSBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAsIGFsb25nIHdpdGggYW4gYWRkZWQgYHNtcF9ybWIoKWAuIFRoYXQmIzM5O3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyBSQ1UtYmFzZWQgcHJvdGVjdGlvbi4KClRpbWUgdG8gZGlnIGludG8gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlOiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBhcmUgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnRzLiBZZXAsIGNvbmZpcm1lZCwgdGhpcyBpcyBhIGNvbmN1cnJlbmN5IGZpeCBmb3IgZnV0ZXggcHJpdmF0ZSBoYXNoZXMuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIGtlcm5lbCBsb2dpYyAodGhlIGZ1dGV4IHN1YnN5c3RlbSksIGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6IHRob3JvdWdobHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGludm9sdmVkLiBGcm9tIHRoZSBwYXRjaCBhbmQgYSBxdWljayBzY2FuLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyB0aGVzZTogYF9fZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9oYXNoYCwgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBJbXBvcnRhbnQgdG8gbm90ZSBpZiB0aGV5IGFyZSBzdGF0aWMgb3IgZXhwb3J0ZWQuIEFoLCBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMuIFRoaXMgbWVhbnMgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB3aXRoaW4gdGhlIGZpbGUuIE9rYXksIEkgbmVlZCB0byBzZWUgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBjYWxsIHRoZXNlLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBwb2ludHMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNzczPXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4My1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTc4NDpzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg1LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc3LWFnYWluOlxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODc4Olx0XHR3YWl0X3Zhcl9ldmVudChtbSwgZnV0ZXhfcGl2b3RfcGVuZGluZyhtbSkpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc5LVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIEZ1dGV4IEhhc2hpbmcgYW5kIEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGlzIGJlaW5nIGNhbGxlZCwgYW5kIEkga25vdyBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2FsbGluZyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuIGBmdXRleF9waXZvdF9wZW5kaW5nYCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB0aGUgdHJhbnNpdGlvbiBvciBtYW5hZ2VtZW50IG9mIHBlbmRpbmcgb3BlcmF0aW9ucyByZWxhdGVkIHRvIGEgZnV0ZXgsIGJ1dCB0byByZWFsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWA/JiMzNDsuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggdXBzdHJlYW0gZnJvbSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMga2V5LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHN0b3J5LiBJcyBpdCBwYXJ0IG9mIHRoZSBpbml0aWFsIGZ1dGV4IHNldHVwLCBhIHJlYWxsb2NhdGlvbiBzdHJhdGVneSwgb3IgdHJpZ2dlcmVkIGJ5IHNvbWUgc3BlY2lmaWMgY29udGVudGlvdXMgc2l0dWF0aW9uPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVx0ICpcdFx0XHRcdCAgcmN1X2Fzc2lnbl9wb2ludGVyKFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gsIG5ldyk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDE6XHQgKlx0XHRcdFx0ZnV0ZXhfaGFzaF9hbGxvY2F0ZSgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDItXHQgKlx0XHRcdFx0ICBmdXRleF9yZWZfZHJvcCgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgyOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY3LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTY4Olx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NjktfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgxLSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4My1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKSB7IHJldHVybiAwOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDMyLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBGdXRleCBIYXNoaW5nKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1dGV4IGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgYW5kIGV4cGVjdGVkIOKAkyBjZW50cmFsaXppbmcgYWxsb2NhdGlvbiBsb2dpYyBpcyBnb29kIGRlc2lnbi4gSXQgbGV0cyB1cyBjb250cm9sIHJlc291cmNlIHVzYWdlIGFuZCBoYW5kbGUgZGlmZmVyZW50IGluaXRpYWxpemF0aW9uIHBhdGhzIGNvbnNpc3RlbnRseS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQgaXMgd2hvJiMzOTtzIHVzaW5nIHRoZSBoYXNoIHRhYmxlJiMzOTtzIHBpdm90PyBGcm9tIHdoYXQgSSBzZWUsIGl0IGxvb2tzIGxpa2UgYGZ1dGV4X3Bpdm90X2hhc2hgIHdpbGwgYmUgYSBjcml0aWNhbCBmdW5jdGlvbiB0byBhbmFseXNlLCBJIHdhbnQgdG8gZmluZCBvdXQgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGUgcGl2b3QgZnVuY3Rpb24sIHRvIHNlZSBob3cgdGhhdCBwaXZvdCBpcyB1c2VkLCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcGl2b3RfaGFzaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC9jb3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xNjE9c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMTktXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMDpzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjI3LVx0XHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoyMjg6XHRcdFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjktXHRcdH1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTUtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1NjpcdGZ1dGV4X3Bpdm90X2hhc2gobW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzEtXHR9XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3MjpcdGZ1dGV4X3Bpdm90X2hhc2goa2V5LVx1MDAzZXByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzMtXHRnb3RvIGFnYWluO1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTY4MD1zdGF0aWMgdm9pZCBmdXRleF9yZWZfZHJvcChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY5NzpcdCAqIGZ1dGV4X2hhc2goKVx0XHRcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2OTgtXHQgKiAgIGd1YXJkKHJjdSk7XHRcdCAgZ3VhcmQobW0tXHUwMDNlZnV0ZXgucGhhc2gubG9jayk7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNzg0PXN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzk1Olx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3OTYtXHQgKi9cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVx0XHRcdCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTMxOlx0XHRcdGlmICghX19mdXRleF9waXZvdF9oYXNoKG1tLCBuZXcpIFx1MDAyNlx1MDAyNiBjdXN0b20pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzItXHRcdFx0XHRnb3RvIGFnYWluO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRnV0ZXggSGFzaGluZyBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBmdXRleCBoYXNoaW5nIHNpdHVhdGlvbi4gSXQgbG9va3MgbGlrZSBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgIGJvdGggcmVseSBvbiBgZnV0ZXhfcGl2b3RfaGFzaGAgaW50ZXJuYWxseS4gIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJlbGF0aW9uc2hpcC4gIFRoZW4gd2Ugc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGNhbGxzIGBfX2Z1dGV4X3Bpdm90X2hhc2hgLiBTbywgZXNzZW50aWFsbHksIHRoZXkgYWxsIHNlZW0gY29ubmVjdGVkIHVuZGVyIHRoZSBob29kLiBOb3csIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBwdWJsaWMtZmFjaW5nLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBmdW5jdGlvbnMgd2UgbmVlZCB0byByZWFsbHkgYmUgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X3ByaXZhdGVfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaGAuIFRpbWUgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Z1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTQ0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgd2FpdCBhIG1pbnV0ZS4gSSYjMzk7bSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBsaXN0ZWQgaW4gYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBhbmQgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcuIEJ1dCB0aGUgcmVhbCBzdXJwcmlzZT8gSXQmIzM5O3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24hIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGZ1dGV4IGhhc2ggdGFibGUgaXMgaW5pdGlhbGl6ZWQgYW5kIHBvdGVudGlhbGx5LCBob3cgaXQgY2FuIGJlIG1vZGlmaWVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgaXQsIGFuZCB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBzZWUgd2hhdCBpdCBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mdXRleC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRnV0ZXggSGFzaGluZyBNZWNoYW5pc21zKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHN0cnVjdHVyZXMgZnVuY3Rpb24gd2l0aGluIHRoZSBmdXRleCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgY29udHJpYnV0ZSB0byBlZmZpY2llbnQgbG9va3VwIGFuZCBtYW5hZ2VtZW50IG9mIGZ1dGV4ZXMuIEFyZSB0aGV5IHNlcGFyYXRlIGhhc2ggdGFibGVzLCBvciBpcyBvbmUgYSBzdWJzZXQvdmFyaWFudCBvZiB0aGUgb3RoZXI/IEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBBcmUgdGhlc2UgaGFzaCB0YWJsZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBwcml2YXRlIGFuZCBzaGFyZWQgZnV0ZXhlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgcmVzb2x2ZSBjb2xsaXNpb25zLCBhbmQgaG93IHRoZSBzaXppbmcgb2YgdGhlc2UgdGFibGVzIGltcGFjdHMgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gSSB3aWxsIHdhbnQgdG8gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIHR3bywgdW5kZXJzdGFuZGluZyB0aGVpciBpbmRpdmlkdWFsIHJvbGVzIGFuZCBpZiB0aGV5IGNhbiBoYXZlIGFuIGVmZmVjdCBvbiBhIHNwZWNpZmljIHN5c3RlbSBvciBhcHBsaWNhdGlvbi4gVGhpcyBpbnZvbHZlcyBhc3Nlc3NpbmcgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNob3NlbiBoYXNoIGZ1bmN0aW9uIGFuZCBleHBsb3JpbmcgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIGtlcm5lbCBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnV0ZXhfcHJpdmF0ZV9oYXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2Z1dGV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jPTU5PXN0YXRpYyBzdHJ1Y3Qge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtNjgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjY5OnN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2gge1xua2VybmVsL2Z1dGV4L2NvcmUuYy03MC1cdGludFx0XHRzdGF0ZTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEyOT1zdGF0aWMgc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTMwOl9fZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICoqZnBoX3ApO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMi0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzM6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2dldChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzU6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM2LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzc9ZW51bSB7IEZSX1BFUkNQVSA9IDAsIEZSX0FUT01JQyB9O1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzOTpzdGF0aWMgYm9vbCBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQwLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE0My1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTQ0OnZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE0NS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1MTpfX2Z1dGV4X2hhc2hfcHJpdmF0ZSh1bmlvbiBmdXRleF9rZXkgKmtleSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTIte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTYwLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjE6c3RhdGljIHZvaWQgZnV0ZXhfcmVoYXNoX3ByaXZhdGUoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqb2xkLFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjI6XHRcdFx0XHQgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjMte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTU6c3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpuZXcpXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ny1cdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTg6XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5OS1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjIyLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSB7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMzpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjQtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzNC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDYtXHRzY29wZWRfZ3VhcmQocmN1KSB7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI0NzpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDgtXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTItXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI1MzpcdFx0aWYgKGZ1dGV4X3ByaXZhdGVfaGFzaF9nZXQoZnBoKSlcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjU0LVx0XHRcdHJldHVybiBmcGg7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNjA9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2My1cdHNjb3BlZF9ndWFyZChyY3UpIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjY0Olx0XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGggPSBOVUxMO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjUtXHRcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI2OTpcdFx0aWYgKCFmcGggfHwgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNzAtXHRcdFx0cmV0dXJuIChzdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZil7IC5oYiA9IGhiLCAuZnBoID0gZnBoIH07XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjc9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjM2ODpfX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNjkte1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU4OT1zdGF0aWMgdm9pZCBmdXRleF9yZWZfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1OTAtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1OTE6c3RhdGljIHZvaWQgX19mdXRleF9yZWZfYXRvbWljX2JlZ2luKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU5Mi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjEyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjEzOnN0YXRpYyB2b2lkIF9fZnV0ZXhfcmVmX2F0b21pY19lbmQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjE0LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2NTU9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjU3LVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG1tX3N0cnVjdCwgZnV0ZXgucGhhc2gucmN1KTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTY1ODpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaCk7XG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2NTktXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjc5LSAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjgwOnN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9kcm9wKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY4MS17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzA1LVx0ICpcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwNjpcdCAqICAgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpOyAvLyBPT1BTXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDctXHQgKlxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcyNjpzdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNy17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzM5LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzQwOnN0YXRpYyBib29sIGZ1dGV4X3JlZl9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzQxLXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NTMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NTQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzU1LXtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3NzQte1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzc1Olx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzc2LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4Ni1cdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoO1xua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg3Olx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg4LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwMy1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNDpzdGF0aWMgYm9vbCBmdXRleF9oYXNoX2xlc3Moc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYSxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNTpcdFx0XHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgwNi17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgzMC1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgzMTpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTgzMi1cdGJvb2wgY3VzdG9tID0gZmxhZ3MgXHUwMDI2IEZIX0NVU1RPTTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4ODEtXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNm1tLVx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spIHtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg4MjpcdFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnJlZSBfX2ZyZWUoa3ZmcmVlKSA9IE5VTEw7XG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4ODM6XHRcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmN1ciwgKm5ldztcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MjgtXHRcdFx0ICogV2lsbCBzZXQgbW0tXHUwMDNlZnV0ZXgucGhhc2gubmV3X2hhc2ggb24gZmFpbHVyZTtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkyOTpcdFx0XHQgKiBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KCkgd2lsbCB0cnkgYWdhaW4uXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzAtXHRcdFx0ICovXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTM4PWludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDAtXHR1bnNpZ25lZCBpbnQgdGhyZWFkcywgYnVja2V0cywgY3VycmVudF9idWNrZXRzID0gMDtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk0MTpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0Mi1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTcyLXtcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk3MzpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3NC1cbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yMDg9c3RydWN0IGZ1dGV4X3Ege1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMC1cdGF0b21pY190IHJlcXVldWVfc3RhdGU7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyMjE6XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpkcm9wX2ZwaDtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMi0jaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQyLVx0c3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjtcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0MzpcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NC19O1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ni0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ3OmV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ4OmV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1MC0jZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjUxOnN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKSB7IH1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1My0jZW5kaWZcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTg6XHQgICAgIGlmIChfVC5mcGgpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QuZnBoKSxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OS1cdCAgICAgZnV0ZXhfaGFzaChrZXkpLCB1bmlvbiBmdXRleF9rZXkgKmtleSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjAtXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNjE6REVGSU5FX0NMQVNTKHByaXZhdGVfaGFzaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYyOlx0ICAgICBpZiAoX1QpIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoX1QpLFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYzOlx0ICAgICBmdXRleF9wcml2YXRlX2hhc2gobW0pLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNjQtXG4tLVxua2VybmVsL2Z1dGV4L3BpLmM9OTIzPWludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGt0aW1lX3QgKnRpbWUsIGludCB0cnlsb2NrKVxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTEwMTItXHRcdCAqL1xua2VybmVsL2Z1dGV4L3BpLmM6MTAxMzpcdFx0ZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChub19mcmVlX3B0cihoYnIuZnBoKSk7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMDE0LVx0XHQvKlxuLS1cbmtlcm5lbC9mdXRleC9waS5jLTExMDUtXHRcdC8qIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGZyb20gZnV0ZXhfdW5sb2NrX3BpKCkgKi9cbmtlcm5lbC9mdXRleC9waS5jOjExMDY6XHRcdGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQocS5kcm9wX2ZwaCk7XG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTA3LVx0XHRnb3RvIG91dDtcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYz0xMTQxPXN0YXRpYyBpbnQgX19mdXRleF91bmxvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMjIxLVx0XHRcdGlmIChmdXRleF9rZXlfaXNfcHJpdmF0ZShcdTAwMjZrZXkpKVxua2VybmVsL2Z1dGV4L3BpLmM6MTIyMjpcdFx0XHRcdHRvcF93YWl0ZXItXHUwMDNlZHJvcF9mcGggPSBmdXRleF9wcml2YXRlX2hhc2goa2V5LnByaXZhdGUubW0pO1xua2VybmVsL2Z1dGV4L3BpLmMtMTIyMy1cbi0tXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTIzMD12b2lkIHJlcXVldWVfcGlfd2FrZV9mdXRleChzdHJ1Y3QgZnV0ZXhfcSAqcSwgdW5pb24gZnV0ZXhfa2V5ICprZXksXG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDQtXHRpZiAoZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSlcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjQ1Olx0XHRxLVx1MDAzZWRyb3BfZnBoID0gZnV0ZXhfcHJpdmF0ZV9oYXNoKGtleS1cdTAwM2Vwcml2YXRlLm1tKTtcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjQ2LVx0cS1cdTAwM2Vsb2NrX3B0ciA9IFx1MDAyNmhiLVx1MDAzZWxvY2s7XG4tLVxua2VybmVsL2Z1dGV4L3JlcXVldWUuYz03ODY9aW50IGZ1dGV4X3dhaXRfcmVxdWV1ZV9waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtOTA4LVx0LyogQWRkaXRpb25hbCByZWZlcmVuY2UgZnJvbSByZXF1ZXVlX3BpX3dha2VfZnV0ZXgoKSAqL1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MDk6XHRmdXRleF9wcml2YXRlX2hhc2hfcHV0KHEuZHJvcF9mcGgpO1xua2VybmVsL2Z1dGV4L3JlcXVldWUuYy05MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZnV0ZXhfaGFzaF9wcmN0bGAgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgZnV0ZXhfaGFzaF9wcmN0bGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbiBkb3duIGl0cyBvcmlnaW4uIElzIHRoaXMgZnVuY3Rpb24gY2FsbCBkaXJlY3RseSB0cmlnZ2VyZWQgYnkgYHN5c19wcmN0bGAsIG9yIGFyZSB0aGVyZSBvdGhlciBwb3RlbnRpYWwgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBJIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGNhbGwgcGF0aCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGUga2VybmVsJiMzOTtzIHByb2Nlc3MgY29udHJvbCBtZWNoYW5pc21zLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGZ1dGV4ZXMgYW5kIHRoZWlyIGhhc2ggdGFibGUgbWFuYWdlbWVudC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIGFuZCBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX3ByY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnV0ZXguaD03Nz1sb25nIGRvX2Z1dGV4KHUzMiBfX3VzZXIgKnVhZGRyLCBpbnQgb3AsIHUzMiB2YWwsIGt0aW1lX3QgKnRpbWVvdXQsXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtNzgtXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6Nzk6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODAtXG4tLVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTk0PXN0YXRpYyBpbmxpbmUgbG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6OTk6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMC17XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDE3PXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIwMjQ6aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAyNS17XG4tLVxua2VybmVsL3N5cy5jPTI1MzQ9U1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbi0tXG5rZXJuZWwvc3lzLmMtMjg4NC1cdGNhc2UgUFJfRlVURVhfSEFTSDpcbmtlcm5lbC9zeXMuYzoyODg1Olx0XHRlcnJvciA9IGZ1dGV4X2hhc2hfcHJjdGwoYXJnMiwgYXJnMywgYXJnNCk7XG5rZXJuZWwvc3lzLmMtMjg4Ni1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBmdXRleF9oYXNoYCBTeXN0ZW0gQ2FsbHMqKgoKUmlnaHQsIGxldCBtZSBzZWUuIEkmIzM5O3ZlIGdvdCBpdC4gYGZ1dGV4X2hhc2hfcHJjdGxgIGlzLCBhcyBJIHN1c3BlY3RlZCwgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIGBwcmN0bGAgaXMgY2FsbGVkIHdpdGggdGhlIGBQUl9GVVRFWF9IQVNIYCBvcHRpb24uIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN5c3RlbSBjYWxsLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXJlIGRvZXMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgY29tZSBpbnRvIHRoZSBwaWN0dXJlPyBXaGF0JiMzOTtzIHRoZSBjYWxsIHBhdGggdGhlcmU/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24gdG8gZ2V0IHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MS0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODMtdm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg0LSNlbHNlICAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04Ni1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDItfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwNC1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cbi0tXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5rZXJuZWwvZm9yay5jLTE5NzYtXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxua2VybmVsL2ZvcmsuYy0xOTc4LXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2Vzcyhcbi0tXG5rZXJuZWwvZm9yay5jLTI0MTAtXG5rZXJuZWwvZm9yay5jOjI0MTE6XHRpZiAobmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoY2xvbmVfZmxhZ3MpKSB7XG5rZXJuZWwvZm9yay5jOjI0MTI6XHRcdHJldHZhbCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCgpO1xua2VybmVsL2ZvcmsuYy0yNDEzLVx0XHRpZiAocmV0dmFsKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxOTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBGdXRleCBIYXNoIEFsbG9jYXRpb24qKgoKT2theSwgc28gYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgZ2V0cyBjYWxsZWQgYnkgYGNvcHlfcHJvY2Vzc2AsIHNwZWNpZmljYWxseSBkdXJpbmcgYGZvcmtgIGFuZCBgY2xvbmVgIG9wZXJhdGlvbnMuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYSBjb3JlIHN5c3RlbSBjYWxsIHRoYXQmIzM5O3MgdXNlZCAqYWxsKiB0aGUgdGltZS4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgYSBncmVhdCBwbGFjZSB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBNeSBwcmlvcml0eSBpcyB0byBmaW5kIGJ1Z3MgdGhhdCBjb3VsZCBiZSByZW1vdGVseSB0cmlnZ2VyZWQuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiBgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSGAuIEkmIzM5O2xsIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgZGV0YWlscyBvZiBgRlVURVhfUFJJVkFURV9IQVNIYC4gRW5zdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhIHN1Y2Nlc3NmdWwgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ3JvdW5kIHdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtGVVRFWF9QUklWQVRFX0hBU0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTgwLVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgxOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODQ6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oPTg2PXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9mdXRleC5oOjg3OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaD0xNTI9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X2ZpeHVwX3JvYnVzdF91bmxvY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xNTUtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6MTU2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oPTIzPXN0cnVjdCBmdXRleF9zY2hlZF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmgtMzMtXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg6MzQ6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MTQyPWV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xNDQtLyogc2FtZSBhcyBhYm92ZSBidXQgcGVyZm9ybXMgdGhlIHNsb3cgcGF0aCBmcm9tIHRoZSBhc3luYyBjb250ZXh0LiBDYW5cbi0tXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcbi0tXG5pbml0L0tjb25maWctMTg0OC1cbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbmluaXQvS2NvbmZpZy0xODUwLVx0Ym9vbFxuLS1cbmtlcm5lbC9mb3JrLmM9MTIxMj1FWFBPUlRfU1lNQk9MX0dQTChtbXB1dCk7XG5rZXJuZWwvZm9yay5jLTEyMTMtXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxua2VybmVsL2ZvcmsuYy0xMjE1LXN0YXRpYyB2b2lkIG1tcHV0X2FzeW5jX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMxLVxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzI6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTI2MD1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiBmdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5KVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc1LVxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzY6I2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxua2VybmVsL2Z1dGV4L2NvcmUuYz0yNzg9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYgZnV0ZXhfaGFzaCh1bmlvbiBmdXRleF9rZXkgKmtleSlcbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjgzOiNlbmRpZiAvKiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4NC1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTM2OD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxua2VybmVsL2Z1dGV4L2NvcmUuYzozNzM6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzc0LVx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcdTAwMjZcdTAwMjYgZnV0ZXhfa2V5X2lzX3ByaXZhdGUoa2V5KSkge1xuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTU2Nz1zdGF0aWMgdm9pZCBmdXRleF9oYXNoX2J1Y2tldF9pbml0KHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqZmhiKVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTU3NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNTc3LVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4MTojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgyLXN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhzbG90cywgdW5zaWduZWQgaW50IGZsYWdzKSB7IHJldHVybiAtRUlOVkFMOyB9XG4tLVxua2VybmVsL2Z1dGV4L2NvcmUuYz0xOTg0PXN0YXRpYyBpbmxpbmUgdm9pZCBmdXRleF9oYXNoX2luaXRfbW0oc3RydWN0IGZ1dGV4X21tX2RhdGEgKmZkKSB7IH1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk4NTojZW5kaWYgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cbi0tXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIwMTM9c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3JvYnVzdF91bmxvY2tfaW5pdF9tbShzdHJ1Y3QgZnV0ZXhfbW1fZGF0YSAqZmQpIHsgfVxuLS1cbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAxNS1cbmtlcm5lbC9mdXRleC9jb3JlLmM6MjAxNjojaWYgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKSB8fCBkZWZpbmVkKENPTkZJR19GVVRFWF9ST0JVU1RfVU5MT0NLKVxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNDE9c3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYge1xuLS1cbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0NS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xua2VybmVsL2Z1dGV4L2Z1dGV4Lmg9MjQ4PWV4dGVybiB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjUxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiBOVUxMOyB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgdGhlIEZVVEVYX1BSSVZBVEVfSEFTSCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBlbmFibGluZyBgRlVURVhfUFJJVkFURV9IQVNIYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhpcyBzcGVjaWZpYyBzeW1ib2wgaXMgZGVmaW5lZCwgd2hhdCB0aGUgY29uZGl0aW9ucyBhcmUgZm9yIGl0cyBhY3RpdmF0aW9uLCBhbmQgd2hhdCBvdGhlciBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSBpdHMgaW5jbHVzaW9uLiBIb3BlZnVsbHksIGBpbml0L0tjb25maWdgIHByb3ZpZGVzIGEgY2xlYXIgYW5kIGNvbmNpc2UgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIGFuZCBwb3NzaWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBicm91Z2h0IGludG8gcGxheS4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGZpbGUgd2lsbCBwb2ludCBtZSB0byB0aGUgYnJvYWRlciBrZXJuZWwgZmVhdHVyZXMgb3Igc3Vic3lzdGVtcyB0aGF0IHJlbHkgb24gdGhpcyBmdXRleCBpbXBsZW1lbnRhdGlvbi4gS25vd2luZyB0aGF0LCBJIGNhbiBkZWR1Y2UgdGhlIG92ZXJhbGwgcHVycG9zZSBhbmQgZGVzaWduIGNob2ljZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODQwOlx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmUgYnVpbHQgd2l0aG91dFxuMTg0MTpcdFx0ICBzdXBwb3J0IGZvciBcJiMzNDtmYXN0IHVzZXJzcGFjZSBtdXRleGVzXCYjMzQ7LiAgVGhlIHJlc3VsdGluZyBrZXJuZWwgbWF5IG5vdFxuMTg0MjpcdFx0ICBydW4gZ2xpYmMtYmFzZWQgYXBwbGljYXRpb25zIGNvcnJlY3RseS5cbjE4NDM6XHRcbjE4NDQ6XHRjb25maWcgRlVURVhfUElcbjE4NDU6XHRcdGJvb2xcbjE4NDY6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IFJUX01VVEVYRVNcbjE4NDc6XHRcdGRlZmF1bHQgeVxuMTg0ODpcdFxuMTg0OTpcdGNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcbjE4NTA6XHRcdGJvb2xcbjE4NTE6XHRcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2ICFCQVNFX1NNQUxMIFx1MDAyNlx1MDAyNiBNTVVcbjE4NTI6XHRcdGRlZmF1bHQgeVxuMTg1MzpcdFxuMTg1NDpcdGNvbmZpZyBGVVRFWF9NUE9MXG4xODU1Olx0XHRib29sXG4xODU2Olx0XHRkZXBlbmRzIG9uIEZVVEVYIFx1MDAyNlx1MDAyNiBOVU1BXG4xODU3Olx0XHRkZWZhdWx0IHlcbjE4NTg6XHRcbjE4NTk6XHRjb25maWcgSEFWRV9GVVRFWF9ST0JVU1RfVU5MT0NLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV0ZXggQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGlzIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgbGlrZWx5IGEgY29tbW9uIHNjZW5hcmlvLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IGlzc3VlIHdpdGhpbiB0aGUgYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgZnVuY3Rpb25zLiBNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhbmQgaG93IHRoZSBmaXggYWRkcmVzc2VzIHRoZSByYWNlIGNvbmRpdGlvbi4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgZnVuY3Rpb25zLiBJJiMzOTt2ZSBnb3QgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGNhbGxlZCBkdXJpbmcgZm9yaywgYGZ1dGV4X2hhc2hfcHJjdGxgIGFjY2Vzc2libGUgdmlhIGBwcmN0bGAgd2l0aCBgUFJfRlVURVhfSEFTSGAsIGFuZCB0aGVuIGBmdXRleF9wcml2YXRlX2hhc2hgIGFuZCBgZnV0ZXhfaGFzaGAsIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiB2YXJpb3VzIGZ1dGV4IG9wZXJhdGlvbnMuCgpgZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIGl0JiMzOTtzIGEgc3BlY2lmaWMgZW50cnkgcG9pbnQgdGhyb3VnaCBgc3lzX3ByY3RsYC4gSSBzaG91bGQgYWxzbyBleGFtaW5lIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBBbmQgYWxzbyB0aGUgYGZ1dGV4X2hhc2hgIGZ1bmN0aW9uLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGUsIHRvIGJ1aWxkIG91dCB0aGUgY29udGV4dC4gQWgsIHRoZXkmIzM5O3JlIGFsbCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AuIEV4Y2VsbGVudC4KCkkgYWxzbyBzZWUgdGhhdCBgZnV0ZXhfaGFzaF9mcmVlYCBpcyBjYWxsZWQgZHVyaW5nIG1tcHV0LiBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgd2hpY2ggYXJlIHN0YXRpYy4KCk15IG9yaWdpbmFsIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3YXMgYGZ1dGV4X2hhc2hfcHJjdGxgLCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCwgYGZ1dGV4X2hhc2hgLCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAuIEJ1dCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZ1dGV4X2hhc2hgIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhcmUgY2FsbGVkIGJ5IG5lYXJseSBldmVyeSBmdXRleCBvcGVyYXRpb24uIFRoZXkgYXJlIHRvbyBnZW5lcmljLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLgoKYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGEgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGZvciB0aGlzIGZlYXR1cmUsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBjYWxsZWQgZHVyaW5nIGZvcmsuIEJ1dCwgbGV0JiMzOTtzIHNlZSwgYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIHByb2JhYmx5IHN1ZmZpY2llbnQuIEl0IGFsbG93cyBhbGxvY2F0aW5nIGEgY3VzdG9tIGhhc2gsIHdoaWNoIHRoZW4gdHJpZ2dlcnMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgLiBUaGUgYnVnIGlzIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYCB3aGljaCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIHdoZW4gd2FpdGluZyBmb3IgdGhlIHBpdm90IHRvIGNvbXBsZXRlLiBBbmQgdGhlIHBpdm90IGlzIGluaXRpYXRlZCBieSBlaXRoZXIgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIG9yIGBmdXRleF9waXZvdF9oYXNoYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBmdXRleF9oYXNoYCBhbmQgYGZ1dGV4X3ByaXZhdGVfaGFzaGAuCgpTbywgYGZ1dGV4X2hhc2hfcHJjdGxgIHNlZW1zIGxpa2UgdGhlIGJlc3QgZm9jdXMgc3ltYm9sLiBJdCB0cmlnZ2VycyB0aGUgYWxsb2NhdGlvbiBhbmQgc3Vic2VxdWVudCBwaXZvdCwgd2hlcmUgdGhlIGJ1ZyBpcy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGZ1bmN0aW9uJiMzOTtzIGxvY2F0aW9uIGFnYWluLiBZZXAsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0XHRmdXRleF9yb2J1c3RfdW5sb2NrX2luaXRfbW0oXHUwMDI2bW0tXHUwMDNlZnV0ZXgpO1xuMjAyMTpcdH1cbjIwMjI6XHQjZW5kaWZcbjIwMjM6XHRcbjIwMjQ6XHRpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxuMjAyNTpcdHtcbjIwMjY6XHRcdHVuc2lnbmVkIGludCBmbGFncyA9IEZIX0NVU1RPTTtcbjIwMjc6XHRcdGludCByZXQ7XG4yMDI4Olx0XG4yMDI5Olx0XHRzd2l0Y2ggKGFyZzIpIHtcbjIwMzA6XHRcdGNhc2UgUFJfRlVURVhfSEFTSF9TRVRfU0xPVFM6XG4yMDMxOlx0XHRcdGlmIChhcmc0KVxuMjAzMjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjAzMzpcdFx0XHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcbjIwMzQ6XHRcdFx0YnJlYWs7XG4yMDM1Olx0XG4yMDM2Olx0XHRjYXNlIFBSX0ZVVEVYX0hBU0hfR0VUX1NMT1RTOlxuMjAzNzpcdFx0XHRyZXQgPSBmdXRleF9oYXNoX2dldF9zbG90cygpO1xuMjAzODpcdFx0XHRicmVhaztcbjIwMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRm9jdXNpbmcgb24gRnV0ZXggSGFzaGluZyoqCgpBbHJpZ2h0LCB5ZXAsIGBmdXRleF9oYXNoX3ByY3RsYCBkZWZpbml0ZWx5IGZlZWxzIGxpa2UgYSBnb29kLCBzb2xpZCBwb2ludCBvZiBmb2N1cy4gSXQgaGl0cyBhIGtleSBhcmVhLCBhbmQgaXQmIzM5O3Mgd2VsbC1kZWZpbmVkIGVub3VnaCB0byBkaWcgaW50by4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGA/IERvZXMgdGhhdCBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZT8gSXQmIzM5O3MgcmVsYXRlZCwgYnV0IGlzIGl0IGEgcG90ZW50aWFsIHNlY29uZGFyeSBhcmVhIG9mIGV4cGxvcmF0aW9uLCBvciBkb2VzIGl0IGRvdmV0YWlsIG5pY2VseT8gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSB0d28gc3ltYm9scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZnV0ZXgvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxOTMwOlx0XHRcdFx0ICovXG4xOTMxOlx0XHRcdFx0aWYgKCFfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIG5ldykgXHUwMDI2XHUwMDI2IGN1c3RvbSlcbjE5MzI6XHRcdFx0XHRcdGdvdG8gYWdhaW47XG4xOTMzOlx0XHRcdH1cbjE5MzQ6XHRcdH1cbjE5MzU6XHRcdHJldHVybiAwO1xuMTkzNjpcdH1cbjE5Mzc6XHRcbjE5Mzg6XHRpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXG4xOTM5Olx0e1xuMTk0MDpcdFx0dW5zaWduZWQgaW50IHRocmVhZHMsIGJ1Y2tldHMsIGN1cnJlbnRfYnVja2V0cyA9IDA7XG4xOTQxOlx0XHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XG4xOTQyOlx0XG4xOTQzOlx0XHRpZiAoIWN1cnJlbnQtXHUwMDNlbW0pXG4xOTQ0Olx0XHRcdHJldHVybiAwO1xuMTk0NTpcdFxuMTk0NjpcdFx0c2NvcGVkX2d1YXJkKHJjdSkge1xuMTk0NzpcdFx0XHR0aHJlYWRzID0gbWluX3QodW5zaWduZWQgaW50LCBnZXRfbnJfdGhyZWFkcyhjdXJyZW50KSwgbnVtX29ubGluZV9jcHVzKCkpO1xuMTk0ODpcdFxuMTk0OTpcdFx0XHRmcGggPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC1cdTAwM2VtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODkKCQkJCQkJCW91dHB1dDogMTI4CgkJCQkJCQl0aG91Z2h0czogMzQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGdXRleCBQcml2YXRlIEhhc2ggQ29uY3VycmVuY3kgRml4KioKCk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBBbmQsIG9mIGNvdXJzZSwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMga2V5LiBJdCYjMzk7cyB0aGUgZGVmYXVsdCwgd2hpY2ggaXMgZ29vZCwgYnV0IGxldCYjMzk7cyBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGluY2x1ZGluZyBpdCBpbiBvdXIgYnVpbGQgY29uZmlndXJhdGlvbi4gQWgsIHllcywgaXQgaGFzIHRob3NlIGRlcGVuZGVuY2llczogYEZVVEVYYCwgYCFCQVNFX1NNQUxMYCwgYW5kIGBNTVVgLiBNYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLgoKUmlnaHQsIGJhY2sgdG8gdGhlIHBhdGNoLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgY2hhbmdlcyBhZ2Fpbi4gV2UmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciB3aXRoIGBXUklURV9PTkNFYC4gQW5kIHRoZSBzYW1lIHdpdGggdGhlIE5VTEwgYXNzaWdubWVudC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtdXRleCBndWFyZCB3aXRoIFJDVS4gV2UmIzM5O3ZlIGdvdCBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoKWAsIGFuZCBub3cgd2UgaGF2ZSBgc21wX3JtYigpYCBhbmQgYFJFQURfT05DRShtbXBoLSZndDtoYXNoX25ldylgLiBZZXAsIHRoaXMgaXMgYSB0ZXh0Ym9vayBjb25jdXJyZW5jeSBmaXguIFRoZXkmIzM5O3JlIHVzaW5nIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGVzIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzd2l0Y2hpbmcuCgpUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgY29uY3VycmVuY3kgaXNzdWVzIHdlJiMzOTtyZSBhZGRyZXNzaW5nIGFyZSBzdWJ0bGUgYW5kIGNhbiBiZSBlYXNpbHkgbWlzc2VkLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSByZWFjaGFibGUgdGhyb3VnaCBgcHJjdGwoUFJfRlVURVhfSEFTSClgIGFuZCBkdXJpbmcgcHJvY2VzcyBjcmVhdGlvbiwgc28gZnV6emluZyB0aG9zZSB3aWxsIGV4ZXJjaXNlIHRoZXNlIGxvY2tsZXNzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLiBCeSBmdXp6aW5nIHRoZXNlLCB3ZSYjMzk7bGwgY29uZmlybSB0aGF0IHRoZSBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlVURVhfUFJJVkFURV9IQVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZnV0ZXhfaGFzaF9wcmN0bCYjMzQ7LAogICAgJiMzNDtmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZVVEVYX1BSSVZBVEVfSEFTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Z1dGV4X2hhc2hfcHJjdGwmIzM0OywKICAgICYjMzQ7ZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBsb2dpYyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwNjo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDg0N2FjNDNlNDYyODkwOWM5Mjk5OGU2MzkwZjliMmQ5ZDYwNzdiYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA2OjU1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4L2NvcmUuYyBiL2tlcm5lbC9mdXRleC9jb3JlLmMKaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZnV0ZXgvY29yZS5jCkBAIC0yMDIsNyAmIzQzOzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqCiAJZnBoID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbXBoLSZndDtoYXNoLCBsb2NrZGVwX2lzX2hlbGQoJmFtcDttbXBoLSZndDtsb2NrKSk7CiAJaWYgKGZwaCkgewogCQlpZiAoIWZ1dGV4X3JlZl9pc19kZWFkKGZwaCkpIHsKLQkJCW1tcGgtJmd0O2hhc2hfbmV3ID0gbmV3OwomIzQzOwkJCVdSSVRFX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcsIG5ldyk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIApAQCAtMjI0LDcgJiM0MzsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCiAJCWZwaCA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKIAkJaWYgKGZwaCkgewotCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgTlVMTCk7CiAJCQlfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7CiAJCX0KIAl9CkBAIC0xNzg2LDEyICYjNDM7MTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCXN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9ICZhbXA7bW0tJmd0O2Z1dGV4LnBoYXNoOwogCXN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDsKIAotCWd1YXJkKG11dGV4KSgmYW1wO21tcGgtJmd0O2xvY2spOwomIzQzOwlndWFyZChyY3UpKCk7CiAKLQlpZiAoIW1tcGgtJmd0O2hhc2hfbmV3KQomIzQzOwlmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC0mZ3Q7aGFzaCk7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWQKJiM0MzsJICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpbgomIzQzOwkgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS4KJiM0MzsJICovCiYjNDM7CXNtcF9ybWIoKTsKJiM0MzsJaWYgKCFSRUFEX09OQ0UobW1waC0mZ3Q7aGFzaF9uZXcpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC0mZ3Q7aGFzaCk7CiAJcmV0dXJuIGZ1dGV4X3JlZl9pc19kZWFkKGZwaCk7CiB9CiAKQEAgLTE4NzksNyAmIzQzOzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncykKIAkJY3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaCwKIAkJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO21tLSZndDtmdXRleC5waGFzaC5sb2NrKSk7CiAJCW5ldyA9IG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldzsKLQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDsKJiM0MzsJCVdSSVRFX09OQ0UobW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTsKIAogCQlpZiAoZnBoKSB7CiAJCQlpZiAoY3VyICZhbXA7JmFtcDsgIWN1ci0mZ3Q7aGFzaF9tYXNrKSB7CkBAIC0xODg5LDcgJiM0MzsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJCQkJICogdGhlIHNlY29uZCBvbmUgcmV0dXJucyBoZXJlLgogCQkJCSAqLwogCQkJCWZyZWUgPSBmcGg7Ci0JCQkJbW0tJmd0O2Z1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3OwomIzQzOwkJCQlXUklURV9PTkNFKG1tLSZndDtmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJaWYgKGN1ciAmYW1wOyZhbXA7ICFuZXcpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjMKCQkJCQkJCW91dHB1dDogMTQ1CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1dGV4IENvbmN1cnJlbmN5IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFzaF9uZXdgIHVwZGF0ZXMuIEl0JiMzOTtzIHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAgZm9yIGFzc2lnbm1lbnRzIHRvIGBtbXBoLSZndDtoYXNoX25ld2AgYW5kIGBtbS0mZ3Q7ZnV0ZXgucGhhc2guaGFzaF9uZXdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgb3JkZXJpbmcgZml4LiBHb29kLiBJdCYjMzk7cyB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGVuc3VyaW5nIHZpc2liaWxpdHkgYWNyb3NzIGNvcmVzLiBUaGUgY2hhbmdlIHRvIGBmdXRleF9waXZvdF9wZW5kaW5nYCB1c2luZyBgZ3VhcmQocmN1KSgpYCBpbnN0ZWFkIG9mIGBndWFyZChtdXRleCkoJmFtcDttbXBoLSZndDtsb2NrKWAgYW5kIHRoZSBhZGRpdGlvbiBvZiBgc21wX3JtYigpYCBmdXJ0aGVyIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXTigJlzIG1ha2luZyB0aGUgY29kZSBtb3JlIFJDVSBmcmllbmRseS4KCkxvb2tpbmcgYXQgdGhlIGRpZmYgZGlyZWN0bHkgY29uZmlybXMgdGhpcy4gV2UmIzM5O3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgd2l0aCBgV1JJVEVfT05DRWAsIHdoaWNoIGd1YXJhbnRlZXMgYXRvbWljIHdyaXRlcyBhbmQgcHJvcGVyIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgcmVhZHMgb2YgYG1tcGgtJmd0O2hhc2hfbmV3YCBoYXBwZW4gKmFmdGVyKiB0aGUgYHJjdV9kZXJlZmVyZW5jZShtbXBoLSZndDtoYXNoKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyB3aGVuIHRoZSBoYXNoIGlzIGJlaW5nIHVwZGF0ZWQgY29uY3VycmVudGx5LgoKVGhlIGNydWNpYWwgdGhpbmcgaXMsIGFuZCB0aGlzIGlzIHdoYXQgSSBuZWVkIHRvIGVtcGhhc2l6ZSwgKnRoZXJlJiMzOTtzIG5vIG5ldyB1c2VyLXNwYWNlIGV4cG9zdXJlIGhlcmUqLiBObyBuZXcgc3RydWN0dXJlcywgbm8gbmV3IGFsbG9jYXRpb25zLiBUaGlzIGlzbiYjMzk7dCBhYm91dCBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbnRyb2R1Y2luZyBuZXcgYWxsb2NhdGlvbiByaXNrcy4gVGhpcyBpcyAqcHVyZWx5KiBhYm91dCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgYW5kIHdyaXRlcnMgb2Ygc2hhcmVkIGRhdGEgc2VlIGEgY29uc2lzdGVudCB2aWV3LCBlc3BlY2lhbGx5IGR1cmluZyBoYXNoIHRhYmxlIHBpdm90cy4gSXTigJlzIGVudGlyZWx5IGFib3V0IGdldHRpbmcgdGhlIG1lbW9yeSBvcmRlcmluZyByaWdodC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgS0FTQU4sIHBhcnRpY3VsYXJseSBLQ1NBTiBmb3IgZGF0YSByYWNlcywgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcmVsZXZhbnQgaGVyZS4gS01TQU4sIG5vdCBzbyBtdWNoLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSB0b29scyBhcmUgZW5hYmxlZCB0byBwcm9wZXJseSB2YWxpZGF0ZSB0aGUgcGF0Y2gmIzM5O3MgZWZmaWNhY3kuIEJhc2ljYWxseSwgdGhpcyBpcyBhIHN5bmNocm9uaXphdGlvbiBwYXRjaC4gR29vZCB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgb3JkZXJpbmcgaXNzdWVzIGJ5IHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgYW5kIHJlYWRzIG9mIGBoYXNoX25ld2Agd2l0aCBgV1JJVEVfT05DRWAgYW5kIGBSRUFEX09OQ0VgLCBhZGRpbmcgbWVtb3J5IGJhcnJpZXJzIChgc21wX3JtYmApLCBhbmQgc3dpdGNoaW5nIGZyb20gYSBtdXRleCB0byBSQ1UgcHJvdGVjdGlvbiBpbiBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AuIFRoZXNlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gZGF0YSByYWNlcyBhbmQgc3luY2hyb25pemF0aW9uLCB3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIExPQ0tERVAuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBsb2dpYyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTozNy40MDUyMTY3MDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3NzMyMDQxNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYnkgcmVwbGFjaW5nIGRpcmVjdCBhc3NpZ25tZW50cyBhbmQgcmVhZHMgb2YgYGhhc2hfbmV3YCB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIGFkZGluZyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iYCksIGFuZCBzd2l0Y2hpbmcgZnJvbSBhIG11dGV4IHRvIFJDVSBwcm90ZWN0aW9uIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3LjQwNTIyMzU5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NzY0NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDg0N2FjNDNlNDYyODkwOWM5Mjk5OGU2MzkwZjliMmQ5ZDYwNzdiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwNjo1NTozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xcbmluZGV4IDEyOGM1NzUyZjIyNWMuLmU4NGJlNTQxMDU5YWIgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2Z1dGV4L2NvcmUuY1xcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcXG5AQCAtMjAyLDcgKzIwMiw3IEBAIHN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqXFxuIFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cXHUwMDNlaGFzaCwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbXBoLVxcdTAwM2Vsb2NrKSk7XFxuIFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0aWYgKCFmdXRleF9yZWZfaXNfZGVhZChmcGgpKSB7XFxuLVxcdFxcdFxcdG1tcGgtXFx1MDAzZWhhc2hfbmV3ID0gbmV3O1xcbitcXHRcXHRcXHRXUklURV9PTkNFKG1tcGgtXFx1MDAzZWhhc2hfbmV3LCBuZXcpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXG4gXFx0XFx0ZnBoID0gbW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xcbiBcXHRcXHRpZiAoZnBoKSB7XFxuLVxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFx0XFx0XFx0X19mdXRleF9waXZvdF9oYXNoKG1tLCBmcGgpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtMTc4NiwxMiArMTc4NiwxOCBAQCBzdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbiBcXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoO1xcbiBcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxuIFxcbi1cXHRndWFyZChtdXRleCkoXFx1MDAyNm1tcGgtXFx1MDAzZWxvY2spO1xcbitcXHRndWFyZChyY3UpKCk7XFxuIFxcbi1cXHRpZiAoIW1tcGgtXFx1MDAzZWhhc2hfbmV3KVxcbitcXHRmcGggPSByY3VfZGVyZWZlcmVuY2UobW1waC1cXHUwMDNlaGFzaCk7XFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IGlmIHdlIHNlZSB0aGUgbmV3IGhhc2gsIHdlIHdpbGwgYWxzbyBzZWUgdGhlIGNsZWFyZWRcXG4rXFx0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxcbitcXHQgKiBfX2Z1dGV4X3Bpdm90X2hhc2goKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9ybWIoKTtcXG4rXFx0aWYgKCFSRUFEX09OQ0UobW1waC1cXHUwMDNlaGFzaF9uZXcpKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cXHUwMDNlaGFzaCk7XFxuIFxcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xcbiB9XFxuIFxcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4gXFx0XFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykpO1xcbiBcXHRcXHRuZXcgPSBtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXc7XFxuLVxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcXG4gXFxuIFxcdFxcdGlmIChmcGgpIHtcXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhY3VyLVxcdTAwM2VoYXNoX21hc2spIHtcXG5AQCAtMTg4OSw3ICsxODk1LDcgQEAgc3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuIFxcdFxcdFxcdFxcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cXG4gXFx0XFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdFxcdGZyZWUgPSBmcGg7XFxuLVxcdFxcdFxcdFxcdG1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IG5ldztcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIG5ldyk7XFxuIFxcdFxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKGN1ciBcXHUwMDI2XFx1MDAyNiAhbmV3KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3Ljc1NTc1NjEwNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5MTE0OTI0NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZ1dGV4X2hhc2hfcHJjdGxcIixcbiAgICBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIGZ1dGV4IHByaXZhdGUgaGFzaCB0YWJsZSBhbGxvY2F0aW9uIGFuZCBwaXZvdGluZyBsb2dpYyBieSByZXBsYWNpbmcgYSBtdXRleCB3aXRoIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIGBwcmN0bChQUl9GVVRFWF9IQVNIKWAgYW5kIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBGdXp6aW5nIHRoZXNlIGVudHJ5IHBvaW50cyB3aWxsIGhlbHAgdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgbG9ja2xlc3Mgc3luY2hyb25pemF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjM3Ljc1NTc1ODAwNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTU2Mjg3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIEZ1dGV4IENvbmN1cnJlbmN5IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGtlcm5lbC9mdXRleC9jb3JlLmNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgaXQncyBtb2RpZnlpbmcgYWNjZXNzIHRvIGBtbXBoLVx1MDAzZWhhc2hfbmV3YCDigJMgc3BlY2lmaWNhbGx5IHVzaW5nIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjb25jdXJyZW5jeSBjb25jZXJuLiBHb29kIGNhdGNoIG9uIHRoZSBkZXZlbG9wZXJzJyBwYXJ0OyBpdCB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IHN5bmNocm9uaXphdGlvbiBhcm91bmQgdGhlIGZ1dGV4IHByaXZhdGUgaGFzaC4gVGhleSd2ZSBhbHNvIHN3aXRjaGVkIGBmdXRleF9waXZvdF9wZW5kaW5nYCB0byB1c2UgYGd1YXJkKHJjdSkoKWAgaW5zdGVhZCBvZiBgZ3VhcmQobXV0ZXgpKFx1MDAyNm1tcGgtXHUwMDNlbG9jaylgLCBhbG9uZyB3aXRoIGFuIGFkZGVkIGBzbXBfcm1iKClgLiBUaGF0J3MgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgc2hpZnQgdG93YXJkcyBSQ1UtYmFzZWQgcHJvdGVjdGlvbi5cblxuVGltZSB0byBkaWcgaW50byB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGU6IGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGFyZSB0aGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIFllcCwgY29uZmlybWVkLCB0aGlzIGlzIGEgY29uY3VycmVuY3kgZml4IGZvciBmdXRleCBwcml2YXRlIGhhc2hlcy4gR2l2ZW4gdGhhdCBpdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljICh0aGUgZnV0ZXggc3Vic3lzdGVtKSwgaXQncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW52b2x2ZWQuIEZyb20gdGhlIHBhdGNoIGFuZCBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgaXQncyBpbXBhY3RpbmcgdGhlc2U6IGBfX2Z1dGV4X3Bpdm90X2hhc2hgLCBgZnV0ZXhfcGl2b3RfaGFzaGAsIGBmdXRleF9waXZvdF9wZW5kaW5nYCwgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYC4gSW1wb3J0YW50IHRvIG5vdGUgaWYgdGhleSBhcmUgc3RhdGljIG9yIGV4cG9ydGVkLiBBaCwgYWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGlzIG1lYW5zIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgd2l0aGluIHRoZSBmaWxlLiBPa2F5LCBJIG5lZWQgdG8gc2VlIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgY2FsbCB0aGVzZSwgYmVjYXVzZSB0aGV5IGFyZSB0aGUgcG9pbnRzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDMuMzUxMzkwMzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3OTk4OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfcGVuZGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTc3Mz12b2lkIGZ1dGV4X2hhc2hfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc4My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3ODQ6c3RhdGljIGJvb2wgZnV0ZXhfcGl2b3RfcGVuZGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODc3LWFnYWluOlxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg3ODpcXHRcXHR3YWl0X3Zhcl9ldmVudChtbSwgZnV0ZXhfcGl2b3RfcGVuZGluZyhtbSkpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg3OS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjQzLjM5ODE5NjE4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTEyNTYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgRnV0ZXggSGFzaGluZyBhbmQgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlYCBpcyBiZWluZyBjYWxsZWQsIGFuZCBJIGtub3cgaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgaXQncyBjYWxsaW5nIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHNvdW5kcyBsaWtlIGl0J3MgaGFuZGxpbmcgdGhlIHRyYW5zaXRpb24gb3IgbWFuYWdlbWVudCBvZiBwZW5kaW5nIG9wZXJhdGlvbnMgcmVsYXRlZCB0byBhIGZ1dGV4LCBidXQgdG8gcmVhbGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiwgSSBuZWVkIHRvIHRyYWNlIHRoaXMgY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBmdW5jdGlvbnMgYXJlICpjYWxsaW5nKiBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWA/XCIuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggdXBzdHJlYW0gZnJvbSB0aGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMga2V5LiBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIHN0b3J5LiBJcyBpdCBwYXJ0IG9mIHRoZSBpbml0aWFsIGZ1dGV4IHNldHVwLCBhIHJlYWxsb2NhdGlvbiBzdHJhdGVneSwgb3IgdHJpZ2dlcmVkIGJ5IHNvbWUgc3BlY2lmaWMgY29udGVudGlvdXMgc2l0dWF0aW9uPyBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGFsbG9jYXRpb24sIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDcuMjA5NDU1NjM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzcyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzAwLVxcdCAqXFx0XFx0XFx0XFx0ICByY3VfYXNzaWduX3BvaW50ZXIoXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaC5oYXNoLCBuZXcpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTcwMTpcXHQgKlxcdFxcdFxcdFxcdGZ1dGV4X2hhc2hfYWxsb2NhdGUoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcwMi1cXHQgKlxcdFxcdFxcdFxcdCAgZnV0ZXhfcmVmX2Ryb3AoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODA0PXN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODI3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgyODpzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4Mjkte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzODppbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTM5LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2Ny1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Njg6XFx0cmV0dXJuIGZ1dGV4X2hhc2hfYWxsb2NhdGUoYnVja2V0cywgMCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTY5LX1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk3MT1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfZ2V0X3Nsb3RzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODEtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODI6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODMtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9nZXRfc2xvdHModm9pZCkgeyByZXR1cm4gMDsgfVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0yMDI0PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMzItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDMzOlxcdFxcdHJldCA9IGZ1dGV4X2hhc2hfYWxsb2NhdGUoYXJnMywgZmxhZ3MpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjAzNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NDcuMjU1MjM4MTIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Mjg0MTcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQsIHJlZmxlY3RpbmcgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIEZ1dGV4IEhhc2hpbmcqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGZ1dGV4IGhhc2ggdGFibGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBhbmQgYGZ1dGV4X2hhc2hfcHJjdGxgIGJvdGggdWx0aW1hdGVseSBmdW5uZWwgaW50byBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoYXQncyBzdGFuZGFyZCBhbmQgZXhwZWN0ZWQg4oCTIGNlbnRyYWxpemluZyBhbGxvY2F0aW9uIGxvZ2ljIGlzIGdvb2QgZGVzaWduLiBJdCBsZXRzIHVzIGNvbnRyb2wgcmVzb3VyY2UgdXNhZ2UgYW5kIGhhbmRsZSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgY29uc2lzdGVudGx5LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHRoYXQgY29tZXMgdG8gbWluZCBpcyB3aG8ncyB1c2luZyB0aGUgaGFzaCB0YWJsZSdzIHBpdm90PyBGcm9tIHdoYXQgSSBzZWUsIGl0IGxvb2tzIGxpa2UgYGZ1dGV4X3Bpdm90X2hhc2hgIHdpbGwgYmUgYSBjcml0aWNhbCBmdW5jdGlvbiB0byBhbmFseXNlLCBJIHdhbnQgdG8gZmluZCBvdXQgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGUgcGl2b3QgZnVuY3Rpb24sIHRvIHNlZSBob3cgdGhhdCBwaXZvdCBpcyB1c2VkLCBhbmQgd2hhdCB0aGF0IGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTo1MC43MjgwODM5MjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA4NjE2MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcGl2b3RfaGFzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MTYxPXN0YXRpYyB2b2lkIGZ1dGV4X3JlaGFzaF9wcml2YXRlKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm9sZCxcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk0LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTk1OnN0YXRpYyBib29sIF9fZnV0ZXhfcGl2b3RfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqbmV3KVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk2LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjE5LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjIwOnN0YXRpYyB2b2lkIGZ1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjEte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjctXFx0XFx0XFx0V1JJVEVfT05DRShtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjI4OlxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgZnBoKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIyOS1cXHRcXHR9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIzMz1zdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI1NS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNTY6XFx0ZnV0ZXhfcGl2b3RfaGFzaChtbSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTctXFx0Z290byBhZ2FpbjtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3MS1cXHR9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNzI6XFx0ZnV0ZXhfcGl2b3RfaGFzaChrZXktXFx1MDAzZXByaXZhdGUubW0pO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjczLVxcdGdvdG8gYWdhaW47XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE2ODA9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk2LVxcdCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjk3OlxcdCAqIGZ1dGV4X2hhc2goKVxcdFxcdFxcdF9fZnV0ZXhfcGl2b3RfaGFzaCgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjk4LVxcdCAqICAgZ3VhcmQocmN1KTtcXHRcXHQgIGd1YXJkKG1tLVxcdTAwM2VmdXRleC5waGFzaC5sb2NrKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk0LVxcdCAqIGhhc2hfbmV3IHBvaW50ZXIuIFBhaXJzIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyKCkgaW5cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3OTU6XFx0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzk2LVxcdCAqL1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTkzMTpcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTMyLVxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjUwLjc3ODk1MjU0NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTQ5MTk5ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRnV0ZXggSGFzaGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgZnV0ZXggaGFzaGluZyBzaXR1YXRpb24uIEl0IGxvb2tzIGxpa2UgYGZ1dGV4X3ByaXZhdGVfaGFzaGAgYW5kIGBmdXRleF9oYXNoYCBib3RoIHJlbHkgb24gYGZ1dGV4X3Bpdm90X2hhc2hgIGludGVybmFsbHkuICBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHJlbGF0aW9uc2hpcC4gIFRoZW4gd2Ugc2VlIHRoYXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGNhbGxzIGBfX2Z1dGV4X3Bpdm90X2hhc2hgLiBTbywgZXNzZW50aWFsbHksIHRoZXkgYWxsIHNlZW0gY29ubmVjdGVkIHVuZGVyIHRoZSBob29kLiBOb3csIGZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIHRoZSBwdWJsaWMtZmFjaW5nLCBvciBhdCBsZWFzdCBub24tc3RhdGljLCBmdW5jdGlvbnMgd2UgbmVlZCB0byByZWFsbHkgYmUgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAsIGBmdXRleF9oYXNoX3ByY3RsYCwgYGZ1dGV4X3ByaXZhdGVfaGFzaGAsIGFuZCBgZnV0ZXhfaGFzaGAuIFRpbWUgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIG9yIG5vbi1zdGF0aWMuIEdvdHRhIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgdGhlaXIgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NTQuNjMzODc1MjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2Z1dGV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jPTE4Mjg9c3RhdGljIGludCBmdXRleF9oYXNoX2FsbG9jYXRlKHVuc2lnbmVkIGludCBoYXNoX3Nsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5MzctXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTM4OmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Mzkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NTo1NC42Nzg3NDc0MzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NTIyMzgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHdhaXQgYSBtaW51dGUuIEknbSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCB0aGlzIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGZ1bmN0aW9uLiBJdCdzIGxpc3RlZCBpbiBga2VybmVsL2Z1dGV4L2NvcmUuY2AsIGFuZCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLiBCdXQgdGhlIHJlYWwgc3VycHJpc2U/IEl0J3MgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24hIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZnV0ZXggaGFzaCB0YWJsZSBpcyBpbml0aWFsaXplZCBhbmQgcG90ZW50aWFsbHksIGhvdyBpdCBjYW4gYmUgbW9kaWZpZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIG5vbi1zdGF0aWMgbmF0dXJlIGRlZmluaXRlbHkgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8gbWlnaHQgYmUgY2FsbGluZyBpdCwgYW5kIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGZ1dGV4X2hhc2hfcHJjdGxgIGFuZCBzZWUgd2hhdCBpdCBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk0NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU1OjU4LjAzMzk3NDUxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MzU0NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZnV0ZXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTU6NTguMDc3NDE0NjUxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODc5NzA0MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBGdXRleCBIYXNoaW5nIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGVzZSBzdHJ1Y3R1cmVzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZnV0ZXggaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgY29udHJpYnV0ZSB0byBlZmZpY2llbnQgbG9va3VwIGFuZCBtYW5hZ2VtZW50IG9mIGZ1dGV4ZXMuIEFyZSB0aGV5IHNlcGFyYXRlIGhhc2ggdGFibGVzLCBvciBpcyBvbmUgYSBzdWJzZXQvdmFyaWFudCBvZiB0aGUgb3RoZXI/IEkgd2FudCB0byB0cmFjZSB0aGUgZGF0YSBmbG93LiBBcmUgdGhlc2UgaGFzaCB0YWJsZXMgdXNlZCB0byBkaXN0aW5ndWlzaCBwcml2YXRlIGFuZCBzaGFyZWQgZnV0ZXhlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoZXkgcmVzb2x2ZSBjb2xsaXNpb25zLCBhbmQgaG93IHRoZSBzaXppbmcgb2YgdGhlc2UgdGFibGVzIGltcGFjdHMgcGVyZm9ybWFuY2UgdW5kZXIgbG9hZC4gSSB3aWxsIHdhbnQgdG8gY29tcGFyZSBhbmQgY29udHJhc3QgdGhlIHR3bywgdW5kZXJzdGFuZGluZyB0aGVpciBpbmRpdmlkdWFsIHJvbGVzIGFuZCBpZiB0aGV5IGNhbiBoYXZlIGFuIGVmZmVjdCBvbiBhIHNwZWNpZmljIHN5c3RlbSBvciBhcHBsaWNhdGlvbi4gVGhpcyBpbnZvbHZlcyBhc3Nlc3NpbmcgdGhlIHRyYWRlLW9mZnMgb2YgdGhlIGNob3NlbiBoYXNoIGZ1bmN0aW9uIGFuZCBleHBsb3JpbmcgaWYgYW55IG9wdGltaXphdGlvbnMgYXJlIHBvc3NpYmxlLCBnaXZlbiB0aGUgY29uc3RyYWludHMgb2YgdGhlIGtlcm5lbCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjAyLjI2NTM4Nzk4M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxODkyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnV0ZXhfcHJpdmF0ZV9oYXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mdXRleC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2Z1dGV4L2NvcmUuYz01OT1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtNjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzo2OTpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTcwLVxcdGludFxcdFxcdHN0YXRlO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMjk9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzA6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzEtXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzItI2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzMzpzdGF0aWMgYm9vbCBmdXRleF9yZWZfZ2V0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxMzQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM1OnN0YXRpYyBib29sIGZ1dGV4X3JlZl9pc19kZWFkKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xMzYtXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xMzc9ZW51bSB7IEZSX1BFUkNQVSA9IDAsIEZSX0FUT01JQyB9O1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTM4LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTM5OnN0YXRpYyBib29sIGZ1dGV4X3ByaXZhdGVfaGFzaF9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTQzLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTQ0OnZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNDUte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNTA9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNTE6X19mdXRleF9oYXNoX3ByaXZhdGUodW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1Mi17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2MTpzdGF0aWMgdm9pZCBmdXRleF9yZWhhc2hfcHJpdmF0ZShzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpvbGQsXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjI6XFx0XFx0XFx0XFx0IHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2My17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5NTpzdGF0aWMgYm9vbCBfX2Z1dGV4X3Bpdm90X2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKm5ldylcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5Ni17XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTctXFx0c3RydWN0IGZ1dGV4X21tX3BoYXNoICptbXBoID0gXFx1MDAyNm1tLVxcdTAwM2VmdXRleC5waGFzaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODpcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTktXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTIyMD1zdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjItXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2bW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmxvY2spIHtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIyMzpcXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGg7XFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMjQtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIzMi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjIzMzpzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMzQte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNDYtXFx0c2NvcGVkX2d1YXJkKHJjdSkge1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjQ3OlxcdFxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI0OC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjUyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MjUzOlxcdFxcdGlmIChmdXRleF9wcml2YXRlX2hhc2hfZ2V0KGZwaCkpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNTQtXFx0XFx0XFx0cmV0dXJuIGZwaDtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2My1cXHRzY29wZWRfZ3VhcmQocmN1KSB7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjQ6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoID0gTlVMTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI2NS1cXHRcXHRzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmhiO1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yNjgtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyNjk6XFx0XFx0aWYgKCFmcGggfHwgZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldChmcGgpKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjcwLVxcdFxcdFxcdHJldHVybiAoc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYpeyAuaGIgPSBoYiwgLmZwaCA9IGZwaCB9O1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjc9c3RhdGljIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqXFxua2VybmVsL2Z1dGV4L2NvcmUuYzozNjg6X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTM2OS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE1ODk9c3RhdGljIHZvaWQgZnV0ZXhfcmVmX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU5MC1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1OTE6c3RhdGljIHZvaWQgX19mdXRleF9yZWZfYXRvbWljX2JlZ2luKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1OTIte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjEyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTYxMzpzdGF0aWMgdm9pZCBfX2Z1dGV4X3JlZl9hdG9taWNfZW5kKHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaClcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE2MTQte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xNjU1PXN0YXRpYyB2b2lkIGZ1dGV4X3JlZl9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNjU3LVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBtbV9zdHJ1Y3QsIGZ1dGV4LnBoYXNoLnJjdSk7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNjU4OlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW0tXFx1MDAzZWZ1dGV4LnBoYXNoLmhhc2gpO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY1OS1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY3OS0gKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE2ODA6c3RhdGljIHZvaWQgZnV0ZXhfcmVmX2Ryb3Aoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTY4MS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDUtXFx0ICpcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MDY6XFx0ICogICBmdXRleF9wcml2YXRlX2hhc2hfZ2V0KGZwaCk7IC8vIE9PUFNcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3MDctXFx0ICpcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTcyNS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3MjY6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2dldChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzI3LXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTczOS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NDA6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzQxLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc1My1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NTQ6c3RhdGljIGJvb2wgZnV0ZXhfcmVmX2lzX2RlYWQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc1NS17XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE3NzM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzc0LXtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE3NzU6XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTc3Ni1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTc4ND1zdGF0aWMgYm9vbCBmdXRleF9waXZvdF9wZW5kaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xNzg2LVxcdHN0cnVjdCBmdXRleF9tbV9waGFzaCAqbW1waCA9IFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2g7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxNzg3OlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE3ODgtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MDMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODA0OnN0YXRpYyBib29sIGZ1dGV4X2hhc2hfbGVzcyhzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICphLFxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTgwNTpcXHRcXHRcXHQgICAgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqYilcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MDYte1xcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0xODI4PXN0YXRpYyBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaGFzaF9zbG90cywgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xODMwLVxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cXHUwMDNlbW07XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxODMxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE4MzItXFx0Ym9vbCBjdXN0b20gPSBmbGFncyBcXHUwMDI2IEZIX0NVU1RPTTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4MS1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZtbS1cXHUwMDNlZnV0ZXgucGhhc2gubG9jaykge1xcbmtlcm5lbC9mdXRleC9jb3JlLmM6MTg4MjpcXHRcXHRzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcmVlIF9fZnJlZShrdmZyZWUpID0gTlVMTDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE4ODM6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqY3VyLCAqbmV3O1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTg4NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkyOC1cXHRcXHRcXHQgKiBXaWxsIHNldCBtbS1cXHUwMDNlZnV0ZXgucGhhc2gubmV3X2hhc2ggb24gZmFpbHVyZTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mjk6XFx0XFx0XFx0ICogZnV0ZXhfcHJpdmF0ZV9oYXNoX2dldCgpIHdpbGwgdHJ5IGFnYWluLlxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzMC1cXHRcXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTkzOD1pbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDAtXFx0dW5zaWduZWQgaW50IHRocmVhZHMsIGJ1Y2tldHMsIGN1cnJlbnRfYnVja2V0cyA9IDA7XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTQxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NDItXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk3Mi17XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTczOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5NzQtXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yMDg9c3RydWN0IGZ1dGV4X3Ege1xcbi0tXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjIwLVxcdGF0b21pY190IHJlcXVldWVfc3RhdGU7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjIxOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmRyb3BfZnBoO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTIyMi0jaWZkZWYgQ09ORklHX1BSRUVNUFRfUlRcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQyLVxcdHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGI7XFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQzOlxcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDQtfTtcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0Ni0jaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI0NzpleHRlcm4gc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnV0ZXhfcHJpdmF0ZV9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNDg6ZXh0ZXJuIHZvaWQgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI0OS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTAtI2Vsc2UgLyogIUNPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIE5VTEw7IH1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNTI6c3RhdGljIGlubGluZSB2b2lkIGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKSB7IH1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNTMtI2VuZGlmXFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaD0yNTc9REVGSU5FX0NMQVNTKGhiciwgc3RydWN0IGZ1dGV4X2J1Y2tldF9yZWYsXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjU4OlxcdCAgICAgaWYgKF9ULmZwaCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVC5mcGgpLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1OS1cXHQgICAgIGZ1dGV4X2hhc2goa2V5KSwgdW5pb24gZnV0ZXhfa2V5ICprZXkpO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2MC1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaDoyNjE6REVGSU5FX0NMQVNTKHByaXZhdGVfaGFzaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqLFxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI2MjpcXHQgICAgIGlmIChfVCkgZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChfVCksXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjYzOlxcdCAgICAgZnV0ZXhfcHJpdmF0ZV9oYXNoKG1tKSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI2NC1cXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTkyMz1pbnQgZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzLCBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaylcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jLTEwMTItXFx0XFx0ICovXFxua2VybmVsL2Z1dGV4L3BpLmM6MTAxMzpcXHRcXHRmdXRleF9wcml2YXRlX2hhc2hfcHV0KG5vX2ZyZWVfcHRyKGhici5mcGgpKTtcXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMDE0LVxcdFxcdC8qXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcGkuYy0xMTA1LVxcdFxcdC8qIEFkZGl0aW9uYWwgcmVmZXJlbmNlIGZyb20gZnV0ZXhfdW5sb2NrX3BpKCkgKi9cXG5rZXJuZWwvZnV0ZXgvcGkuYzoxMTA2OlxcdFxcdGZ1dGV4X3ByaXZhdGVfaGFzaF9wdXQocS5kcm9wX2ZwaCk7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTEwNy1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9mdXRleC9waS5jPTExNDE9c3RhdGljIGludCBfX2Z1dGV4X3VubG9ja19waSh1MzIgX191c2VyICp1YWRkciwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL2Z1dGV4L3BpLmMtMTIyMS1cXHRcXHRcXHRpZiAoZnV0ZXhfa2V5X2lzX3ByaXZhdGUoXFx1MDAyNmtleSkpXFxua2VybmVsL2Z1dGV4L3BpLmM6MTIyMjpcXHRcXHRcXHRcXHR0b3Bfd2FpdGVyLVxcdTAwM2Vkcm9wX2ZwaCA9IGZ1dGV4X3ByaXZhdGVfaGFzaChrZXkucHJpdmF0ZS5tbSk7XFxua2VybmVsL2Z1dGV4L3BpLmMtMTIyMy1cXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM9MjMwPXZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSxcXG4tLVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmMtMjQ0LVxcdGlmIChmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpKVxcbmtlcm5lbC9mdXRleC9yZXF1ZXVlLmM6MjQ1OlxcdFxcdHEtXFx1MDAzZWRyb3BfZnBoID0gZnV0ZXhfcHJpdmF0ZV9oYXNoKGtleS1cXHUwMDNlcHJpdmF0ZS5tbSk7XFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYy0yNDYtXFx0cS1cXHUwMDNlbG9ja19wdHIgPSBcXHUwMDI2aGItXFx1MDAzZWxvY2s7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jPTc4Nj1pbnQgZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkwOC1cXHQvKiBBZGRpdGlvbmFsIHJlZmVyZW5jZSBmcm9tIHJlcXVldWVfcGlfd2FrZV9mdXRleCgpICovXFxua2VybmVsL2Z1dGV4L3JlcXVldWUuYzo5MDk6XFx0ZnV0ZXhfcHJpdmF0ZV9oYXNoX3B1dChxLmRyb3BfZnBoKTtcXG5rZXJuZWwvZnV0ZXgvcmVxdWV1ZS5jLTkxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MDIuMzEwNTgzODM5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTU1Nzg3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGZ1dGV4X2hhc2hfcHJjdGxgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIGEgcmVmZXJlbmNlIHRvIGBmdXRleF9oYXNoX3ByY3RsYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGluIGRvd24gaXRzIG9yaWdpbi4gSXMgdGhpcyBmdW5jdGlvbiBjYWxsIGRpcmVjdGx5IHRyaWdnZXJlZCBieSBgc3lzX3ByY3RsYCwgb3IgYXJlIHRoZXJlIG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgY2FsbCBwYXRoIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBrZXJuZWwncyBwcm9jZXNzIGNvbnRyb2wgbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBmdXRleGVzIGFuZCB0aGVpciBoYXNoIHRhYmxlIG1hbmFnZW1lbnQuIExldCdzIGRpZyBpbnRvIHRoZSBzeXNjYWxsIGltcGxlbWVudGF0aW9ucyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBjb25maXJtIGFuZCBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjA1LjQ2NjE2NDY1OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMjA0NTAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmdXRleF9oYXNoX3ByY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9Nzc9bG9uZyBkb19mdXRleCh1MzIgX191c2VyICp1YWRkciwgaW50IG9wLCB1MzIgdmFsLCBrdGltZV90ICp0aW1lb3V0LFxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC03OC1cXHQgICAgICB1MzIgX191c2VyICp1YWRkcjIsIHUzMiB2YWwyLCB1MzIgdmFsMyk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjc5OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD05ND1zdGF0aWMgaW5saW5lIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwga3RpbWVfdCAqdGltZW91dCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC05OC19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjk5OnN0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTAwLXtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxNz12b2lkIGZ1dGV4X21tX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMjMtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDI0OmludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDI1LXtcXG4tLVxcbmtlcm5lbC9zeXMuYz0yNTM0PVNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuLS1cXG5rZXJuZWwvc3lzLmMtMjg4NC1cXHRjYXNlIFBSX0ZVVEVYX0hBU0g6XFxua2VybmVsL3N5cy5jOjI4ODU6XFx0XFx0ZXJyb3IgPSBmdXRleF9oYXNoX3ByY3RsKGFyZzIsIGFyZzMsIGFyZzQpO1xcbmtlcm5lbC9zeXMuYy0yODg2LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjowNy42OTgyMTY4MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMjcwNTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBmdXRleF9oYXNoYCBTeXN0ZW0gQ2FsbHMqKlxuXG5SaWdodCwgbGV0IG1lIHNlZS4gSSd2ZSBnb3QgaXQuIGBmdXRleF9oYXNoX3ByY3RsYCBpcywgYXMgSSBzdXNwZWN0ZWQsIHRoZSBhY3R1YWwgZW50cnkgcG9pbnQgdGhhdCBnZXRzIGludm9rZWQgd2hlbiBgcHJjdGxgIGlzIGNhbGxlZCB3aXRoIHRoZSBgUFJfRlVURVhfSEFTSGAgb3B0aW9uLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gU28sIGBmdXRleF9oYXNoX3ByY3RsYCBpcyBkZWZpbml0ZWx5IGEga2V5IHN5c3RlbSBjYWxsLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHdoZXJlIGRvZXMgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAgY29tZSBpbnRvIHRoZSBwaWN0dXJlPyBXaGF0J3MgdGhlIGNhbGwgcGF0aCB0aGVyZT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiB0byBnZXQgdGhlIHdob2xlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjk4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MTIuMjAwOTI1NTQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI5NjIzOTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgxLSNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjgyOmludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTgzLXZvaWQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODQtI2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODU6c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KHZvaWQpIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODYtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9OTk9c3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9wcmN0bCh1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywgdW5zaWduZWQgbG9uZyBhcmc0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTEwMi19XFxuaW5jbHVkZS9saW51eC9mdXRleC5oOjEwMzpzdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaC0xMDQtc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IHJldHVybiAwOyB9XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njk9c3RhdGljIHZvaWQgcnZfdGFza19mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTk3Ni1cXG5rZXJuZWwvZm9yay5jOjE5Nzc6c3RhdGljIGJvb2wgbmVlZF9mdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodTY0IGNsb25lX2ZsYWdzKVxcbmtlcm5lbC9mb3JrLmMtMTk3OC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5OTQ9X19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjQxMC1cXG5rZXJuZWwvZm9yay5jOjI0MTE6XFx0aWYgKG5lZWRfZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0KGNsb25lX2ZsYWdzKSkge1xcbmtlcm5lbC9mb3JrLmM6MjQxMjpcXHRcXHRyZXR2YWwgPSBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQoKTtcXG5rZXJuZWwvZm9yay5jLTI0MTMtXFx0XFx0aWYgKHJldHZhbClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTgyOD1zdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzNy1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5Mzg6aW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTkzOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjE0LjQzMDU1NTYxMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQ3MjYyNzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIEZ1dGV4IEhhc2ggQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIGdldHMgY2FsbGVkIGJ5IGBjb3B5X3Byb2Nlc3NgLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGBmb3JrYCBhbmQgYGNsb25lYCBvcGVyYXRpb25zLiBUaGF0IG1lYW5zIGl0J3MgZGVmaW5pdGVseSBpbiB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYSBjb3JlIHN5c3RlbSBjYWxsIHRoYXQncyB1c2VkICphbGwqIHRoZSB0aW1lLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBhIGdyZWF0IHBsYWNlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIE15IHByaW9yaXR5IGlzIHRvIGZpbmQgYnVncyB0aGF0IGNvdWxkIGJlIHJlbW90ZWx5IHRyaWdnZXJlZC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbjogYENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hgLiBJJ2xsIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCB2ZXJpZnkgdGhlIGV4aXN0ZW5jZSBhbmQgZGV0YWlscyBvZiBgRlVURVhfUFJJVkFURV9IQVNIYC4gRW5zdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY29ycmVjdCB3aWxsIGJlIGNyaXRpY2FsIGZvciBhIHN1Y2Nlc3NmdWwgZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBiYXNpYywgYnV0IGltcG9ydGFudCwgZ3JvdW5kIHdvcmsuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTk1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTY6MTkuNTc3ODIxMDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE1OTcyMTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkZVVEVYX1BSSVZBVEVfSEFTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mdXRleC5oPTc5PWludCBmdXRleF9oYXNoX3ByY3RsKHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLCB1bnNpZ25lZCBsb25nIGFyZzQpO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04MC1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODE6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtODItaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg9ODM9dm9pZCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaDo4NDojZWxzZSAgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmluY2x1ZGUvbGludXgvZnV0ZXguaC04NS1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaD04Nj1zdGF0aWMgaW5saW5lIGludCBmdXRleF9oYXNoX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgcmV0dXJuIDA7IH1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4Lmg6ODc6I2VuZGlmIC8qICFDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIICovXFxuaW5jbHVkZS9saW51eC9mdXRleC5oLTg4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleC5oPTE1Mj1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfZml4dXBfcm9idXN0X3VubG9jayhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU1LVxcbmluY2x1ZGUvbGludXgvZnV0ZXguaDoxNTY6I2lmIGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUk9CVVNUX1VOTE9DSylcXG5pbmNsdWRlL2xpbnV4L2Z1dGV4LmgtMTU3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z1dGV4X3R5cGVzLmg9MjM9c3RydWN0IGZ1dGV4X3NjaGVkX2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9mdXRleF90eXBlcy5oLTMzLVxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaDozNDojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmluY2x1ZGUvbGludXgvZnV0ZXhfdHlwZXMuaC0zNS0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xNDI9ZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg6MTQzOiNpZiBkZWZpbmVkKENPTkZJR19NTVUpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSClcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTQ0LS8qIHNhbWUgYXMgYWJvdmUgYnV0IHBlcmZvcm1zIHRoZSBzbG93IHBhdGggZnJvbSB0aGUgYXN5bmMgY29udGV4dC4gQ2FuXFxuLS1cXG5pbml0L0tjb25maWc9MTg0ND1jb25maWcgRlVURVhfUElcXG4tLVxcbmluaXQvS2NvbmZpZy0xODQ4LVxcbmluaXQvS2NvbmZpZzoxODQ5OmNvbmZpZyBGVVRFWF9QUklWQVRFX0hBU0hcXG5pbml0L0tjb25maWctMTg1MC1cXHRib29sXFxuLS1cXG5rZXJuZWwvZm9yay5jPTEyMTI9RVhQT1JUX1NZTUJPTF9HUEwobW1wdXQpO1xcbmtlcm5lbC9mb3JrLmMtMTIxMy1cXG5rZXJuZWwvZm9yay5jOjEyMTQ6I2lmIGRlZmluZWQoQ09ORklHX01NVSkgfHwgZGVmaW5lZChDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIKVxcbmtlcm5lbC9mb3JrLmMtMTIxNS1zdGF0aWMgdm9pZCBtbXB1dF9hc3luY19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTEzMD1fX2Z1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXksIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCwgc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqKmZwaF9wKTtcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTEzMS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjEzMjojaWZkZWYgQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSFxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTMzLXN0YXRpYyBib29sIGZ1dGV4X3JlZl9nZXQoc3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoKTtcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjYwPXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI3NS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI3NjojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjc3LVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9Mjc4PXN0cnVjdCBmdXRleF9idWNrZXRfcmVmIGZ1dGV4X2hhc2godW5pb24gZnV0ZXhfa2V5ICprZXkpXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTI4Mi1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjI4MzojZW5kaWYgLyogQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMjg0LVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYz0zNjg9X19mdXRleF9oYXNoKHVuaW9uIGZ1dGV4X2tleSAqa2V5LCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmcGgsIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKipmcGhfcClcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMzcyLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM6MzczOiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0zNzQtXFx0aWYgKG5vZGUgPT0gRlVURVhfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBmdXRleF9rZXlfaXNfcHJpdmF0ZShrZXkpKSB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE1Njc9c3RhdGljIHZvaWQgZnV0ZXhfaGFzaF9idWNrZXRfaW5pdChzdHJ1Y3QgZnV0ZXhfaGFzaF9idWNrZXQgKmZoYilcXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTU3NS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE1NzY6I2lmZGVmIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0hcXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE1NzctXFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jPTE5NzE9c3RhdGljIGludCBmdXRleF9oYXNoX2dldF9zbG90cyh2b2lkKVxcbi0tXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0xOTgwLX1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jOjE5ODE6I2Vsc2UgIC8qIENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0ggKi9cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTE5ODItc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfaGFzaF9hbGxvY2F0ZSh1bnNpZ25lZCBpbnQgaHNsb3RzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MTk4ND1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfaGFzaF9pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxua2VybmVsL2Z1dGV4L2NvcmUuYzoxOTg1OiNlbmRpZiAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9jb3JlLmMtMTk4Ni1cXG4tLVxcbmtlcm5lbC9mdXRleC9jb3JlLmM9MjAxMz1zdGF0aWMgaW5saW5lIHZvaWQgZnV0ZXhfcm9idXN0X3VubG9ja19pbml0X21tKHN0cnVjdCBmdXRleF9tbV9kYXRhICpmZCkgeyB9XFxuLS1cXG5rZXJuZWwvZnV0ZXgvY29yZS5jLTIwMTUtXFxua2VybmVsL2Z1dGV4L2NvcmUuYzoyMDE2OiNpZiBkZWZpbmVkKENPTkZJR19GVVRFWF9QUklWQVRFX0hBU0gpIHx8IGRlZmluZWQoQ09ORklHX0ZVVEVYX1JPQlVTVF9VTkxPQ0spXFxua2VybmVsL2Z1dGV4L2NvcmUuYy0yMDE3LXZvaWQgZnV0ZXhfbW1faW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0MT1zdHJ1Y3QgZnV0ZXhfYnVja2V0X3JlZiB7XFxuLS1cXG5rZXJuZWwvZnV0ZXgvZnV0ZXguaC0yNDUtXFxua2VybmVsL2Z1dGV4L2Z1dGV4Lmg6MjQ2OiNpZmRlZiBDT05GSUdfRlVURVhfUFJJVkFURV9IQVNIXFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ3LWV4dGVybiBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpmdXRleF9wcml2YXRlX2hhc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbmtlcm5lbC9mdXRleC9mdXRleC5oPTI0OD1leHRlcm4gdm9pZCBmdXRleF9wcml2YXRlX2hhc2hfcHV0KHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaCk7XFxua2VybmVsL2Z1dGV4L2Z1dGV4LmgtMjQ5LVxcbmtlcm5lbC9mdXRleC9mdXRleC5oOjI1MDojZWxzZSAvKiAhQ09ORklHX0ZVVEVYX1BSSVZBVEVfSEFTSCAqL1xcbmtlcm5lbC9mdXRleC9mdXRleC5oLTI1MS1zdGF0aWMgaW5saW5lIHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZ1dGV4X3ByaXZhdGVfaGFzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkgeyByZXR1cm4gTlVMTDsgfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjoyMS41OTM3OTg0MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY4NDMyNDI4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGVVRFWF9QUklWQVRFX0hBU0ggQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZW5hYmxpbmcgYEZVVEVYX1BSSVZBVEVfSEFTSGAuIEknbSBnb2luZyB0byBzdGFydCBieSBkaXZpbmcgc3RyYWlnaHQgaW50byB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGlzIHNwZWNpZmljIHN5bWJvbCBpcyBkZWZpbmVkLCB3aGF0IHRoZSBjb25kaXRpb25zIGFyZSBmb3IgaXRzIGFjdGl2YXRpb24sIGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIGl0cyBpbmNsdXNpb24uIEhvcGVmdWxseSwgYGluaXQvS2NvbmZpZ2AgcHJvdmlkZXMgYSBjbGVhciBhbmQgY29uY2lzZSBwaWN0dXJlIG9mIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYW5kIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYWZmZWN0IHdoZXRoZXIgb3Igbm90IGBGVVRFWF9QUklWQVRFX0hBU0hgIGlzIGJyb3VnaHQgaW50byBwbGF5LiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgZmlsZSB3aWxsIHBvaW50IG1lIHRvIHRoZSBicm9hZGVyIGtlcm5lbCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zIHRoYXQgcmVseSBvbiB0aGlzIGZ1dGV4IGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoYXQsIEkgY2FuIGRlZHVjZSB0aGUgb3ZlcmFsbCBwdXJwb3NlIGFuZCBkZXNpZ24gY2hvaWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjozOC40MzcwNDM5MDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODQwOlxcdFxcdCAgRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiZSBidWlsdCB3aXRob3V0XFxuMTg0MTpcXHRcXHQgIHN1cHBvcnQgZm9yIFxcXCJmYXN0IHVzZXJzcGFjZSBtdXRleGVzXFxcIi4gIFRoZSByZXN1bHRpbmcga2VybmVsIG1heSBub3RcXG4xODQyOlxcdFxcdCAgcnVuIGdsaWJjLWJhc2VkIGFwcGxpY2F0aW9ucyBjb3JyZWN0bHkuXFxuMTg0MzpcXHRcXG4xODQ0OlxcdGNvbmZpZyBGVVRFWF9QSVxcbjE4NDU6XFx0XFx0Ym9vbFxcbjE4NDY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuMTg0NzpcXHRcXHRkZWZhdWx0IHlcXG4xODQ4OlxcdFxcbjE4NDk6XFx0Y29uZmlnIEZVVEVYX1BSSVZBVEVfSEFTSFxcbjE4NTA6XFx0XFx0Ym9vbFxcbjE4NTE6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiAhQkFTRV9TTUFMTCBcXHUwMDI2XFx1MDAyNiBNTVVcXG4xODUyOlxcdFxcdGRlZmF1bHQgeVxcbjE4NTM6XFx0XFxuMTg1NDpcXHRjb25maWcgRlVURVhfTVBPTFxcbjE4NTU6XFx0XFx0Ym9vbFxcbjE4NTY6XFx0XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBOVU1BXFxuMTg1NzpcXHRcXHRkZWZhdWx0IHlcXG4xODU4OlxcdFxcbjE4NTk6XFx0Y29uZmlnIEhBVkVfRlVURVhfUk9CVVNUX1VOTE9DS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NjozOC40MzcyODM1NTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkyMzYwMDU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXRleCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBgRlVURVhfUFJJVkFURV9IQVNIYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhpcyBjb25maWd1cmF0aW9uLCB3aGljaCBtZWFucyB0aGlzIGlzIGxpa2VseSBhIGNvbW1vbiBzY2VuYXJpby4gVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSB3aXRoaW4gdGhlIGBmdXRleF9waXZvdF9wZW5kaW5nYCBhbmQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVgIGZ1bmN0aW9ucy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGhvdyB0aGUgZml4IGFkZHJlc3NlcyB0aGUgcmFjZSBjb25kaXRpb24uXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGtleSBmdW5jdGlvbnMuIEkndmUgZ290IGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBjYWxsZWQgZHVyaW5nIGZvcmssIGBmdXRleF9oYXNoX3ByY3RsYCBhY2Nlc3NpYmxlIHZpYSBgcHJjdGxgIHdpdGggYFBSX0ZVVEVYX0hBU0hgLCBhbmQgdGhlbiBgZnV0ZXhfcHJpdmF0ZV9oYXNoYCBhbmQgYGZ1dGV4X2hhc2hgLCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gdmFyaW91cyBmdXRleCBvcGVyYXRpb25zLlxuXG5gZnV0ZXhfaGFzaF9wcmN0bGAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIGl0J3MgYSBzcGVjaWZpYyBlbnRyeSBwb2ludCB0aHJvdWdoIGBzeXNfcHJjdGxgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGAuIEFuZCBhbHNvIHRoZSBgZnV0ZXhfaGFzaGAgZnVuY3Rpb24uXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNpZGUsIHRvIGJ1aWxkIG91dCB0aGUgY29udGV4dC4gQWgsIHRoZXkncmUgYWxsIGluIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC4gRXhjZWxsZW50LlxuXG5JIGFsc28gc2VlIHRoYXQgYGZ1dGV4X2hhc2hfZnJlZWAgaXMgY2FsbGVkIGR1cmluZyBtbXB1dC4gQW5kIHRoZW4gdGhlcmUncyBgZnV0ZXhfcGl2b3RfcGVuZGluZ2AgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlYCwgd2hpY2ggYXJlIHN0YXRpYy5cblxuTXkgb3JpZ2luYWwgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIHdhcyBgZnV0ZXhfaGFzaF9wcmN0bGAsIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLCBgZnV0ZXhfaGFzaGAsIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC4gQnV0IEkgbmVlZCB0byBiZSBjYXJlZnVsIHdpdGggaG90LXBhdGggZnVuY3Rpb25zLiBgZnV0ZXhfaGFzaGAgYW5kIGBmdXRleF9wcml2YXRlX2hhc2hgIGFyZSBjYWxsZWQgYnkgbmVhcmx5IGV2ZXJ5IGZ1dGV4IG9wZXJhdGlvbi4gVGhleSBhcmUgdG9vIGdlbmVyaWMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYy5cblxuYGZ1dGV4X2hhc2hfcHJjdGxgIGlzIGEgZGVkaWNhdGVkIGVudHJ5IHBvaW50IGZvciB0aGlzIGZlYXR1cmUsIGFuZCBgZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0YCBpcyBjYWxsZWQgZHVyaW5nIGZvcmsuIEJ1dCwgbGV0J3Mgc2VlLCBgZnV0ZXhfaGFzaF9wcmN0bGAgaXMgcHJvYmFibHkgc3VmZmljaWVudC4gSXQgYWxsb3dzIGFsbG9jYXRpbmcgYSBjdXN0b20gaGFzaCwgd2hpY2ggdGhlbiB0cmlnZ2VycyBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAuIFRoZSBidWcgaXMgaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHdoaWNoIGlzIGNhbGxlZCBieSBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgd2hlbiB3YWl0aW5nIGZvciB0aGUgcGl2b3QgdG8gY29tcGxldGUuIEFuZCB0aGUgcGl2b3QgaXMgaW5pdGlhdGVkIGJ5IGVpdGhlciBgZnV0ZXhfaGFzaF9hbGxvY2F0ZWAgb3IgYGZ1dGV4X3Bpdm90X2hhc2hgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGZ1dGV4X2hhc2hgIGFuZCBgZnV0ZXhfcHJpdmF0ZV9oYXNoYC5cblxuU28sIGBmdXRleF9oYXNoX3ByY3RsYCBzZWVtcyBsaWtlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbC4gSXQgdHJpZ2dlcnMgdGhlIGFsbG9jYXRpb24gYW5kIHN1YnNlcXVlbnQgcGl2b3QsIHdoZXJlIHRoZSBidWcgaXMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBmdW5jdGlvbidzIGxvY2F0aW9uIGFnYWluLiBZZXAsIGBrZXJuZWwvZnV0ZXgvY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1Njo1Ny42NzMyOTMzNTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mdXRleC9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRcXHRmdXRleF9yb2J1c3RfdW5sb2NrX2luaXRfbW0oXFx1MDAyNm1tLVxcdTAwM2VmdXRleCk7XFxuMjAyMTpcXHR9XFxuMjAyMjpcXHQjZW5kaWZcXG4yMDIzOlxcdFxcbjIwMjQ6XFx0aW50IGZ1dGV4X2hhc2hfcHJjdGwodW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNClcXG4yMDI1OlxcdHtcXG4yMDI2OlxcdFxcdHVuc2lnbmVkIGludCBmbGFncyA9IEZIX0NVU1RPTTtcXG4yMDI3OlxcdFxcdGludCByZXQ7XFxuMjAyODpcXHRcXG4yMDI5OlxcdFxcdHN3aXRjaCAoYXJnMikge1xcbjIwMzA6XFx0XFx0Y2FzZSBQUl9GVVRFWF9IQVNIX1NFVF9TTE9UUzpcXG4yMDMxOlxcdFxcdFxcdGlmIChhcmc0KVxcbjIwMzI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjAzMzpcXHRcXHRcXHRyZXQgPSBmdXRleF9oYXNoX2FsbG9jYXRlKGFyZzMsIGZsYWdzKTtcXG4yMDM0OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzU6XFx0XFxuMjAzNjpcXHRcXHRjYXNlIFBSX0ZVVEVYX0hBU0hfR0VUX1NMT1RTOlxcbjIwMzc6XFx0XFx0XFx0cmV0ID0gZnV0ZXhfaGFzaF9nZXRfc2xvdHMoKTtcXG4yMDM4OlxcdFxcdFxcdGJyZWFrO1xcbjIwMzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU2OjU3LjY3MzQxNjU4NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkyMDQxOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1c2luZyBvbiBGdXRleCBIYXNoaW5nKipcblxuQWxyaWdodCwgeWVwLCBgZnV0ZXhfaGFzaF9wcmN0bGAgZGVmaW5pdGVseSBmZWVscyBsaWtlIGEgZ29vZCwgc29saWQgcG9pbnQgb2YgZm9jdXMuIEl0IGhpdHMgYSBrZXkgYXJlYSwgYW5kIGl0J3Mgd2VsbC1kZWZpbmVkIGVub3VnaCB0byBkaWcgaW50by4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIHdoYXQgYWJvdXQgYGZ1dGV4X2hhc2hfYWxsb2NhdGVfZGVmYXVsdGA/IERvZXMgdGhhdCBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZT8gSXQncyByZWxhdGVkLCBidXQgaXMgaXQgYSBwb3RlbnRpYWwgc2Vjb25kYXJ5IGFyZWEgb2YgZXhwbG9yYXRpb24sIG9yIGRvZXMgaXQgZG92ZXRhaWwgbmljZWx5PyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIHR3byBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTc6MDUuMDY1NDYxNjUyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvZnV0ZXgvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MzA6XFx0XFx0XFx0XFx0ICovXFxuMTkzMTpcXHRcXHRcXHRcXHRpZiAoIV9fZnV0ZXhfcGl2b3RfaGFzaChtbSwgbmV3KSBcXHUwMDI2XFx1MDAyNiBjdXN0b20pXFxuMTkzMjpcXHRcXHRcXHRcXHRcXHRnb3RvIGFnYWluO1xcbjE5MzM6XFx0XFx0XFx0fVxcbjE5MzQ6XFx0XFx0fVxcbjE5MzU6XFx0XFx0cmV0dXJuIDA7XFxuMTkzNjpcXHR9XFxuMTkzNzpcXHRcXG4xOTM4OlxcdGludCBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHQodm9pZClcXG4xOTM5OlxcdHtcXG4xOTQwOlxcdFxcdHVuc2lnbmVkIGludCB0aHJlYWRzLCBidWNrZXRzLCBjdXJyZW50X2J1Y2tldHMgPSAwO1xcbjE5NDE6XFx0XFx0c3RydWN0IGZ1dGV4X3ByaXZhdGVfaGFzaCAqZnBoO1xcbjE5NDI6XFx0XFxuMTk0MzpcXHRcXHRpZiAoIWN1cnJlbnQtXFx1MDAzZW1tKVxcbjE5NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTk0NTpcXHRcXG4xOTQ2OlxcdFxcdHNjb3BlZF9ndWFyZChyY3UpIHtcXG4xOTQ3OlxcdFxcdFxcdHRocmVhZHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGdldF9ucl90aHJlYWRzKGN1cnJlbnQpLCBudW1fb25saW5lX2NwdXMoKSk7XFxuMTk0ODpcXHRcXG4xOTQ5OlxcdFxcdFxcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LVxcdTAwM2VtbS1cXHUwMDNlZnV0ZXgucGhhc2guaGFzaCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjA1LjA2NTYzNTkyMVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTcyMTc3Njk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRnV0ZXggUHJpdmF0ZSBIYXNoIENvbmN1cnJlbmN5IEZpeCoqXG5cbk9rYXksIHNvIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgIHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzLiBBbmQsIG9mIGNvdXJzZSwgYEZVVEVYX1BSSVZBVEVfSEFTSGAgaXMga2V5LiBJdCdzIHRoZSBkZWZhdWx0LCB3aGljaCBpcyBnb29kLCBidXQgbGV0J3MgYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGluY2x1ZGluZyBpdCBpbiBvdXIgYnVpbGQgY29uZmlndXJhdGlvbi4gQWgsIHllcywgaXQgaGFzIHRob3NlIGRlcGVuZGVuY2llczogYEZVVEVYYCwgYCFCQVNFX1NNQUxMYCwgYW5kIGBNTVVgLiBNYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQgdG9vLlxuXG5SaWdodCwgYmFjayB0byB0aGUgcGF0Y2guIExldCdzIGxvb2sgYXQgdGhlIGNoYW5nZXMgYWdhaW4uIFdlJ3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgb2YgdGhlIGBoYXNoX25ld2AgcG9pbnRlciB3aXRoIGBXUklURV9PTkNFYC4gQW5kIHRoZSBzYW1lIHdpdGggdGhlIE5VTEwgYXNzaWdubWVudC4gVGhlIGNydWNpYWwgY2hhbmdlIGhlcmUgc2VlbXMgdG8gYmUgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtdXRleCBndWFyZCB3aXRoIFJDVS4gV2UndmUgZ290IGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KSgpYCwgYW5kIG5vdyB3ZSBoYXZlIGBzbXBfcm1iKClgIGFuZCBgUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpYC4gWWVwLCB0aGlzIGlzIGEgdGV4dGJvb2sgY29uY3VycmVuY3kgZml4LiBUaGV5J3JlIHVzaW5nIFJDVSBhbmQgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmdXRleCBwcml2YXRlIGhhc2ggdGFibGVzIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBzd2l0Y2hpbmcuXG5cblRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBjb25jdXJyZW5jeSBpc3N1ZXMgd2UncmUgYWRkcmVzc2luZyBhcmUgc3VidGxlIGFuZCBjYW4gYmUgZWFzaWx5IG1pc3NlZC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRob3NlIGVudHJ5IHBvaW50cy4gV2UncmUgbG9va2luZyBhdCBgZnV0ZXhfaGFzaF9wcmN0bGAgYW5kIGBmdXRleF9oYXNoX2FsbG9jYXRlX2RlZmF1bHRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFRoZXkncmUgcmVhY2hhYmxlIHRocm91Z2ggYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24sIHNvIGZ1enppbmcgdGhvc2Ugd2lsbCBleGVyY2lzZSB0aGVzZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcy4gQnkgZnV6emluZyB0aGVzZSwgd2UnbGwgY29uZmlybSB0aGF0IHRoZSBSQ1UgYW5kIG1lbW9yeSBiYXJyaWVycyBhcmUgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGhhc2hfbmV3YCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk4OSwiT3V0cHV0VG9rZW5zIjoxMjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NzoxNi43ODc0MTU1NTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI2MDg3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlVURVhfUFJJVkFURV9IQVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZnV0ZXhfaGFzaF9wcmN0bFwiLFxuICAgIFwiZnV0ZXhfaGFzaF9hbGxvY2F0ZV9kZWZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBpbiB0aGUgZnV0ZXggcHJpdmF0ZSBoYXNoIHRhYmxlIGFsbG9jYXRpb24gYW5kIHBpdm90aW5nIGxvZ2ljIGJ5IHJlcGxhY2luZyBhIG11dGV4IHdpdGggUkNVIGFuZCBtZW1vcnkgYmFycmllcnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgYHByY3RsKFBSX0ZVVEVYX0hBU0gpYCBhbmQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIEZ1enppbmcgdGhlc2UgZW50cnkgcG9pbnRzIHdpbGwgaGVscCB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSBsb2NrbGVzcyBzeW5jaHJvbml6YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjE2Ljg3MDY4NjA5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMDc3MjUzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwNjo1NzoxNi44NzEyOTI0ODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTczMDcxMTUzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkODQ3YWM0M2U0NjI4OTA5YzkyOTk4ZTYzOTBmOWIyZDlkNjA3N2JjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDY6NTU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXgvY29yZS5jIGIva2VybmVsL2Z1dGV4L2NvcmUuY1xuaW5kZXggMTI4YzU3NTJmMjI1Yy4uZTg0YmU1NDEwNTlhYiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9mdXRleC9jb3JlLmNcbisrKyBiL2tlcm5lbC9mdXRleC9jb3JlLmNcbkBAIC0yMDIsNyArMjAyLDcgQEAgc3RhdGljIGJvb2wgX19mdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgZnV0ZXhfcHJpdmF0ZV9oYXNoICpcbiBcdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobW1waC1cdTAwM2VoYXNoLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bW1waC1cdTAwM2Vsb2NrKSk7XG4gXHRpZiAoZnBoKSB7XG4gXHRcdGlmICghZnV0ZXhfcmVmX2lzX2RlYWQoZnBoKSkge1xuLVx0XHRcdG1tcGgtXHUwMDNlaGFzaF9uZXcgPSBuZXc7XG4rXHRcdFx0V1JJVEVfT05DRShtbXBoLVx1MDAzZWhhc2hfbmV3LCBuZXcpO1xuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0fVxuIFxuQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBmdXRleF9waXZvdF9oYXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFxuIFx0XHRmcGggPSBtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldztcbiBcdFx0aWYgKGZwaCkge1xuLVx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gTlVMTDtcbitcdFx0XHRXUklURV9PTkNFKG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3LCBOVUxMKTtcbiBcdFx0XHRfX2Z1dGV4X3Bpdm90X2hhc2gobW0sIGZwaCk7XG4gXHRcdH1cbiBcdH1cbkBAIC0xNzg2LDEyICsxNzg2LDE4IEBAIHN0YXRpYyBib29sIGZ1dGV4X3Bpdm90X3BlbmRpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRzdHJ1Y3QgZnV0ZXhfbW1fcGhhc2ggKm1tcGggPSBcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaDtcbiBcdHN0cnVjdCBmdXRleF9wcml2YXRlX2hhc2ggKmZwaDtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spO1xuK1x0Z3VhcmQocmN1KSgpO1xuIFxuLVx0aWYgKCFtbXBoLVx1MDAzZWhhc2hfbmV3KVxuK1x0ZnBoID0gcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaCk7XG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgaWYgd2Ugc2VlIHRoZSBuZXcgaGFzaCwgd2Ugd2lsbCBhbHNvIHNlZSB0aGUgY2xlYXJlZFxuK1x0ICogaGFzaF9uZXcgcG9pbnRlci4gUGFpcnMgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIoKSBpblxuK1x0ICogX19mdXRleF9waXZvdF9oYXNoKCkuXG4rXHQgKi9cbitcdHNtcF9ybWIoKTtcbitcdGlmICghUkVBRF9PTkNFKG1tcGgtXHUwMDNlaGFzaF9uZXcpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbi1cdGZwaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobW1waC1cdTAwM2VoYXNoKTtcbiBcdHJldHVybiBmdXRleF9yZWZfaXNfZGVhZChmcGgpO1xuIH1cbiBcbkBAIC0xODc5LDcgKzE4ODUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0Y3VyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoLFxuIFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZtbS1cdTAwM2VmdXRleC5waGFzaC5sb2NrKSk7XG4gXHRcdG5ldyA9IG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3O1xuLVx0XHRtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldyA9IE5VTEw7XG4rXHRcdFdSSVRFX09OQ0UobW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXcsIE5VTEwpO1xuIFxuIFx0XHRpZiAoZnBoKSB7XG4gXHRcdFx0aWYgKGN1ciBcdTAwMjZcdTAwMjYgIWN1ci1cdTAwM2VoYXNoX21hc2spIHtcbkBAIC0xODg5LDcgKzE4OTUsNyBAQCBzdGF0aWMgaW50IGZ1dGV4X2hhc2hfYWxsb2NhdGUodW5zaWduZWQgaW50IGhhc2hfc2xvdHMsIHVuc2lnbmVkIGludCBmbGFncylcbiBcdFx0XHRcdCAqIHRoZSBzZWNvbmQgb25lIHJldHVybnMgaGVyZS5cbiBcdFx0XHRcdCAqL1xuIFx0XHRcdFx0ZnJlZSA9IGZwaDtcbi1cdFx0XHRcdG1tLVx1MDAzZWZ1dGV4LnBoYXNoLmhhc2hfbmV3ID0gbmV3O1xuK1x0XHRcdFx0V1JJVEVfT05DRShtbS1cdTAwM2VmdXRleC5waGFzaC5oYXNoX25ldywgbmV3KTtcbiBcdFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXHRcdFx0fVxuIFx0XHRcdGlmIChjdXIgXHUwMDI2XHUwMDI2ICFuZXcpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA2OjU3OjE2Ljg3MTI5Mzk0OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzMwNzA5MjY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXRleCBDb25jdXJyZW5jeSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGtlcm5lbC9mdXRleC9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgaGFzaF9uZXdgIHVwZGF0ZXMuIEl0J3MgdXNpbmcgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYXNzaWdubWVudHMgdG8gYG1tcGgtXHUwMDNlaGFzaF9uZXdgIGFuZCBgbW0tXHUwMDNlZnV0ZXgucGhhc2guaGFzaF9uZXdgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyB0aGlzIGFzIGEgc3luY2hyb25pemF0aW9uIGFuZCBtZW1vcnkgb3JkZXJpbmcgZml4LiBHb29kLiBJdCdzIHRoZSByaWdodCBhcHByb2FjaCBmb3IgZW5zdXJpbmcgdmlzaWJpbGl0eSBhY3Jvc3MgY29yZXMuIFRoZSBjaGFuZ2UgdG8gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgIHVzaW5nIGBndWFyZChyY3UpKClgIGluc3RlYWQgb2YgYGd1YXJkKG11dGV4KShcdTAwMjZtbXBoLVx1MDAzZWxvY2spYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBzbXBfcm1iKClgIGZ1cnRoZXIgY29uZmlybXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBJdOKAmXMgbWFraW5nIHRoZSBjb2RlIG1vcmUgUkNVIGZyaWVuZGx5LlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmIGRpcmVjdGx5IGNvbmZpcm1zIHRoaXMuIFdlJ3JlIHJlcGxhY2luZyBkaXJlY3QgYXNzaWdubWVudHMgd2l0aCBgV1JJVEVfT05DRWAsIHdoaWNoIGd1YXJhbnRlZXMgYXRvbWljIHdyaXRlcyBhbmQgcHJvcGVyIG1lbW9yeSBvcmRlcmluZy4gVGhlIGBzbXBfcm1iKClgIGlzIGNyaXRpY2FsIGhlcmU7IGl0IGVuZm9yY2VzIGEgbWVtb3J5IGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQgcmVhZHMgb2YgYG1tcGgtXHUwMDNlaGFzaF9uZXdgIGhhcHBlbiAqYWZ0ZXIqIHRoZSBgcmN1X2RlcmVmZXJlbmNlKG1tcGgtXHUwMDNlaGFzaClgLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCBpbmNvbnNpc3RlbmNpZXMgd2hlbiB0aGUgaGFzaCBpcyBiZWluZyB1cGRhdGVkIGNvbmN1cnJlbnRseS5cblxuVGhlIGNydWNpYWwgdGhpbmcgaXMsIGFuZCB0aGlzIGlzIHdoYXQgSSBuZWVkIHRvIGVtcGhhc2l6ZSwgKnRoZXJlJ3Mgbm8gbmV3IHVzZXItc3BhY2UgZXhwb3N1cmUgaGVyZSouIE5vIG5ldyBzdHJ1Y3R1cmVzLCBubyBuZXcgYWxsb2NhdGlvbnMuIFRoaXMgaXNuJ3QgYWJvdXQgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW50cm9kdWNpbmcgbmV3IGFsbG9jYXRpb24gcmlza3MuIFRoaXMgaXMgKnB1cmVseSogYWJvdXQgZW5zdXJpbmcgdGhhdCByZWFkZXJzIGFuZCB3cml0ZXJzIG9mIHNoYXJlZCBkYXRhIHNlZSBhIGNvbnNpc3RlbnQgdmlldywgZXNwZWNpYWxseSBkdXJpbmcgaGFzaCB0YWJsZSBwaXZvdHMuIEl04oCZcyBlbnRpcmVseSBhYm91dCBnZXR0aW5nIHRoZSBtZW1vcnkgb3JkZXJpbmcgcmlnaHQuXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgS0FTQU4sIHBhcnRpY3VsYXJseSBLQ1NBTiBmb3IgZGF0YSByYWNlcywgYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGJlIG1vcmUgcmVsZXZhbnQgaGVyZS4gS01TQU4sIG5vdCBzbyBtdWNoLiBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXNlIHRvb2xzIGFyZSBlbmFibGVkIHRvIHByb3Blcmx5IHZhbGlkYXRlIHRoZSBwYXRjaCdzIGVmZmljYWN5LiBCYXNpY2FsbHksIHRoaXMgaXMgYSBzeW5jaHJvbml6YXRpb24gcGF0Y2guIEdvb2QgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjMsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDY6NTc6MzQuMTc4MzkwMzVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG9yZGVyaW5nIGlzc3VlcyBieSByZXBsYWNpbmcgZGlyZWN0IGFzc2lnbm1lbnRzIGFuZCByZWFkcyBvZiBgaGFzaF9uZXdgIHdpdGggYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCwgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyAoYHNtcF9ybWJgKSwgYW5kIHN3aXRjaGluZyBmcm9tIGEgbXV0ZXggdG8gUkNVIHByb3RlY3Rpb24gaW4gYGZ1dGV4X3Bpdm90X3BlbmRpbmdgLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWxhdGVkIHRvIGRhdGEgcmFjZXMgYW5kIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBMT0NLREVQLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgY29uY3VycmVuY3kgYW5kIG1lbW9yeSBvcmRlcmluZyBpc3N1ZXMgYnkgcmVwbGFjaW5nIGRpcmVjdCBhc3NpZ25tZW50cyBhbmQgcmVhZHMgb2YgYGhhc2hfbmV3YCB3aXRoIGBXUklURV9PTkNFYCBhbmQgYFJFQURfT05DRWAsIGFkZGluZyBtZW1vcnkgYmFycmllcnMgKGBzbXBfcm1iYCksIGFuZCBzd2l0Y2hpbmcgZnJvbSBhIG11dGV4IHRvIFJDVSBwcm90ZWN0aW9uIGluIGBmdXRleF9waXZvdF9wZW5kaW5nYC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVsYXRlZCB0byBkYXRhIHJhY2VzIGFuZCBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtDU0FOLCBLQVNBTiwgb3IgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[1] Phase: Succeeded StartedAt: 2026-08-13 06:57:45 +0000 UTC FinishedAt: 2026-08-13 06:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 06:57:45 +0000 UTC FinishedAt: 2026-08-13 06:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2] Phase: Succeeded StartedAt: 2026-08-13 06:57:45 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 06:57:45 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","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-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","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:57:45 +0000 UTC FinishedAt: 2026-08-13 06:57:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","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:57:45 +0000 UTC FinishedAt: 2026-08-13 06:57:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-509893404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 06:57:55 +0000 UTC FinishedAt: 2026-08-13 07:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 06:57:55 +0000 UTC FinishedAt: 2026-08-13 07:14:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*21c90ce7-0e67-4727-86ab-b0323eded05b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-509893404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2638e0c5-546a-4325-8153-fc1b77413a5f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-2635006282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 06:57:55 +0000 UTC FinishedAt: 2026-08-13 07:14:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*21c90ce7-0e67-4727-86ab-b0323eded05b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-509893404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "2638e0c5-546a-4325-8153-fc1b77413a5f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-2635006282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 07:14:25 +0000 UTC FinishedAt: 2026-08-13 07:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 07:14:25 +0000 UTC FinishedAt: 2026-08-13 07:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 07:14:25 +0000 UTC FinishedAt: 2026-08-13 07:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 07:14:25 +0000 UTC FinishedAt: 2026-08-13 07:14:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-3170844763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 07:14:35 +0000 UTC FinishedAt: 2026-08-13 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 07:14:35 +0000 UTC FinishedAt: 2026-08-13 07:16:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2638e0c5-546a-4325-8153-fc1b77413a5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-2635006282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 07:16:43 +0000 UTC FinishedAt: 2026-08-13 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 07:16:43 +0000 UTC FinishedAt: 2026-08-13 07:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 07:16:43 +0000 UTC FinishedAt: 2026-08-13 07:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 07:16:43 +0000 UTC FinishedAt: 2026-08-13 07:33:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*21c90ce7-0e67-4727-86ab-b0323eded05b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-3170844763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6c5af64e-f249-4456-9e04-c83cd9093f15", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-3207784191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 07:16:43 +0000 UTC FinishedAt: 2026-08-13 07:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*21c90ce7-0e67-4727-86ab-b0323eded05b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-3170844763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "6c5af64e-f249-4456-9e04-c83cd9093f15", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-3207784191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 07:33:06 +0000 UTC FinishedAt: 2026-08-13 07:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 07:33:06 +0000 UTC FinishedAt: 2026-08-13 07:33:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 07:33:06 +0000 UTC FinishedAt: 2026-08-13 07:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 07:33:06 +0000 UTC FinishedAt: 2026-08-13 07:35:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c5af64e-f249-4456-9e04-c83cd9093f15,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-3207784191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2638e0c5-546a-4325-8153-fc1b77413a5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c5af64e-f249-4456-9e04-c83cd9093f15,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-2635006282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-3207784191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 07:35:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 07:35:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-728005460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 07:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 07:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 07:35:27 +0000 UTC FinishedAt: 2026-08-13 07:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 07:35:37 +0000 UTC FinishedAt: 2026-08-13 10:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqpxsx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["futex_hash_prctl","futex_hash_allocate_default"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["FUTEX_PRIVATE_HASH"],"series_id":"79615642-c5fb-45c2-94a3-b0ef4bdf51e7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 07:35:37 +0000 UTC FinishedAt: 2026-08-13 10:38:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2638e0c5-546a-4325-8153-fc1b77413a5f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c5af64e-f249-4456-9e04-c83cd9093f15,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-2635006282/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-build-action-3207784191/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqpxsx/series-workflowqpxsx-convert-artifact-728005460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}