Name: series-workflow9mz7k Phase: Succeeded StartedAt: 2026-08-01 00:57:44 +0000 UTC FinishedAt: 2026-08-01 05:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[0] Phase: Succeeded StartedAt: 2026-08-01 00:57:44 +0000 UTC FinishedAt: 2026-08-01 01:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 00:57:44 +0000 UTC FinishedAt: 2026-08-01 01:29:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "337907d8-d612-4fa7-b5ab-1ae93abe97cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_peak_write", "swap_peak_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2NmZDVkYmMwOTJmZGI5ZGYwMGY0NTBhODc4ODY4NTA5ZTg2NzJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDE6Mjc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NjgzLDcgJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdFx0XHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB1c2FnZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ2OTEsMTEgJiM0Mzs0NjkxLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRzcGluX2xvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4gXG4gXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcbiYjNDM7XHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyayk7XG4gXHRXUklURV9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyaywgdXNhZ2UpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyX2N0eCwgd2F0Y2hlcnMsIGxpc3QpXG4tXHRcdGlmICh1c2FnZSBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4tXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgdXNhZ2UpO1xuJiM0MztcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xuIFxuIFx0LyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqL1xuIFx0aWYgKG9mcC1cdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3dyaXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzY2ZkNWRiYzA5MmZkYjlkZjAwZjQ1MGE4Nzg4Njg1MDllODY3MmMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwMToyNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00NjgzLDcgJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAkJCSAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsCiAJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKQogewotCXVuc2lnbmVkIGxvbmcgdXNhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7CiAJc3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwogCXN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7CkBAIC00NjkxLDExICYjNDM7NDY5MSwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCXNwaW5fbG9jaygmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTsKIAogCXVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpOwomIzQzOwlvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLSZndDtsb2NhbF93YXRlcm1hcmspOwogCVdSSVRFX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyaywgdXNhZ2UpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyX2N0eCwgd2F0Y2hlcnMsIGxpc3QpCi0JCWlmICh1c2FnZSAmZ3Q7IHBlZXJfY3R4LSZndDt2YWx1ZSkKLQkJCVdSSVRFX09OQ0UocGVlcl9jdHgtJmd0O3ZhbHVlLCB1c2FnZSk7CiYjNDM7CQlpZiAocGVlcl9jdHggIT0gb2ZwICZhbXA7JmFtcDsgb2xkX3dhdGVybWFyayAmZ3Q7IHBlZXJfY3R4LSZndDt2YWx1ZSkKJiM0MzsJCQlXUklURV9PTkNFKHBlZXJfY3R4LSZndDt2YWx1ZSwgb2xkX3dhdGVybWFyayk7CiAKIAkvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovCiAJaWYgKG9mcC0mZ3Q7dmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgcGVha193cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBgcGVha193cml0ZWAgaXMgYWxsIGFib3V0IHRyYWNraW5nIHBlYWsgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBmb3IgdHVuaW5nLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYHBlZXJfY3R4LSZndDt2YWx1ZWAgaXMgdXBkYXRlZC4KCk9yaWdpbmFsbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uOiBpZiB0aGUgY3VycmVudCB1c2FnZSAoYHVzYWdlYCkgd2FzIGhpZ2hlciB0aGFuIHRoZSBleGlzdGluZyBwZWFrIChgcGVlcl9jdHgtJmd0O3ZhbHVlYCksIHRoZW4gdXBkYXRlIHRoZSBwZWFrLiBQcmV0dHkgc3RhbmRhcmQuCgpOb3csIGl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBhIGJpdCBtb3JlIG51YW5jZWQuIEl0JiMzOTtzIGNvbXBhcmluZyBhbiBgb2xkX3dhdGVybWFya2AgdmFsdWUgYWdhaW5zdCB0aGUgZXhpc3RpbmcgcGVhaywgYnV0IG9ubHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgYGlmYCBzdGF0ZW1lbnQgdGVsbHMgbWUgdGhhdCBpdCYjMzk7cyB1c2luZyBgb2xkX3dhdGVybWFya2AgYW5kIHRoYXQgaXQgd2lsbCBzZXQgYHBlZXJfY3R4LSZndDt2YWx1ZWAgdG8gaXQgd2hlbiBgcGVlcl9jdHhgIGlzIG5vdCBgb2ZwYCBhbmQgYG9sZF93YXRlcm1hcmtgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgcGVhayBtZW1vcnkgdXNhZ2Ugc3RvcmVkIGluIGBwZWVyX2N0eC0mZ3Q7dmFsdWVgLgoKVGhpcyBtYWtlcyBtZSB3YW50IHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgb2xkX3dhdGVybWFya2AsIGFuZCB0aGUgbWVhbmluZyBvZiBgb2ZwYC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIHVwZGF0ZT8gSXMgdGhpcyBhYm91dCBwcmV2ZW50aW5nIGZsdWN0dWF0aW9ucywgc21vb3RoaW5nIG91dCB0aGUgcGVhaywgb3IgZGVhbGluZyB3aXRoIHNvbWUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgcmVzdCBvZiBgcGVha193cml0ZWAgYW5kIHBvc3NpYmx5IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZWFrX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00NjY4PXN0YXRpYyB2b2lkIHBlYWtfcmVsZWFzZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2ODEtXG5tbS9tZW1jb250cm9sLmM6NDY4MjpzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxubW0vbWVtY29udHJvbC5jLTQ2ODMtXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxMC1cbm1tL21lbWNvbnRyb2wuYzo0NzExOnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTQ3MTItXHRcdFx0XHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxNS1cbm1tL21lbWNvbnRyb2wuYzo0NzE2Olx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy00NzE3LVx0XHRcdCAgXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X3BlYWtzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTAxNj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTAyNy1cdFx0LnNlcV9zaG93ID0gbWVtb3J5X3BlYWtfc2hvdyxcbm1tL21lbWNvbnRyb2wuYzo1MDI4Olx0XHQud3JpdGUgPSBtZW1vcnlfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01MDI5LVx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzMtXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNTczNS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczOC1cbm1tL21lbWNvbnRyb2wuYzo1NzM5Olx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsXG5tbS9tZW1jb250cm9sLmMtNTc0MC1cdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXBfcGVha3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cdFx0LnNlcV9zaG93ID0gc3dhcF9wZWFrX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTgyNzpcdFx0LndyaXRlID0gc3dhcF9wZWFrX3dyaXRlLFxubW0vbWVtY29udHJvbC5jLTU4MjgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGVha193cml0ZWAgRnVuY3Rpb24mIzM5O3MgVXNhZ2UqKgoKT2theSwgc28gYHBlYWtfd3JpdGVgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGVyZSYjMzk7cyBhIHdyaXRlIG9wZXJhdGlvbiB0byBlaXRoZXIgdGhlIGBtZW1vcnkucGVha2Agb3IgYHN3YXAucGVha2AgZmlsZXMgd2l0aGluIGEgY2dyb3VwLiBTcGVjaWZpY2FsbHksIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgdGhlIGJhbGwgcm9sbGluZy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBhcHByb2FjaCBpcyBmdW5kYW1lbnRhbGx5IHNvdW5kIGFuZCB0aGF0IGNncm91cGZzIGlzIHRoZSBpbnRlbmRlZCBpbnRlcmZhY2UuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZWxhdGVkIHRvIGBtZW1jb250cm9sYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgbWVtY29udHJvbCBzZXR0aW5ncyBhcmUgaW4gcGxhY2UgdG8gc3VwcG9ydCB0aGVzZSBwZWFrIHdyaXRlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpIbW0sIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IEkmIzM5O3ZlIGdvdCB0aGlzIHByb2JsZW0gdG8gc29sdmUsIGFuZCBpdCBmZWVscyBsaWtlIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkLiBSaWdodCwgdGhhdCBtYWtlcyBtZSB0aGluay4uLiBtYXliZSB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVubG9jayB0aGUgYW5zd2VyLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgdGhpcyBpc3N1ZSBiYWNrIHRvIGl0cyBzb3VyY2UuIFRoZSBLY29uZmlnIHN5c3RlbSBpcyB2YXN0LCBidXQgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHByb2JsZW1zIHJlbGF0ZWQgdG8gc3lzdGVtIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTIzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIG1lbW9yeSBjb250cm9sbGVyIGlzIHNldCB1cCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBNRU1DR2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdGFydCB3aXRoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHBlYWsgbWVtb3J5IHRyYWNraW5nLiBTaW5jZSBgcGVha193cml0ZWAgaXMgZmxhZ2dlZCBhcyBhIHN0YXRpYyBoZWxwZXIsIEkmIzM5O20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgdG9wLWxldmVsIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQsIHNpbmNlIGBNRU1DR2AgcmVsaWVzIG9uIGl0LiBUbyBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZywgSSYjMzk7bGwgZ28gY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBNRU1DRyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBpbml0L0tjb25maWdgLCBhbmQgemVybyBpbiBvbiB0aGUgYGNvbmZpZyBNRU1DR2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBrbm93IHRoZSBjb3JlIGxvZ2ljIGlzIGluIHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIHNoaWZ0cyBpbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgS2NvbmZpZyBvcHRpb25zLCBzdWNoIGFzIE5VTUEgc3VwcG9ydCwgcGFnZSBtaWdyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBldmVuIGVhcmx5IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBjb3VsZCBjb21wbGljYXRlIGxhdGVyIGFuYWx5c2lzLCBzbyB0aG9yb3VnaG5lc3MgaXMga2V5LiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGF0aHMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgYW5kIHJ1bGUgb3V0IHdoYXQgSSBjYW4uIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGNvbW1lbnRzIGluIHRoZSBmaWxlIG9yIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgxOlx0XG4xMDgyOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODM6XHRcbjEwODQ6XHRjb25maWcgTUVNQ0dcbjEwODU6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODY6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODc6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg4Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDg5Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTA6XHRcdGhlbHBcbjEwOTE6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MjpcdFxuMTA5MzpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk0Olx0XHRib29sXG4xMDk1Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk2Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk3Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5ODpcdFx0ZGVmYXVsdCB5XG4xMDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6CgoqKk1lbWNnIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTUVNQ0dgIGlzIHRoZSBvbmx5IGNvbmZpZyBJJiMzOTtsbCBuZWVkLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgYmFzZSBlbmFibGluZyBvcHRpb24gZm9yIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gQnV0Li4uIHdhaXQgYSBzZWNvbmQsIHRoYXQgbmFnZ2luZyBmZWVsaW5nLiBUaGUgYHN3YXBfcGVha193cml0ZWAgZnVuY3Rpb24uLi4gSSB2YWd1ZWx5IHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdCBpbnRlcmFjdGlvbi4gQ291bGQgaXQgcmVxdWlyZSBgTUVNQ0dfU1dBUGAgdG9vPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUgY2hlY2suIExldCYjMzk7cyBkaXZlIHJpZ2h0IGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIHplcm8gaW4gYXJvdW5kIHRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhcm91bmQgaXQgYW5kIHZlcmlmeSB3aGV0aGVyIG9yIG5vdCBgTUVNQ0dfU1dBUGAgcGxheXMgYSBwYXJ0IGluIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtsbCBjbGVhciB1cCBhbnkgZG91YnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzMtXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNTczNS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmM9NTgwMz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4MjYtXHRcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jOjU4Mjc6XHRcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01ODI4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SG1tLCB3aGVyZSBpcyB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBkZWZpbmVkPyBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgdHVja2VkIGF3YXkgYmVoaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLCBwcm9iYWJseSByZWxhdGVkIHRvIHN3YXAgZnVuY3Rpb25hbGl0eS4mIzM0OyBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgLCBvciBhIHNpbWlsYXIgbWFjcm8gdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHN3YXAtcmVsYXRlZCBjb2RlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGNoZWNrLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IHRoZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3MzA6XHRcbjU3MzE6XHRcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuNTczMjpcdH1cbjU3MzM6XHRcbjU3MzQ6XHRzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG41NzM1Olx0XHRcdFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41NzM2Olx0e1xuNTczNzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3Mzg6XHRcbjU3Mzk6XHRcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLFxuNTc0MDpcdFx0XHRcdCAgXHUwMDI2bWVtY2ctXHUwMDNlc3dhcF9wZWFrcyk7XG41NzQxOlx0fVxuNTc0MjpcdFxuNTc0MzpcdHN0YXRpYyBpbnQgc3dhcF9oaWdoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTc0NDpcdHtcbjU3NDU6XHRcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXG41NzQ2Olx0XHRcdFJFQURfT05DRShtZW1fY2dyb3VwX2Zyb21fc2VxKG0pLVx1MDAzZXN3YXAuaGlnaCkpO1xuNTc0NzpcdH1cbjU3NDg6XHRcbjU3NDk6XHRzdGF0aWMgc3NpemVfdCBzd2FwX2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuNTc1MDpcdFx0XHRcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41NzUxOlx0e1xuNTc1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3NTM6XHRcdHVuc2lnbmVkIGxvbmcgaGlnaDtcbjU3NTQ6XHRcdGludCBlcnI7XG41NzU1Olx0XG41NzU2Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNTc1NzpcdFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXCYjMzQ7bWF4XCYjMzQ7LCBcdTAwMjZoaWdoKTtcbjU3NTg6XHRcdGlmIChlcnIpXG41NzU5Olx0XHRcdHJldHVybiBlcnI7XG41NzYwOlx0XG41NzYxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgaGlnaCk7XG41NzYyOlx0XG41NzYzOlx0XHRyZXR1cm4gbmJ5dGVzO1xuNTc2NDpcdH1cbjU3NjU6XHRcbjU3NjY6XHRzdGF0aWMgaW50IHN3YXBfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTc2NzpcdHtcbjU3Njg6XHRcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXG41NzY5Olx0XHRcdFJFQURfT05DRShtZW1fY2dyb3VwX2Zyb21fc2VxKG0pLVx1MDAzZXN3YXAubWF4KSk7XG41NzcwOlx0fVxuNTc3MTpcdFxuNTc3MjpcdHN0YXRpYyBzc2l6ZV90IHN3YXBfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbjU3NzM6XHRcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41Nzc0Olx0e1xuNTc3NTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3NzY6XHRcdHVuc2lnbmVkIGxvbmcgbWF4O1xuNTc3NzpcdFx0aW50IGVycjtcbjU3Nzg6XHRcbjU3Nzk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG41NzgwOlx0XHRlcnIgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCBcJiMzNDttYXhcJiMzNDssIFx1MDAyNm1heCk7XG41NzgxOlx0XHRpZiAoZXJyKVxuNTc4MjpcdFx0XHRyZXR1cm4gZXJyO1xuNTc4MzpcdFxuNTc4NDpcdFx0eGNoZyhcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLm1heCwgbWF4KTtcbjU3ODU6XHRcbjU3ODY6XHRcdHJldHVybiBuYnl0ZXM7XG41Nzg3Olx0fVxuNTc4ODpcdFxuNTc4OTpcdHN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41NzkwOlx0e1xuNTc5MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbjU3OTI6XHRcbjU3OTM6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7aGlnaCAlbHVcXG5cJiMzNDssXG41Nzk0Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX0hJR0hdKSk7XG41Nzk1Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O21heCAlbHVcXG5cJiMzNDssXG41Nzk2Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbjU3OTc6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ZmFpbCAlbHVcXG5cJiMzNDssXG41Nzk4Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX0ZBSUxdKSk7XG41Nzk5Olx0XG41ODAwOlx0XHRyZXR1cm4gMDtcbjU4MDE6XHR9XG41ODAyOlx0XG41ODAzOlx0c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xuNTgwNDpcdFx0e1xuNTgwNTpcdFx0XHQubmFtZSA9IFwmIzM0O3N3YXAuY3VycmVudFwmIzM0OyxcbjU4MDY6XHRcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuNTgwNzpcdFx0XHQucmVhZF91NjQgPSBzd2FwX2N1cnJlbnRfcmVhZCxcbjU4MDg6XHRcdH0sXG41ODA5Olx0XHR7XG41ODEwOlx0XHRcdC5uYW1lID0gXCYjMzQ7c3dhcC5oaWdoXCYjMzQ7LFxuNTgxMTpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG41ODEyOlx0XHRcdC5zZXFfc2hvdyA9IHN3YXBfaGlnaF9zaG93LFxuNTgxMzpcdFx0XHQud3JpdGUgPSBzd2FwX2hpZ2hfd3JpdGUsXG41ODE0Olx0XHR9LFxuNTgxNTpcdFx0e1xuNTgxNjpcdFx0XHQubmFtZSA9IFwmIzM0O3N3YXAubWF4XCYjMzQ7LFxuNTgxNzpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG41ODE4Olx0XHRcdC5zZXFfc2hvdyA9IHN3YXBfbWF4X3Nob3csXG41ODE5Olx0XHRcdC53cml0ZSA9IHN3YXBfbWF4X3dyaXRlLFxuNTgyMDpcdFx0fSxcbjU4MjE6XHRcdHtcbjU4MjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzd2FwLnBlYWtcJiMzNDssXG41ODIzOlx0XHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbjU4MjQ6XHRcdFx0Lm9wZW4gPSBwZWFrX29wZW4sXG41ODI1Olx0XHRcdC5yZWxlYXNlID0gcGVha19yZWxlYXNlLFxuNTgyNjpcdFx0XHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcbjU4Mjc6XHRcdFx0LndyaXRlID0gc3dhcF9wZWFrX3dyaXRlLFxuNTgyODpcdFx0fSxcbjU4Mjk6XHRcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSB3cmFwcGVkIGluIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgIG9yIGEgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzd2FwIGZlYXR1cmUgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbC4gSWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBpbmNsdWRlZCwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0JiMzOTtzIGFjdGl2ZS4gSSBoYXZlIHRvIHZlcmlmeSBpZiB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB1bmRlciBzb21lIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9maWxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTc4OT1zdGF0aWMgaW50IHN3YXBfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODAyLVxubW0vbWVtY29udHJvbC5jOjU4MDM6c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xubW0vbWVtY29udHJvbC5jLTU4MDQtXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTU5OTg9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAxNC1cbm1tL21lbWNvbnRyb2wuYzo2MDE1OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNjAxNi1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjAzNj1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDQwLVxubW0vbWVtY29udHJvbC5jOjYwNDE6XHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmMtNjA0Mi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tLVxubW0vbWVtY29udHJvbC5jLTYwNDUtI2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jOjYwNDY6XHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCB6c3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYwNDctI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhlIGNvZGU6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdHMgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gc29tZSBwcmVwcm9jZXNzb3IgZmxhZyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGFuZCB3aGVyZSBpdCBtaWdodCBiZSBhY3RpdmUgb3IgaW5hY3RpdmUgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCBmb3IgbWUgd2hlbiB0cmFja2luZyBkb3duIHRoZSBiZWhhdmlvciBvZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zd2FwX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTYwMTU9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzNS1cbm1tL21lbWNvbnRyb2wuYzo2MDM2OnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjAzNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTYwNDktfVxubW0vbWVtY29udHJvbC5jOjYwNTA6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MDUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBmb3IgU3dhcCBJbml0aWFsaXphdGlvbiBHdWFyZCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUmIzM5O3MgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB3cmFwcGluZyBpdC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBzd2FwIGluaXRpYWxpemF0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHN3YXAgYmVpbmcgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBpbWFnaW5lIHRoaXMgY29kZSBleGVjdXRpbmcgaWYgc3dhcCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkLiBEb2luZyBzbyB3b3VsZCBsaWtlbHkgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIG91dHJpZ2h0IGNyYXNoZXMuIEl04oCZcyBiZXN0IHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvbXBpbGVzIGNvcnJlY3RseSBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBhdm9pZHMgaGVhZGFjaGVzIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMga2VlcHMgbWUgZnJvbSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDIwOlx0XHR9LFxuNjAyMTpcdFx0e1xuNjAyMjpcdFx0XHQubmFtZSA9IFwmIzM0O3pzd2FwLm1heFwmIzM0OyxcbjYwMjM6XHRcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuNjAyNDpcdFx0XHQuc2VxX3Nob3cgPSB6c3dhcF9tYXhfc2hvdyxcbjYwMjU6XHRcdFx0LndyaXRlID0genN3YXBfbWF4X3dyaXRlLFxuNjAyNjpcdFx0fSxcbjYwMjc6XHRcdHtcbjYwMjg6XHRcdFx0Lm5hbWUgPSBcJiMzNDt6c3dhcC53cml0ZWJhY2tcJiMzNDssXG42MDI5Olx0XHRcdC5zZXFfc2hvdyA9IHpzd2FwX3dyaXRlYmFja19zaG93LFxuNjAzMDpcdFx0XHQud3JpdGUgPSB6c3dhcF93cml0ZWJhY2tfd3JpdGUsXG42MDMxOlx0XHR9LFxuNjAzMjpcdFx0eyB9XHQvKiB0ZXJtaW5hdGUgKi9cbjYwMzM6XHR9O1xuNjAzNDpcdCNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbjYwMzU6XHRcbjYwMzY6XHRzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuNjAzNzpcdHtcbjYwMzg6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG42MDM5Olx0XHRcdHJldHVybiAwO1xuNjA0MDpcdFxuNjA0MTpcdFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xuNjA0MjpcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbjYwNDM6XHRcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG42MDQ0Olx0I2VuZGlmXG42MDQ1Olx0I2lmZGVmIENPTkZJR19aU1dBUFxuNjA0NjpcdFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbjYwNDc6XHQjZW5kaWZcbjYwNDg6XHRcdHJldHVybiAwO1xuNjA0OTpcdH1cbjYwNTA6XHRzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xuNjA1MTpcdFxuNjA1MjpcdCNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuNjA1MzpcdFxuNjA1NDpcdHZvaWQgbWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbm9kZW1hc2tfdCAqbWFzaylcbjYwNTU6XHR7XG42MDU2Olx0XHRub2RlbWFza190IGFsbG93ZWQ7XG42MDU3Olx0XG42MDU4Olx0XHRpZiAoIW1lbWNnKVxuNjA1OTpcdFx0XHRyZXR1cm47XG42MDYwOlx0XG42MDYxOlx0XHQvKlxuNjA2MjpcdFx0ICogU2luY2UgdGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBtaWdyYXRpb24gcGF0aHMsIGFuZFxuNjA2MzpcdFx0ICogcmVjbGFpbSBhbmQgbWlncmF0aW9uIGFyZSBzdWJqZWN0IHRvIHJhY2UgY29uZGl0aW9ucyBzdWNoIGFzIGNoYW5nZXNcbjYwNjQ6XHRcdCAqIGluIGVmZmVjdGl2ZV9tZW1zIGFuZCBob3QtdW5wbHVnaW5nIG9mIG5vZGVzLCBpbmFjY3VyYXRlIGFsbG93ZWRcbjYwNjU6XHRcdCAqIG1hc2sgaXMgYWNjZXB0YWJsZS5cbjYwNjY6XHRcdCAqL1xuNjA2NzpcdFx0Y3B1c2V0X25vZGVzX2FsbG93ZWQobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YWxsb3dlZCk7XG42MDY4Olx0XHRub2Rlc19hbmQoKm1hc2ssICptYXNrLCBhbGxvd2VkKTtcbjYwNjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNwb3QgYCNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2Agd2F5IGRvd24gdGhlcmUgYXQgbGluZSA2MDUyLiBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBgc3dhcF9wZWFrX3dyaXRlYCBkZWZpbml0ZWx5IHJlcXVpcmVzIGBDT05GSUdfU1dBUGAgdG8gYmUgZGVmaW5lZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBtZW1vcnlfcGVha193cml0ZWAuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gYG1lbW9yeV9maWxlc2AsIHNvIEkmIzM5O2xsIHF1aWNrbHkgdHJhY2Ugd2hlcmUgYG1lbW9yeV9maWxlc2AgaXMgYWN0dWFsbHkgYWRkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X2ZpbGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MDAzPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDE1LVxubW0vbWVtY29udHJvbC5jOjUwMTY6c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNTAxNy1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTA5MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMDAtXHQuZXhpdCA9IG1lbV9jZ3JvdXBfZXhpdCxcbm1tL21lbWNvbnRyb2wuYzo1MTAxOlx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxubW0vbWVtY29udHJvbC5jLTUxMDItI2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwZWFrIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cHMuIEkgc2VlIHRoYXQgYG1lbW9yeV9maWxlc2AgaXMgYWx3YXlzIGFkZGVkIGlmIGBNRU1DR2AgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgaXMgZW5hYmxlZC4gU28sIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGNvbnNpZGVyLCBhbmQgYFNXQVBgIChTd2FwKSBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBTV0FQYCBpcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGVha193cml0ZWAsIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIHdpdGhpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc29tZXRoaW5nIHRoYXQgYWZmZWN0cyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZDogYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMmIzM5OyBjaGFyYWN0ZXJpc3RpY3MuIFRoZXkgKmFyZSogc3RhdGljLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBndWlkYW5jZTogUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdYCBhbmQgYHN3YXBfZmlsZXNbXWAgc3RydWN0dXJlcy4gU28sIG5vLCB0aGV5IGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkISBUaGV5IGFyZSBjYWxsZWQgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgc28gdGhhdCYjMzk7cyBnb29kLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBjZ3JvdXAgY29yZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgcGVyZmVjdC4gU28sIEkgd2lsbCBsaXN0IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgYHBlYWtfd3JpdGVgIGFuZCB0aGVuIEkmIzM5O20gbGlzdGluZyBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBhbmQgeWVzLCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHByaW1hcnkgb25lLCBhbmQgYFNXQVBgIGlzIGNydWNpYWwgZm9yIGBzd2FwX3BlYWtfd3JpdGVgLiBTbywgSSYjMzk7bGwgZGVmaW5pdGVseSBsaXN0IGBNRU1DR2AgYW5kIGBTV0FQYC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGlmIGBtZW1vcnkucGVha2AgaXMgcGFydCBvZiBjZ3JvdXAgdjIuIFllcywgYG1lbW9yeV9maWxlc2AgaXMgcGFydCBvZiBgZGZsX2NmdHlwZXNgLCB3aGljaCBpcyB0aGUgY2dyb3VwIHYyIGZyYW1ld29yay4gSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZz8gTm8uCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHRoZSB3cml0ZSBoYW5kbGVyIGZvciB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMgaW4gdGhlIGNncm91cCBmaWxlc3lzdGVtLiBJdCYjMzk7cyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgaXMgdXBkYXRlZCBmb3Igd2F0Y2hlcnMsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLiBUaGlzIGNoYW5nZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGZpbGVzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgTUVNQ0dgIGFuZCBgU1dBUGAuCgpJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2ODA6XHR9XG40NjgxOlx0XG40NjgyOlx0c3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbjQ2ODM6XHRcdFx0XHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxuNDY4NDpcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXG40Njg1Olx0e1xuNDY4NjpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcbjQ2ODc6XHRcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XG40Njg4Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDY4OTpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbjQ2OTA6XHRcbjQ2OTE6XHRcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbjQ2OTI6XHRcbjQ2OTM6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuNDY5NDpcdFx0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuNDY5NTpcdFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbjQ2OTY6XHRcbjQ2OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuNDY5ODpcdFx0XHRpZiAocGVlcl9jdHggIT0gb2ZwIFx1MDAyNlx1MDAyNiBvbGRfd2F0ZXJtYXJrIFx1MDAzZSBwZWVyX2N0eC1cdTAwM2V2YWx1ZSlcbjQ2OTk6XHRcdFx0XHRXUklURV9PTkNFKHBlZXJfY3R4LVx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcbjQ3MDA6XHRcbjQ3MDE6XHRcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cbjQ3MDI6XHRcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXG40NzAzOlx0XHRcdGxpc3RfYWRkKFx1MDAyNm9mcC1cdTAwM2VsaXN0LCB3YXRjaGVycyk7XG40NzA0Olx0XG40NzA1Olx0XHRXUklURV9PTkNFKG9mcC1cdTAwM2V2YWx1ZSwgdXNhZ2UpO1xuNDcwNjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzA3Olx0XG40NzA4Olx0XHRyZXR1cm4gbmJ5dGVzO1xuNDcwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzEKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUHJlY2lzZSBJbXBsZW1lbnRhdGlvbiBDb25maXJtYXRpb24gJmFtcDsgTmV4dCBMb2dpY2FsIFN0ZXAqKgoKUmlnaHQsIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHNwZWNpZmljYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEdvb2QuIFdpdGggdGhhdCBjb25maXJtZWQsIGl0JiMzOTtzIGNsZWFyIHdoYXQgbmVlZHMgdG8gaGFwcGVuIG5leHQ6IEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbiBhZnRlciB2YWxpZGF0aW9uIGFuZCBjb25maXJtcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIHRyaWdnZXIuIE5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3dyaXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjc6NTEuNTU1OTk3OTg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTM1NDc5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyNzo1MS41NTYwMTkyNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE0MjcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjZmQ1ZGJjMDkyZmRiOWRmMDBmNDUwYTg3ODg2ODUwOWU4NjcyYzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMToyNzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00NjgzLDcgKzQ2ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbiBcXHRcXHRcXHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7XFxuQEAgLTQ2OTEsMTEgKzQ2OTEsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuIFxcbiBcXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcXG4rXFx0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtcXG4gXFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdClcXG4tXFx0XFx0aWYgKHVzYWdlIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbi1cXHRcXHRcXHRXUklURV9PTkNFKHBlZXJfY3R4LVxcdTAwM2V2YWx1ZSwgdXNhZ2UpO1xcbitcXHRcXHRpZiAocGVlcl9jdHggIT0gb2ZwIFxcdTAwMjZcXHUwMDI2IG9sZF93YXRlcm1hcmsgXFx1MDAzZSBwZWVyX2N0eC1cXHUwMDNldmFsdWUpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UocGVlcl9jdHgtXFx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcXG4gXFxuIFxcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cXG4gXFx0aWYgKG9mcC1cXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI3OjUyLjAwOTk2OTY1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYxNDM5NTY0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3BlYWtfd3JpdGVcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGNncm91cCB2MiBmaWxlcy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgZm9yIHVwZGF0aW5nIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgZm9yIHdhdGNoZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGNncm91cCBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NmZDVkYmMwOTJmZGI5ZGYwMGY0NTBhODc4ODY4NTA5ZTg2NzJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDE6Mjc6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDIyZjU1YWViOTRmM2IuLmQyZDc2NjYyNWI1NTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQ2ODMsNyArNDY4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ2OTEsMTEgKzQ2OTEsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjc6NTIuMDA5OTcxMjExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDg5MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQ29udHJvbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIGBwZWFrX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGBwZWFrX3dyaXRlYCBpcyBhbGwgYWJvdXQgdHJhY2tpbmcgcGVhayBtZW1vcnkgdXNhZ2UsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGZvciB0dW5pbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgcGVlcl9jdHgtXHUwMDNldmFsdWVgIGlzIHVwZGF0ZWQuXG5cbk9yaWdpbmFsbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uOiBpZiB0aGUgY3VycmVudCB1c2FnZSAoYHVzYWdlYCkgd2FzIGhpZ2hlciB0aGFuIHRoZSBleGlzdGluZyBwZWFrIChgcGVlcl9jdHgtXHUwMDNldmFsdWVgKSwgdGhlbiB1cGRhdGUgdGhlIHBlYWsuIFByZXR0eSBzdGFuZGFyZC5cblxuTm93LCBpdCdzIGRvaW5nIHNvbWV0aGluZyBhIGJpdCBtb3JlIG51YW5jZWQuIEl0J3MgY29tcGFyaW5nIGFuIGBvbGRfd2F0ZXJtYXJrYCB2YWx1ZSBhZ2FpbnN0IHRoZSBleGlzdGluZyBwZWFrLCBidXQgb25seSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBgaWZgIHN0YXRlbWVudCB0ZWxscyBtZSB0aGF0IGl0J3MgdXNpbmcgYG9sZF93YXRlcm1hcmtgIGFuZCB0aGF0IGl0IHdpbGwgc2V0IGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAgdG8gaXQgd2hlbiBgcGVlcl9jdHhgIGlzIG5vdCBgb2ZwYCBhbmQgYG9sZF93YXRlcm1hcmtgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgcGVhayBtZW1vcnkgdXNhZ2Ugc3RvcmVkIGluIGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAuXG5cblRoaXMgbWFrZXMgbWUgd2FudCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG9sZF93YXRlcm1hcmtgLCBhbmQgdGhlIG1lYW5pbmcgb2YgYG9mcGAuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIHVwZGF0ZT8gSXMgdGhpcyBhYm91dCBwcmV2ZW50aW5nIGZsdWN0dWF0aW9ucywgc21vb3RoaW5nIG91dCB0aGUgcGVhaywgb3IgZGVhbGluZyB3aXRoIHNvbWUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgcmVzdCBvZiBgcGVha193cml0ZWAgYW5kIHBvc3NpYmx5IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI3OjU2LjMwNDg2NTk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5NDQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVha193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ2Njg9c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjgxLVxcbm1tL21lbWNvbnRyb2wuYzo0NjgyOnN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXFxubW0vbWVtY29udHJvbC5jLTQ2ODMtXFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NzEwLVxcbm1tL21lbWNvbnRyb2wuYzo0NzExOnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy00NzEyLVxcdFxcdFxcdFxcdCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ3MTUtXFxubW0vbWVtY29udHJvbC5jOjQ3MTY6XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LFxcbm1tL21lbWNvbnRyb2wuYy00NzE3LVxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfcGVha3MpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMTY9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTAyNy1cXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1MDI4OlxcdFxcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxcbm1tL21lbWNvbnRyb2wuYy01MDI5LVxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczMy1cXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxubW0vbWVtY29udHJvbC5jLTU3MzUtXFx0XFx0XFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczOC1cXG5tbS9tZW1jb250cm9sLmM6NTczOTpcXHRyZXR1cm4gcGVha193cml0ZShvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLFxcbm1tL21lbWNvbnRyb2wuYy01NzQwLVxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODI2LVxcdFxcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1ODI3OlxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTgyOC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyNzo1Ni44NjE4MTU2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNDk3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGVha193cml0ZWAgRnVuY3Rpb24ncyBVc2FnZSoqXG5cbk9rYXksIHNvIGBwZWFrX3dyaXRlYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGFuZCBpdCdzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGVyZSdzIGEgd3JpdGUgb3BlcmF0aW9uIHRvIGVpdGhlciB0aGUgYG1lbW9yeS5wZWFrYCBvciBgc3dhcC5wZWFrYCBmaWxlcyB3aXRoaW4gYSBjZ3JvdXAuIFNwZWNpZmljYWxseSwgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAgYXJlIHRoZSBoYW5kbGVycyB0aGF0IGdldCB0aGUgYmFsbCByb2xsaW5nLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGFwcHJvYWNoIGlzIGZ1bmRhbWVudGFsbHkgc291bmQgYW5kIHRoYXQgY2dyb3VwZnMgaXMgdGhlIGludGVuZGVkIGludGVyZmFjZS4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcmVsYXRlZCB0byBgbWVtY29udHJvbGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVyIG1lbWNvbnRyb2wgc2V0dGluZ3MgYXJlIGluIHBsYWNlIHRvIHN1cHBvcnQgdGhlc2UgcGVhayB3cml0ZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MDAuNDc0MzE3MDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTgyMDM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MDAuNTQ5MzA3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTA5NjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5IbW0sIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IEkndmUgZ290IHRoaXMgcHJvYmxlbSB0byBzb2x2ZSwgYW5kIGl0IGZlZWxzIGxpa2UgaXQncyBjb25uZWN0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZC4gUmlnaHQsIHRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbWF5YmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIGtleSB0byB1bmxvY2sgdGhlIGFuc3dlci4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgdGhpcyBpc3N1ZSBiYWNrIHRvIGl0cyBzb3VyY2UuIFRoZSBLY29uZmlnIHN5c3RlbSBpcyB2YXN0LCBidXQgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHByb2JsZW1zIHJlbGF0ZWQgdG8gc3lzdGVtIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowMy40MDAyNzkwNzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyMTgyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg1LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNi1cXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowMy40ODMzODE0NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyMzMyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBtZW1vcnkgY29udHJvbGxlciBpcyBzZXQgdXAsIHNwZWNpZmljYWxseSB1c2luZyBgTUVNQ0dgIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdGFydCB3aXRoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHBlYWsgbWVtb3J5IHRyYWNraW5nLiBTaW5jZSBgcGVha193cml0ZWAgaXMgZmxhZ2dlZCBhcyBhIHN0YXRpYyBoZWxwZXIsIEknbSBjb25maWRlbnQgdGhvc2UgYXJlIHRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQsIHNpbmNlIGBNRU1DR2AgcmVsaWVzIG9uIGl0LiBUbyBlbnN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBJJ2xsIGdvIGNoZWNrIGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIGBNRU1DR2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowNy41MzU3MTk1MDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTc0MDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc0PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODMtXFxuaW5pdC9LY29uZmlnOjEwODQ6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODUtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA2LVxcbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA4LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjA3LjY1NzQ2NjA4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY2OTcxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIHplcm8gaW4gb24gdGhlIGBjb25maWcgTUVNQ0dgIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMuIEkga25vdyB0aGUgY29yZSBsb2dpYyBpcyBpbiB0aGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJhbCBzaGlmdHMgaW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIEtjb25maWcgb3B0aW9ucywgc3VjaCBhcyBOVU1BIHN1cHBvcnQsIHBhZ2UgbWlncmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBBbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgY291bGQgY29tcGxpY2F0ZSBsYXRlciBhbmFseXNpcywgc28gdGhvcm91Z2huZXNzIGlzIGtleS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGF0aHMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgYW5kIHJ1bGUgb3V0IHdoYXQgSSBjYW4uIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGNvbW1lbnRzIGluIHRoZSBmaWxlIG9yIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxMS4xMjQ0NDEyNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4MzpcXHRcXG4xMDg0OlxcdGNvbmZpZyBNRU1DR1xcbjEwODU6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NjpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4NzpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODg6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODk6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MDpcXHRcXHRoZWxwXFxuMTA5MTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkyOlxcdFxcbjEwOTM6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk0OlxcdFxcdGJvb2xcXG4xMDk1OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk4OlxcdFxcdGRlZmF1bHQgeVxcbjEwOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjExLjEyNDY5MDcxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNDEwMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6XG5cbioqTWVtY2cgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE1FTUNHYCBpcyB0aGUgb25seSBjb25maWcgSSdsbCBuZWVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBiYXNlIGVuYWJsaW5nIG9wdGlvbiBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBCdXQuLi4gd2FpdCBhIHNlY29uZCwgdGhhdCBuYWdnaW5nIGZlZWxpbmcuIFRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbi4uLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCB0aGF0IGludGVyYWN0aW9uLiBDb3VsZCBpdCByZXF1aXJlIGBNRU1DR19TV0FQYCB0b28/IEJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZSBjaGVjay4gTGV0J3MgZGl2ZSByaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIHplcm8gaW4gYXJvdW5kIHRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhcm91bmQgaXQgYW5kIHZlcmlmeSB3aGV0aGVyIG9yIG5vdCBgTUVNQ0dfU1dBUGAgcGxheXMgYSBwYXJ0IGluIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0J2xsIGNsZWFyIHVwIGFueSBkb3VidC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MTQuNzg3MTA0NDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxMDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3BlYWtfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NzI3PXN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzMzLVxcbm1tL21lbWNvbnRyb2wuYzo1NzM0OnN0YXRpYyBzc2l6ZV90IHN3YXBfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNTczNS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODI2LVxcdFxcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1ODI3OlxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTgyOC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxNC44NjI5MjAxMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2Nzc0Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSG1tLCB3aGVyZSBpcyB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBkZWZpbmVkPyBJJ2xsIGJldCBpdCdzIHR1Y2tlZCBhd2F5IGJlaGluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSwgcHJvYmFibHkgcmVsYXRlZCB0byBzd2FwIGZ1bmN0aW9uYWxpdHkuXCIgTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBsb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIENPTkZJR19TV0FQYCwgb3IgYSBzaW1pbGFyIG1hY3JvIHRoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiBzd2FwLXJlbGF0ZWQgY29kZS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2suIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxNy44MzA2NjcwMjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTczMDpcXHRcXG41NzMxOlxcdFxcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuNTczMjpcXHR9XFxuNTczMzpcXHRcXG41NzM0OlxcdHN0YXRpYyBzc2l6ZV90IHN3YXBfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG41NzM1OlxcdFxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjU3MzY6XFx0e1xcbjU3Mzc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG41NzM4OlxcdFxcbjU3Mzk6XFx0XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCxcXG41NzQwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG41NzQxOlxcdH1cXG41NzQyOlxcdFxcbjU3NDM6XFx0c3RhdGljIGludCBzd2FwX2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTc0NDpcXHR7XFxuNTc0NTpcXHRcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxcbjU3NDY6XFx0XFx0XFx0UkVBRF9PTkNFKG1lbV9jZ3JvdXBfZnJvbV9zZXEobSktXFx1MDAzZXN3YXAuaGlnaCkpO1xcbjU3NDc6XFx0fVxcbjU3NDg6XFx0XFxuNTc0OTpcXHRzdGF0aWMgc3NpemVfdCBzd2FwX2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjU3NTA6XFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG41NzUxOlxcdHtcXG41NzUyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNTc1MzpcXHRcXHR1bnNpZ25lZCBsb25nIGhpZ2g7XFxuNTc1NDpcXHRcXHRpbnQgZXJyO1xcbjU3NTU6XFx0XFxuNTc1NjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjU3NTc6XFx0XFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXFxcIm1heFxcXCIsIFxcdTAwMjZoaWdoKTtcXG41NzU4OlxcdFxcdGlmIChlcnIpXFxuNTc1OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjU3NjA6XFx0XFxuNTc2MTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBoaWdoKTtcXG41NzYyOlxcdFxcbjU3NjM6XFx0XFx0cmV0dXJuIG5ieXRlcztcXG41NzY0OlxcdH1cXG41NzY1OlxcdFxcbjU3NjY6XFx0c3RhdGljIGludCBzd2FwX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41NzY3OlxcdHtcXG41NzY4OlxcdFxcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXFxuNTc2OTpcXHRcXHRcXHRSRUFEX09OQ0UobWVtX2Nncm91cF9mcm9tX3NlcShtKS1cXHUwMDNlc3dhcC5tYXgpKTtcXG41NzcwOlxcdH1cXG41NzcxOlxcdFxcbjU3NzI6XFx0c3RhdGljIHNzaXplX3Qgc3dhcF9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjU3NzM6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjU3NzQ6XFx0e1xcbjU3NzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG41Nzc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbjU3Nzc6XFx0XFx0aW50IGVycjtcXG41Nzc4OlxcdFxcbjU3Nzk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG41NzgwOlxcdFxcdGVyciA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFxcXCJtYXhcXFwiLCBcXHUwMDI2bWF4KTtcXG41NzgxOlxcdFxcdGlmIChlcnIpXFxuNTc4MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjU3ODM6XFx0XFxuNTc4NDpcXHRcXHR4Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcC5tYXgsIG1heCk7XFxuNTc4NTpcXHRcXG41Nzg2OlxcdFxcdHJldHVybiBuYnl0ZXM7XFxuNTc4NzpcXHR9XFxuNTc4ODpcXHRcXG41Nzg5OlxcdHN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTc5MDpcXHR7XFxuNTc5MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbjU3OTI6XFx0XFxuNTc5MzpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJoaWdoICVsdVxcXFxuXFxcIixcXG41Nzk0OlxcdFxcdFxcdCAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfSElHSF0pKTtcXG41Nzk1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIm1heCAlbHVcXFxcblxcXCIsXFxuNTc5NjpcXHRcXHRcXHQgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG41Nzk3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcImZhaWwgJWx1XFxcXG5cXFwiLFxcbjU3OTg6XFx0XFx0XFx0ICAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9GQUlMXSkpO1xcbjU3OTk6XFx0XFxuNTgwMDpcXHRcXHRyZXR1cm4gMDtcXG41ODAxOlxcdH1cXG41ODAyOlxcdFxcbjU4MDM6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbjU4MDQ6XFx0XFx0e1xcbjU4MDU6XFx0XFx0XFx0Lm5hbWUgPSBcXFwic3dhcC5jdXJyZW50XFxcIixcXG41ODA2OlxcdFxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG41ODA3OlxcdFxcdFxcdC5yZWFkX3U2NCA9IHN3YXBfY3VycmVudF9yZWFkLFxcbjU4MDg6XFx0XFx0fSxcXG41ODA5OlxcdFxcdHtcXG41ODEwOlxcdFxcdFxcdC5uYW1lID0gXFxcInN3YXAuaGlnaFxcXCIsXFxuNTgxMTpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuNTgxMjpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX2hpZ2hfc2hvdyxcXG41ODEzOlxcdFxcdFxcdC53cml0ZSA9IHN3YXBfaGlnaF93cml0ZSxcXG41ODE0OlxcdFxcdH0sXFxuNTgxNTpcXHRcXHR7XFxuNTgxNjpcXHRcXHRcXHQubmFtZSA9IFxcXCJzd2FwLm1heFxcXCIsXFxuNTgxNzpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuNTgxODpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX21heF9zaG93LFxcbjU4MTk6XFx0XFx0XFx0LndyaXRlID0gc3dhcF9tYXhfd3JpdGUsXFxuNTgyMDpcXHRcXHR9LFxcbjU4MjE6XFx0XFx0e1xcbjU4MjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwic3dhcC5wZWFrXFxcIixcXG41ODIzOlxcdFxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG41ODI0OlxcdFxcdFxcdC5vcGVuID0gcGVha19vcGVuLFxcbjU4MjU6XFx0XFx0XFx0LnJlbGVhc2UgPSBwZWFrX3JlbGVhc2UsXFxuNTgyNjpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcXG41ODI3OlxcdFxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG41ODI4OlxcdFxcdH0sXFxuNTgyOTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjE3LjgzMTI1NTE2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkxMzUyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSB3cmFwcGVkIGluIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgIG9yIGEgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzd2FwIGZlYXR1cmUgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbC4gSWYgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQncyBhY3RpdmUuIEkgaGF2ZSB0byB2ZXJpZnkgaWYgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZSBpc3N1ZXMgdW5kZXIgc29tZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjIwLjYyMjYxMDAwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTg5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01Nzg5PXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTgwMi1cXG5tbS9tZW1jb250cm9sLmM6NTgwMzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTU4MDQtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OTg9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE0LVxcbm1tL21lbWNvbnRyb2wuYzo2MDE1OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTYwMTYtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMzY9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDQwLVxcbm1tL21lbWNvbnRyb2wuYzo2MDQxOlxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jLTYwNDItI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNDUtI2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYzo2MDQ2OlxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCB6c3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYy02MDQ3LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyMC43MjM2MDYzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NTU3NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgYG1lbV9jZ3JvdXBfc3dhcF9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IGlmIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBgI2lmYCBvciBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGl0cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLiBLbm93aW5nIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHNvbWUgcHJlcHJvY2Vzc29yIGZsYWcgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgd2hlcmUgaXQgbWlnaHQgYmUgYWN0aXZlIG9yIGluYWN0aXZlIGluIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAgZm9yIG1lIHdoZW4gdHJhY2tpbmcgZG93biB0aGUgYmVoYXZpb3Igb2YgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNC4wMDkxODY4NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc3MzM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTYwMTU9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDM1LVxcbm1tL21lbWNvbnRyb2wuYzo2MDM2OnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxubW0vbWVtY29udHJvbC5jLTYwMzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNDktfVxcbm1tL21lbWNvbnRyb2wuYzo2MDUwOnN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxubW0vbWVtY29udHJvbC5jLTYwNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjI0LjE2Mzk2NjQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAyMTc5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgZm9yIFN3YXAgSW5pdGlhbGl6YXRpb24gR3VhcmQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBhbiBgI2lmZGVmIENPTkZJR19TV0FQYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdyYXBwaW5nIGl0LiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgc3dhcCBpbml0aWFsaXphdGlvbiBpcyBjb25kaXRpb25hbCBvbiBzd2FwIGJlaW5nIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gSSBjYW4ndCBpbWFnaW5lIHRoaXMgY29kZSBleGVjdXRpbmcgaWYgc3dhcCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkLiBEb2luZyBzbyB3b3VsZCBsaWtlbHkgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIG91dHJpZ2h0IGNyYXNoZXMuIEl04oCZcyBiZXN0IHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvbXBpbGVzIGNvcnJlY3RseSBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBhdm9pZHMgaGVhZGFjaGVzIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMga2VlcHMgbWUgZnJvbSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNy40OTQxODc0NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDIwOlxcdFxcdH0sXFxuNjAyMTpcXHRcXHR7XFxuNjAyMjpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6c3dhcC5tYXhcXFwiLFxcbjYwMjM6XFx0XFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbjYwMjQ6XFx0XFx0XFx0LnNlcV9zaG93ID0genN3YXBfbWF4X3Nob3csXFxuNjAyNTpcXHRcXHRcXHQud3JpdGUgPSB6c3dhcF9tYXhfd3JpdGUsXFxuNjAyNjpcXHRcXHR9LFxcbjYwMjc6XFx0XFx0e1xcbjYwMjg6XFx0XFx0XFx0Lm5hbWUgPSBcXFwienN3YXAud3JpdGViYWNrXFxcIixcXG42MDI5OlxcdFxcdFxcdC5zZXFfc2hvdyA9IHpzd2FwX3dyaXRlYmFja19zaG93LFxcbjYwMzA6XFx0XFx0XFx0LndyaXRlID0genN3YXBfd3JpdGViYWNrX3dyaXRlLFxcbjYwMzE6XFx0XFx0fSxcXG42MDMyOlxcdFxcdHsgfVxcdC8qIHRlcm1pbmF0ZSAqL1xcbjYwMzM6XFx0fTtcXG42MDM0OlxcdCNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cXG42MDM1OlxcdFxcbjYwMzY6XFx0c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG42MDM3OlxcdHtcXG42MDM4OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuNjAzOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG42MDQwOlxcdFxcbjYwNDE6XFx0XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG42MDQyOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG42MDQzOlxcdFxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbjYwNDQ6XFx0I2VuZGlmXFxuNjA0NTpcXHQjaWZkZWYgQ09ORklHX1pTV0FQXFxuNjA0NjpcXHRcXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcXG42MDQ3OlxcdCNlbmRpZlxcbjYwNDg6XFx0XFx0cmV0dXJuIDA7XFxuNjA0OTpcXHR9XFxuNjA1MDpcXHRzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbjYwNTE6XFx0XFxuNjA1MjpcXHQjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG42MDUzOlxcdFxcbjYwNTQ6XFx0dm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBub2RlbWFza190ICptYXNrKVxcbjYwNTU6XFx0e1xcbjYwNTY6XFx0XFx0bm9kZW1hc2tfdCBhbGxvd2VkO1xcbjYwNTc6XFx0XFxuNjA1ODpcXHRcXHRpZiAoIW1lbWNnKVxcbjYwNTk6XFx0XFx0XFx0cmV0dXJuO1xcbjYwNjA6XFx0XFxuNjA2MTpcXHRcXHQvKlxcbjYwNjI6XFx0XFx0ICogU2luY2UgdGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBtaWdyYXRpb24gcGF0aHMsIGFuZFxcbjYwNjM6XFx0XFx0ICogcmVjbGFpbSBhbmQgbWlncmF0aW9uIGFyZSBzdWJqZWN0IHRvIHJhY2UgY29uZGl0aW9ucyBzdWNoIGFzIGNoYW5nZXNcXG42MDY0OlxcdFxcdCAqIGluIGVmZmVjdGl2ZV9tZW1zIGFuZCBob3QtdW5wbHVnaW5nIG9mIG5vZGVzLCBpbmFjY3VyYXRlIGFsbG93ZWRcXG42MDY1OlxcdFxcdCAqIG1hc2sgaXMgYWNjZXB0YWJsZS5cXG42MDY2OlxcdFxcdCAqL1xcbjYwNjc6XFx0XFx0Y3B1c2V0X25vZGVzX2FsbG93ZWQobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZhbGxvd2VkKTtcXG42MDY4OlxcdFxcdG5vZGVzX2FuZCgqbWFzaywgKm1hc2ssIGFsbG93ZWQpO1xcbjYwNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNy40OTQ1MTcyNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0ODMyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc3BvdCBgI2VuZGlmIC8qIENPTkZJR19TV0FQICovYCB3YXkgZG93biB0aGVyZSBhdCBsaW5lIDYwNTIuIFJpZ2h0LCBzbyB0aGF0IHRlbGxzIG1lIGBzd2FwX3BlYWtfd3JpdGVgIGRlZmluaXRlbHkgcmVxdWlyZXMgYENPTkZJR19TV0FQYCB0byBiZSBkZWZpbmVkLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgbWVtb3J5X3BlYWtfd3JpdGVgLiBJdCdzIHJlbGF0ZWQgdG8gYG1lbW9yeV9maWxlc2AsIHNvIEknbGwgcXVpY2tseSB0cmFjZSB3aGVyZSBgbWVtb3J5X2ZpbGVzYCBpcyBhY3R1YWxseSBhZGRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODozMS4yNDI4NDIyODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODU5NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MDAzPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMTUtXFxubW0vbWVtY29udHJvbC5jOjUwMTY6c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTUwMTctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwOTA9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMDAtXFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXFxubW0vbWVtY29udHJvbC5jOjUxMDE6XFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYy01MTAyLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MzEuMzUxNDQzNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDExODMwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwZWFrIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cHMuIEkgc2VlIHRoYXQgYG1lbW9yeV9maWxlc2AgaXMgYWx3YXlzIGFkZGVkIGlmIGBNRU1DR2AgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgaXMgZW5hYmxlZC4gU28sIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGNvbnNpZGVyLCBhbmQgYFNXQVBgIChTd2FwKSBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGlzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYFNXQVBgIGlzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLlxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGVha193cml0ZWAsIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIHdpdGhpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uIFRoaXMgbWVhbnMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzb21ldGhpbmcgdGhhdCBhZmZlY3RzIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQ6IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMnIGNoYXJhY3RlcmlzdGljcy4gVGhleSAqYXJlKiBzdGF0aWMuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGd1aWRhbmNlOiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXWAgYW5kIGBzd2FwX2ZpbGVzW11gIHN0cnVjdHVyZXMuIFNvLCBubywgdGhleSBhcmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCEgVGhleSBhcmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMsIHNvIHRoYXQncyBnb29kLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBjZ3JvdXAgY29yZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBwZXJmZWN0LiBTbywgSSB3aWxsIGxpc3QgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGBwZWFrX3dyaXRlYCBhbmQgdGhlbiBJJ20gbGlzdGluZyBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC5cblxuSSdtIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgYW5kIHllcywgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBTV0FQYCBpcyBjcnVjaWFsIGZvciBgc3dhcF9wZWFrX3dyaXRlYC4gU28sIEknbGwgZGVmaW5pdGVseSBsaXN0IGBNRU1DR2AgYW5kIGBTV0FQYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbW9yeS5wZWFrYCBpcyBwYXJ0IG9mIGNncm91cCB2Mi4gWWVzLCBgbWVtb3J5X2ZpbGVzYCBpcyBwYXJ0IG9mIGBkZmxfY2Z0eXBlc2AsIHdoaWNoIGlzIHRoZSBjZ3JvdXAgdjIgZnJhbWV3b3JrLiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnPyBOby5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBpcyB0aGUgd3JpdGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIGluIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbS4gSXQncyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgaXMgdXBkYXRlZCBmb3Igd2F0Y2hlcnMsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuIFRoaXMgY2hhbmdlIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgZmlsZXMuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYE1FTUNHYCBhbmQgYFNXQVBgLlxuXG5JJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjQyLjE1MjYyOTgyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbjQ2ODM6XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG40Njg0OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuNDY4NTpcXHR7XFxuNDY4NjpcXHRcXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xcbjQ2ODc6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG40Njg4OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDY4OTpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ2OTA6XFx0XFxuNDY5MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG40NjkyOlxcdFxcbjQ2OTM6XFx0XFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XFxuNDY5NDpcXHRcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbjQ2OTU6XFx0XFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuNDY5NjpcXHRcXG40Njk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbjQ2OTg6XFx0XFx0XFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcXHUwMDI2XFx1MDAyNiBvbGRfd2F0ZXJtYXJrIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbjQ2OTk6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbjQ3MDA6XFx0XFxuNDcwMTpcXHRcXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXFxuNDcwMjpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG40NzAzOlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZvZnAtXFx1MDAzZWxpc3QsIHdhdGNoZXJzKTtcXG40NzA0OlxcdFxcbjQ3MDU6XFx0XFx0V1JJVEVfT05DRShvZnAtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuNDcwNjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3MDc6XFx0XFxuNDcwODpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjQ3MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODo0Mi4xNTI5MTM1ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMjAzODc2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlByZWNpc2UgSW1wbGVtZW50YXRpb24gQ29uZmlybWF0aW9uIFx1MDAyNiBOZXh0IExvZ2ljYWwgU3RlcCoqXG5cblJpZ2h0LCB0aGUgaW1wbGVtZW50YXRpb24gYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9ucy4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBXaXRoIHRoYXQgY29uZmlybWVkLCBpdCdzIGNsZWFyIHdoYXQgbmVlZHMgdG8gaGFwcGVuIG5leHQ6IEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0J3MgdGhlIG5hdHVyYWwgcHJvZ3Jlc3Npb24gYWZ0ZXIgdmFsaWRhdGlvbiBhbmQgY29uZmlybXMgdGhlIG5leHQgbG9naWNhbCBmdW5jdGlvbiB0byB0cmlnZ2VyLiBObyBuZWVkIHRvIG92ZXJ0aGluayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzEsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODo1My4yNzMzMDQ4NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyMjQzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3BlYWtfd3JpdGVcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGNncm91cCB2MiBmaWxlcy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgZm9yIHVwZGF0aW5nIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgZm9yIHdhdGNoZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGNncm91cCBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9wZWFrX3dyaXRlXCIsXG4gICAgXCJzd2FwX3BlYWtfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 00:57:44 +0000 UTC FinishedAt: 2026-08-01 01:28:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "SWAP" ], "series_id": "337907d8-d612-4fa7-b5ab-1ae93abe97cf" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_peak_write", "swap_peak_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2NmZDVkYmMwOTJmZGI5ZGYwMGY0NTBhODc4ODY4NTA5ZTg2NzJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDE6Mjc6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmNcbkBAIC00NjgzLDcgJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdFx0XHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxuIFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB1c2FnZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ2OTEsMTEgJiM0Mzs0NjkxLDEyIEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRzcGluX2xvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG4gXG4gXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcbiYjNDM7XHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyayk7XG4gXHRXUklURV9PTkNFKHBjLVx1MDAzZWxvY2FsX3dhdGVybWFyaywgdXNhZ2UpO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyX2N0eCwgd2F0Y2hlcnMsIGxpc3QpXG4tXHRcdGlmICh1c2FnZSBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4tXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgdXNhZ2UpO1xuJiM0MztcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4mIzQzO1x0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xuIFxuIFx0LyogaW5pdGlhbCB3cml0ZSwgcmVnaXN0ZXIgd2F0Y2hlciAqL1xuIFx0aWYgKG9mcC1cdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3dyaXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzY2ZkNWRiYzA5MmZkYjlkZjAwZjQ1MGE4Nzg4Njg1MDllODY3MmMyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAwMToyNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00NjgzLDcgJiM0Mzs0NjgzLDcgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKIAkJCSAgbG9mZl90IG9mZiwgc3RydWN0IHBhZ2VfY291bnRlciAqcGMsCiAJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKQogewotCXVuc2lnbmVkIGxvbmcgdXNhZ2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7CiAJc3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOwogCXN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7CkBAIC00NjkxLDExICYjNDM7NDY5MSwxMiBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCXNwaW5fbG9jaygmYW1wO21lbWNnLSZndDtwZWFrc19sb2NrKTsKIAogCXVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpOwomIzQzOwlvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLSZndDtsb2NhbF93YXRlcm1hcmspOwogCVdSSVRFX09OQ0UocGMtJmd0O2xvY2FsX3dhdGVybWFyaywgdXNhZ2UpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwZWVyX2N0eCwgd2F0Y2hlcnMsIGxpc3QpCi0JCWlmICh1c2FnZSAmZ3Q7IHBlZXJfY3R4LSZndDt2YWx1ZSkKLQkJCVdSSVRFX09OQ0UocGVlcl9jdHgtJmd0O3ZhbHVlLCB1c2FnZSk7CiYjNDM7CQlpZiAocGVlcl9jdHggIT0gb2ZwICZhbXA7JmFtcDsgb2xkX3dhdGVybWFyayAmZ3Q7IHBlZXJfY3R4LSZndDt2YWx1ZSkKJiM0MzsJCQlXUklURV9PTkNFKHBlZXJfY3R4LSZndDt2YWx1ZSwgb2xkX3dhdGVybWFyayk7CiAKIAkvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovCiAJaWYgKG9mcC0mZ3Q7dmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IENvbnRyb2wgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgcGVha193cml0ZWAgZnVuY3Rpb24uIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBgcGVha193cml0ZWAgaXMgYWxsIGFib3V0IHRyYWNraW5nIHBlYWsgbWVtb3J5IHVzYWdlLCB3aGljaCBpcyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBmb3IgdHVuaW5nLiBJIHNlZSB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgYHBlZXJfY3R4LSZndDt2YWx1ZWAgaXMgdXBkYXRlZC4KCk9yaWdpbmFsbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uOiBpZiB0aGUgY3VycmVudCB1c2FnZSAoYHVzYWdlYCkgd2FzIGhpZ2hlciB0aGFuIHRoZSBleGlzdGluZyBwZWFrIChgcGVlcl9jdHgtJmd0O3ZhbHVlYCksIHRoZW4gdXBkYXRlIHRoZSBwZWFrLiBQcmV0dHkgc3RhbmRhcmQuCgpOb3csIGl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBhIGJpdCBtb3JlIG51YW5jZWQuIEl0JiMzOTtzIGNvbXBhcmluZyBhbiBgb2xkX3dhdGVybWFya2AgdmFsdWUgYWdhaW5zdCB0aGUgZXhpc3RpbmcgcGVhaywgYnV0IG9ubHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgYGlmYCBzdGF0ZW1lbnQgdGVsbHMgbWUgdGhhdCBpdCYjMzk7cyB1c2luZyBgb2xkX3dhdGVybWFya2AgYW5kIHRoYXQgaXQgd2lsbCBzZXQgYHBlZXJfY3R4LSZndDt2YWx1ZWAgdG8gaXQgd2hlbiBgcGVlcl9jdHhgIGlzIG5vdCBgb2ZwYCBhbmQgYG9sZF93YXRlcm1hcmtgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgcGVhayBtZW1vcnkgdXNhZ2Ugc3RvcmVkIGluIGBwZWVyX2N0eC0mZ3Q7dmFsdWVgLgoKVGhpcyBtYWtlcyBtZSB3YW50IHRvIGRpdmUgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgb2xkX3dhdGVybWFya2AsIGFuZCB0aGUgbWVhbmluZyBvZiBgb2ZwYC4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIHVwZGF0ZT8gSXMgdGhpcyBhYm91dCBwcmV2ZW50aW5nIGZsdWN0dWF0aW9ucywgc21vb3RoaW5nIG91dCB0aGUgcGVhaywgb3IgZGVhbGluZyB3aXRoIHNvbWUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgcmVzdCBvZiBgcGVha193cml0ZWAgYW5kIHBvc3NpYmx5IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZWFrX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00NjY4PXN0YXRpYyB2b2lkIHBlYWtfcmVsZWFzZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2ODEtXG5tbS9tZW1jb250cm9sLmM6NDY4MjpzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxubW0vbWVtY29udHJvbC5jLTQ2ODMtXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxMC1cbm1tL21lbWNvbnRyb2wuYzo0NzExOnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxubW0vbWVtY29udHJvbC5jLTQ3MTItXHRcdFx0XHQgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmMtNDcxNS1cbm1tL21lbWNvbnRyb2wuYzo0NzE2Olx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeSxcbm1tL21lbWNvbnRyb2wuYy00NzE3LVx0XHRcdCAgXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X3BlYWtzKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTAxNj1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTAyNy1cdFx0LnNlcV9zaG93ID0gbWVtb3J5X3BlYWtfc2hvdyxcbm1tL21lbWNvbnRyb2wuYzo1MDI4Olx0XHQud3JpdGUgPSBtZW1vcnlfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01MDI5LVx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzMtXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNTczNS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTczOC1cbm1tL21lbWNvbnRyb2wuYzo1NzM5Olx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsXG5tbS9tZW1jb250cm9sLmMtNTc0MC1cdFx0XHQgIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXBfcGVha3MpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTgyNi1cdFx0LnNlcV9zaG93ID0gc3dhcF9wZWFrX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTgyNzpcdFx0LndyaXRlID0gc3dhcF9wZWFrX3dyaXRlLFxubW0vbWVtY29udHJvbC5jLTU4MjgtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGVha193cml0ZWAgRnVuY3Rpb24mIzM5O3MgVXNhZ2UqKgoKT2theSwgc28gYHBlYWtfd3JpdGVgIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGVyZSYjMzk7cyBhIHdyaXRlIG9wZXJhdGlvbiB0byBlaXRoZXIgdGhlIGBtZW1vcnkucGVha2Agb3IgYHN3YXAucGVha2AgZmlsZXMgd2l0aGluIGEgY2dyb3VwLiBTcGVjaWZpY2FsbHksIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgIGFyZSB0aGUgaGFuZGxlcnMgdGhhdCBnZXQgdGhlIGJhbGwgcm9sbGluZy4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBhcHByb2FjaCBpcyBmdW5kYW1lbnRhbGx5IHNvdW5kIGFuZCB0aGF0IGNncm91cGZzIGlzIHRoZSBpbnRlbmRlZCBpbnRlcmZhY2UuIE5vdywgSSYjMzk7bSBnb2luZyB0byBzaGlmdCBnZWFycyBhbmQgZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZWxhdGVkIHRvIGBtZW1jb250cm9sYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBwcm9wZXIgbWVtY29udHJvbCBzZXR0aW5ncyBhcmUgaW4gcGxhY2UgdG8gc3VwcG9ydCB0aGVzZSBwZWFrIHdyaXRlIG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpIbW0sIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IEkmIzM5O3ZlIGdvdCB0aGlzIHByb2JsZW0gdG8gc29sdmUsIGFuZCBpdCBmZWVscyBsaWtlIGl0JiMzOTtzIGNvbm5lY3RlZCB0byBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkLiBSaWdodCwgdGhhdCBtYWtlcyBtZSB0aGluay4uLiBtYXliZSB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUga2V5IHRvIHVubG9jayB0aGUgYW5zd2VyLiBJdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgdGhpcyBpc3N1ZSBiYWNrIHRvIGl0cyBzb3VyY2UuIFRoZSBLY29uZmlnIHN5c3RlbSBpcyB2YXN0LCBidXQgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHByb2JsZW1zIHJlbGF0ZWQgdG8gc3lzdGVtIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBpdCBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTIzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIG1lbW9yeSBjb250cm9sbGVyIGlzIHNldCB1cCwgc3BlY2lmaWNhbGx5IHVzaW5nIGBNRU1DR2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdGFydCB3aXRoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHBlYWsgbWVtb3J5IHRyYWNraW5nLiBTaW5jZSBgcGVha193cml0ZWAgaXMgZmxhZ2dlZCBhcyBhIHN0YXRpYyBoZWxwZXIsIEkmIzM5O20gY29uZmlkZW50IHRob3NlIGFyZSB0aGUgdG9wLWxldmVsIGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gZXhhbWluZS4KCk5vdywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNvbnNpZGVyaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQsIHNpbmNlIGBNRU1DR2AgcmVsaWVzIG9uIGl0LiBUbyBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZywgSSYjMzk7bGwgZ28gY2hlY2sgYGluaXQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGlyZWN0IG9yIGluZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgYE1FTUNHYCB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJIG5lZWQgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBkaWdnaW5nIGRlZXBlciBpbnRvIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNzQ9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwODMtXG5pbml0L0tjb25maWc6MTA4NDpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDg1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwNi1cbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDgtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIHRoZSBNRU1DRyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgaW5pdGlhbGl6YXRpb24gY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGBpbml0L0tjb25maWdgLCBhbmQgemVybyBpbiBvbiB0aGUgYGNvbmZpZyBNRU1DR2Agb3B0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gSSBrbm93IHRoZSBjb3JlIGxvZ2ljIGlzIGluIHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdyYXNwIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIHNoaWZ0cyBpbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIGhvdyB0aGV5IHRpZSBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGluZnJhc3RydWN0dXJlLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgS2NvbmZpZyBvcHRpb25zLCBzdWNoIGFzIE5VTUEgc3VwcG9ydCwgcGFnZSBtaWdyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBldmVuIGVhcmx5IG1lbW9yeSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuIEFueSB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBjb3VsZCBjb21wbGljYXRlIGxhdGVyIGFuYWx5c2lzLCBzbyB0aG9yb3VnaG5lc3MgaXMga2V5LiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGF0aHMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgYW5kIHJ1bGUgb3V0IHdoYXQgSSBjYW4uIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGNvbW1lbnRzIGluIHRoZSBmaWxlIG9yIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgxOlx0XG4xMDgyOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODM6XHRcbjEwODQ6XHRjb25maWcgTUVNQ0dcbjEwODU6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODY6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODc6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg4Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDg5Olx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTA6XHRcdGhlbHBcbjEwOTE6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MjpcdFxuMTA5MzpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk0Olx0XHRib29sXG4xMDk1Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk2Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk3Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5ODpcdFx0ZGVmYXVsdCB5XG4xMDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6CgoqKk1lbWNnIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCkFscmlnaHQsIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTUVNQ0dgIGlzIHRoZSBvbmx5IGNvbmZpZyBJJiMzOTtsbCBuZWVkLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB0aGUgYmFzZSBlbmFibGluZyBvcHRpb24gZm9yIG1lbW9yeSBjb250cm9sIGdyb3Vwcy4gQnV0Li4uIHdhaXQgYSBzZWNvbmQsIHRoYXQgbmFnZ2luZyBmZWVsaW5nLiBUaGUgYHN3YXBfcGVha193cml0ZWAgZnVuY3Rpb24uLi4gSSB2YWd1ZWx5IHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgdGhhdCBpbnRlcmFjdGlvbi4gQ291bGQgaXQgcmVxdWlyZSBgTUVNQ0dfU1dBUGAgdG9vPyBCZXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBkb3VibGUgY2hlY2suIExldCYjMzk7cyBkaXZlIHJpZ2h0IGludG8gYG1tL21lbWNvbnRyb2wuY2AuIEkmIzM5O2xsIHplcm8gaW4gYXJvdW5kIHRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhcm91bmQgaXQgYW5kIHZlcmlmeSB3aGV0aGVyIG9yIG5vdCBgTUVNQ0dfU1dBUGAgcGxheXMgYSBwYXJ0IGluIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtsbCBjbGVhciB1cCBhbnkgZG91YnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTU3MzMtXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG5tbS9tZW1jb250cm9sLmMtNTczNS1cdFx0XHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcbi0tXG5tbS9tZW1jb250cm9sLmM9NTgwMz1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4MjYtXHRcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxubW0vbWVtY29udHJvbC5jOjU4Mjc6XHRcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcbm1tL21lbWNvbnRyb2wuYy01ODI4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SG1tLCB3aGVyZSBpcyB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBkZWZpbmVkPyBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgdHVja2VkIGF3YXkgYmVoaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlLCBwcm9iYWJseSByZWxhdGVkIHRvIHN3YXAgZnVuY3Rpb25hbGl0eS4mIzM0OyBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgLCBvciBhIHNpbWlsYXIgbWFjcm8gdGhhdCBjb250cm9scyB0aGUgaW5jbHVzaW9uIG9mIHN3YXAtcmVsYXRlZCBjb2RlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGNoZWNrLiBJdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBwYXR0ZXJuLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIHN0YXJ0IHRoZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3MzA6XHRcbjU3MzE6XHRcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFx1MDAyNm1lbWNnLVx1MDAzZXN3YXApO1xuNTczMjpcdH1cbjU3MzM6XHRcbjU3MzQ6XHRzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG41NzM1Olx0XHRcdFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41NzM2Olx0e1xuNTczNzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3Mzg6XHRcbjU3Mzk6XHRcdHJldHVybiBwZWFrX3dyaXRlKG9mLCBidWYsIG5ieXRlcywgb2ZmLCBcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLFxuNTc0MDpcdFx0XHRcdCAgXHUwMDI2bWVtY2ctXHUwMDNlc3dhcF9wZWFrcyk7XG41NzQxOlx0fVxuNTc0MjpcdFxuNTc0MzpcdHN0YXRpYyBpbnQgc3dhcF9oaWdoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTc0NDpcdHtcbjU3NDU6XHRcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXG41NzQ2Olx0XHRcdFJFQURfT05DRShtZW1fY2dyb3VwX2Zyb21fc2VxKG0pLVx1MDAzZXN3YXAuaGlnaCkpO1xuNTc0NzpcdH1cbjU3NDg6XHRcbjU3NDk6XHRzdGF0aWMgc3NpemVfdCBzd2FwX2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuNTc1MDpcdFx0XHRcdCAgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41NzUxOlx0e1xuNTc1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3NTM6XHRcdHVuc2lnbmVkIGxvbmcgaGlnaDtcbjU3NTQ6XHRcdGludCBlcnI7XG41NzU1Olx0XG41NzU2Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuNTc1NzpcdFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXCYjMzQ7bWF4XCYjMzQ7LCBcdTAwMjZoaWdoKTtcbjU3NTg6XHRcdGlmIChlcnIpXG41NzU5Olx0XHRcdHJldHVybiBlcnI7XG41NzYwOlx0XG41NzYxOlx0XHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgaGlnaCk7XG41NzYyOlx0XG41NzYzOlx0XHRyZXR1cm4gbmJ5dGVzO1xuNTc2NDpcdH1cbjU3NjU6XHRcbjU3NjY6XHRzdGF0aWMgaW50IHN3YXBfbWF4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTc2NzpcdHtcbjU3Njg6XHRcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXG41NzY5Olx0XHRcdFJFQURfT05DRShtZW1fY2dyb3VwX2Zyb21fc2VxKG0pLVx1MDAzZXN3YXAubWF4KSk7XG41NzcwOlx0fVxuNTc3MTpcdFxuNTc3MjpcdHN0YXRpYyBzc2l6ZV90IHN3YXBfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbjU3NzM6XHRcdFx0XHQgICAgICBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG41Nzc0Olx0e1xuNTc3NTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcbjU3NzY6XHRcdHVuc2lnbmVkIGxvbmcgbWF4O1xuNTc3NzpcdFx0aW50IGVycjtcbjU3Nzg6XHRcbjU3Nzk6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG41NzgwOlx0XHRlcnIgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCBcJiMzNDttYXhcJiMzNDssIFx1MDAyNm1heCk7XG41NzgxOlx0XHRpZiAoZXJyKVxuNTc4MjpcdFx0XHRyZXR1cm4gZXJyO1xuNTc4MzpcdFxuNTc4NDpcdFx0eGNoZyhcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLm1heCwgbWF4KTtcbjU3ODU6XHRcbjU3ODY6XHRcdHJldHVybiBuYnl0ZXM7XG41Nzg3Olx0fVxuNTc4ODpcdFxuNTc4OTpcdHN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41NzkwOlx0e1xuNTc5MTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbjU3OTI6XHRcbjU3OTM6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7aGlnaCAlbHVcXG5cJiMzNDssXG41Nzk0Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX0hJR0hdKSk7XG41Nzk1Olx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O21heCAlbHVcXG5cJiMzNDssXG41Nzk2Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbjU3OTc6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7ZmFpbCAlbHVcXG5cJiMzNDssXG41Nzk4Olx0XHRcdCAgIGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX0ZBSUxdKSk7XG41Nzk5Olx0XG41ODAwOlx0XHRyZXR1cm4gMDtcbjU4MDE6XHR9XG41ODAyOlx0XG41ODAzOlx0c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xuNTgwNDpcdFx0e1xuNTgwNTpcdFx0XHQubmFtZSA9IFwmIzM0O3N3YXAuY3VycmVudFwmIzM0OyxcbjU4MDY6XHRcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuNTgwNzpcdFx0XHQucmVhZF91NjQgPSBzd2FwX2N1cnJlbnRfcmVhZCxcbjU4MDg6XHRcdH0sXG41ODA5Olx0XHR7XG41ODEwOlx0XHRcdC5uYW1lID0gXCYjMzQ7c3dhcC5oaWdoXCYjMzQ7LFxuNTgxMTpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG41ODEyOlx0XHRcdC5zZXFfc2hvdyA9IHN3YXBfaGlnaF9zaG93LFxuNTgxMzpcdFx0XHQud3JpdGUgPSBzd2FwX2hpZ2hfd3JpdGUsXG41ODE0Olx0XHR9LFxuNTgxNTpcdFx0e1xuNTgxNjpcdFx0XHQubmFtZSA9IFwmIzM0O3N3YXAubWF4XCYjMzQ7LFxuNTgxNzpcdFx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG41ODE4Olx0XHRcdC5zZXFfc2hvdyA9IHN3YXBfbWF4X3Nob3csXG41ODE5Olx0XHRcdC53cml0ZSA9IHN3YXBfbWF4X3dyaXRlLFxuNTgyMDpcdFx0fSxcbjU4MjE6XHRcdHtcbjU4MjI6XHRcdFx0Lm5hbWUgPSBcJiMzNDtzd2FwLnBlYWtcJiMzNDssXG41ODIzOlx0XHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbjU4MjQ6XHRcdFx0Lm9wZW4gPSBwZWFrX29wZW4sXG41ODI1Olx0XHRcdC5yZWxlYXNlID0gcGVha19yZWxlYXNlLFxuNTgyNjpcdFx0XHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcbjU4Mjc6XHRcdFx0LndyaXRlID0gc3dhcF9wZWFrX3dyaXRlLFxuNTgyODpcdFx0fSxcbjU4Mjk6XHRcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQxMAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSB3cmFwcGVkIGluIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgIG9yIGEgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzd2FwIGZlYXR1cmUgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbC4gSWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBpbmNsdWRlZCwgSSBuZWVkIHRvIGtub3cgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0JiMzOTtzIGFjdGl2ZS4gSSBoYXZlIHRvIHZlcmlmeSBpZiB0aGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB1bmRlciBzb21lIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9maWxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NTc4OT1zdGF0aWMgaW50IHN3YXBfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODAyLVxubW0vbWVtY29udHJvbC5jOjU4MDM6c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xubW0vbWVtY29udHJvbC5jLTU4MDQtXHR7XG4tLVxubW0vbWVtY29udHJvbC5jPTU5OTg9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAxNC1cbm1tL21lbWNvbnRyb2wuYzo2MDE1OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNjAxNi1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjAzNj1zdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy02MDQwLVxubW0vbWVtY29udHJvbC5jOjYwNDE6XHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XG5tbS9tZW1jb250cm9sLmMtNjA0Mi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4tLVxubW0vbWVtY29udHJvbC5jLTYwNDUtI2lmZGVmIENPTkZJR19aU1dBUFxubW0vbWVtY29udHJvbC5jOjYwNDY6XHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCB6c3dhcF9maWxlcykpO1xubW0vbWVtY29udHJvbC5jLTYwNDctI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGludG8gdGhlIGNvZGU6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBmb3IgYCNpZmAgb3IgYCNpZmRlZmAgZGlyZWN0aXZlcyBzdXJyb3VuZGluZyBpdHMgZGVjbGFyYXRpb24gb3IgZGVmaW5pdGlvbi4gS25vd2luZyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYmFzZWQgb24gc29tZSBwcmVwcm9jZXNzb3IgZmxhZyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wYWN0IGFuZCB3aGVyZSBpdCBtaWdodCBiZSBhY3RpdmUgb3IgaW5hY3RpdmUgaW4gZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGlzIGEgc3RhbmRhcmQgZmlyc3Qgc3RlcCBmb3IgbWUgd2hlbiB0cmFja2luZyBkb3duIHRoZSBiZWhhdmlvciBvZiBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3IgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9zd2FwX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTYwMTU9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzNS1cbm1tL21lbWNvbnRyb2wuYzo2MDM2OnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG5tbS9tZW1jb250cm9sLmMtNjAzNy17XG4tLVxubW0vbWVtY29udHJvbC5jLTYwNDktfVxubW0vbWVtY29udHJvbC5jOjYwNTA6c3Vic3lzX2luaXRjYWxsKG1lbV9jZ3JvdXBfc3dhcF9pbml0KTtcbm1tL21lbWNvbnRyb2wuYy02MDUxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBmb3IgU3dhcCBJbml0aWFsaXphdGlvbiBHdWFyZCoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUmIzM5O3MgYW4gYCNpZmRlZiBDT05GSUdfU1dBUGAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSB3cmFwcGluZyBpdC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gdGhhdCBzd2FwIGluaXRpYWxpemF0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIHN3YXAgYmVpbmcgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBJIGNhbiYjMzk7dCBpbWFnaW5lIHRoaXMgY29kZSBleGVjdXRpbmcgaWYgc3dhcCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkLiBEb2luZyBzbyB3b3VsZCBsaWtlbHkgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIG91dHJpZ2h0IGNyYXNoZXMuIEl04oCZcyBiZXN0IHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvbXBpbGVzIGNvcnJlY3RseSBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBhdm9pZHMgaGVhZGFjaGVzIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMga2VlcHMgbWUgZnJvbSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MDIwOlx0XHR9LFxuNjAyMTpcdFx0e1xuNjAyMjpcdFx0XHQubmFtZSA9IFwmIzM0O3pzd2FwLm1heFwmIzM0OyxcbjYwMjM6XHRcdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuNjAyNDpcdFx0XHQuc2VxX3Nob3cgPSB6c3dhcF9tYXhfc2hvdyxcbjYwMjU6XHRcdFx0LndyaXRlID0genN3YXBfbWF4X3dyaXRlLFxuNjAyNjpcdFx0fSxcbjYwMjc6XHRcdHtcbjYwMjg6XHRcdFx0Lm5hbWUgPSBcJiMzNDt6c3dhcC53cml0ZWJhY2tcJiMzNDssXG42MDI5Olx0XHRcdC5zZXFfc2hvdyA9IHpzd2FwX3dyaXRlYmFja19zaG93LFxuNjAzMDpcdFx0XHQud3JpdGUgPSB6c3dhcF93cml0ZWJhY2tfd3JpdGUsXG42MDMxOlx0XHR9LFxuNjAzMjpcdFx0eyB9XHQvKiB0ZXJtaW5hdGUgKi9cbjYwMzM6XHR9O1xuNjAzNDpcdCNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cbjYwMzU6XHRcbjYwMzY6XHRzdGF0aWMgaW50IF9faW5pdCBtZW1fY2dyb3VwX3N3YXBfaW5pdCh2b2lkKVxuNjAzNzpcdHtcbjYwMzg6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG42MDM5Olx0XHRcdHJldHVybiAwO1xuNjA0MDpcdFxuNjA0MTpcdFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgc3dhcF9maWxlcykpO1xuNjA0MjpcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbjYwNDM6XHRcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIG1lbXN3X2ZpbGVzKSk7XG42MDQ0Olx0I2VuZGlmXG42MDQ1Olx0I2lmZGVmIENPTkZJR19aU1dBUFxuNjA0NjpcdFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcbjYwNDc6XHQjZW5kaWZcbjYwNDg6XHRcdHJldHVybiAwO1xuNjA0OTpcdH1cbjYwNTA6XHRzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xuNjA1MTpcdFxuNjA1MjpcdCNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xuNjA1MzpcdFxuNjA1NDpcdHZvaWQgbWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgbm9kZW1hc2tfdCAqbWFzaylcbjYwNTU6XHR7XG42MDU2Olx0XHRub2RlbWFza190IGFsbG93ZWQ7XG42MDU3Olx0XG42MDU4Olx0XHRpZiAoIW1lbWNnKVxuNjA1OTpcdFx0XHRyZXR1cm47XG42MDYwOlx0XG42MDYxOlx0XHQvKlxuNjA2MjpcdFx0ICogU2luY2UgdGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBtaWdyYXRpb24gcGF0aHMsIGFuZFxuNjA2MzpcdFx0ICogcmVjbGFpbSBhbmQgbWlncmF0aW9uIGFyZSBzdWJqZWN0IHRvIHJhY2UgY29uZGl0aW9ucyBzdWNoIGFzIGNoYW5nZXNcbjYwNjQ6XHRcdCAqIGluIGVmZmVjdGl2ZV9tZW1zIGFuZCBob3QtdW5wbHVnaW5nIG9mIG5vZGVzLCBpbmFjY3VyYXRlIGFsbG93ZWRcbjYwNjU6XHRcdCAqIG1hc2sgaXMgYWNjZXB0YWJsZS5cbjYwNjY6XHRcdCAqL1xuNjA2NzpcdFx0Y3B1c2V0X25vZGVzX2FsbG93ZWQobWVtY2ctXHUwMDNlY3NzLmNncm91cCwgXHUwMDI2YWxsb3dlZCk7XG42MDY4Olx0XHRub2Rlc19hbmQoKm1hc2ssICptYXNrLCBhbGxvd2VkKTtcbjYwNjk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAxOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNwb3QgYCNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL2Agd2F5IGRvd24gdGhlcmUgYXQgbGluZSA2MDUyLiBSaWdodCwgc28gdGhhdCB0ZWxscyBtZSBgc3dhcF9wZWFrX3dyaXRlYCBkZWZpbml0ZWx5IHJlcXVpcmVzIGBDT05GSUdfU1dBUGAgdG8gYmUgZGVmaW5lZC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBtZW1vcnlfcGVha193cml0ZWAuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gYG1lbW9yeV9maWxlc2AsIHNvIEkmIzM5O2xsIHF1aWNrbHkgdHJhY2Ugd2hlcmUgYG1lbW9yeV9maWxlc2AgaXMgYWN0dWFsbHkgYWRkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtb3J5X2ZpbGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz01MDAzPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDE1LVxubW0vbWVtY29udHJvbC5jOjUwMTY6c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG5tbS9tZW1jb250cm9sLmMtNTAxNy1cdHtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTA5MD1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxMDAtXHQuZXhpdCA9IG1lbV9jZ3JvdXBfZXhpdCxcbm1tL21lbWNvbnRyb2wuYzo1MTAxOlx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxubW0vbWVtY29udHJvbC5jLTUxMDItI2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzIxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwZWFrIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cHMuIEkgc2VlIHRoYXQgYG1lbW9yeV9maWxlc2AgaXMgYWx3YXlzIGFkZGVkIGlmIGBNRU1DR2AgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgaXMgZW5hYmxlZC4gU28sIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGNvbnNpZGVyLCBhbmQgYFNXQVBgIChTd2FwKSBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGlzLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBTV0FQYCBpcyBvZnRlbiBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZC4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGVha193cml0ZWAsIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIHdpdGhpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uIFRoaXMgbWVhbnMgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc29tZXRoaW5nIHRoYXQgYWZmZWN0cyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZDogYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMmIzM5OyBjaGFyYWN0ZXJpc3RpY3MuIFRoZXkgKmFyZSogc3RhdGljLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBndWlkYW5jZTogUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhleSYjMzk7cmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdYCBhbmQgYHN3YXBfZmlsZXNbXWAgc3RydWN0dXJlcy4gU28sIG5vLCB0aGV5IGFyZSBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkISBUaGV5IGFyZSBjYWxsZWQgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycywgc28gdGhhdCYjMzk7cyBnb29kLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBjZ3JvdXAgY29yZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgcGVyZmVjdC4gU28sIEkgd2lsbCBsaXN0IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLgoKSSBicmllZmx5IGNvbnNpZGVyZWQgYHBlYWtfd3JpdGVgIGFuZCB0aGVuIEkmIzM5O20gbGlzdGluZyBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBhbmQgeWVzLCBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgdGhlIHByaW1hcnkgb25lLCBhbmQgYFNXQVBgIGlzIGNydWNpYWwgZm9yIGBzd2FwX3BlYWtfd3JpdGVgLiBTbywgSSYjMzk7bGwgZGVmaW5pdGVseSBsaXN0IGBNRU1DR2AgYW5kIGBTV0FQYC4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIGlmIGBtZW1vcnkucGVha2AgaXMgcGFydCBvZiBjZ3JvdXAgdjIuIFllcywgYG1lbW9yeV9maWxlc2AgaXMgcGFydCBvZiBgZGZsX2NmdHlwZXNgLCB3aGljaCBpcyB0aGUgY2dyb3VwIHYyIGZyYW1ld29yay4gSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZz8gTm8uCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHRoZSB3cml0ZSBoYW5kbGVyIGZvciB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgZmlsZXMgaW4gdGhlIGNncm91cCBmaWxlc3lzdGVtLiBJdCYjMzk7cyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgaXMgdXBkYXRlZCBmb3Igd2F0Y2hlcnMsIHNvIGl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyLiBUaGlzIGNoYW5nZSBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGZpbGVzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLiBBbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGFyZSBgTUVNQ0dgIGFuZCBgU1dBUGAuCgpJJiMzOTttIGp1c3QgcXVpY2tseSBjb25maXJtaW5nIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ2ODA6XHR9XG40NjgxOlx0XG40NjgyOlx0c3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbjQ2ODM6XHRcdFx0XHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxuNDY4NDpcdFx0XHRcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXG40Njg1Olx0e1xuNDY4NjpcdFx0dW5zaWduZWQgbG9uZyB1c2FnZSwgb2xkX3dhdGVybWFyaztcbjQ2ODc6XHRcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XG40Njg4Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpO1xuNDY4OTpcdFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpvZnAgPSBvZl9wZWFrKG9mKTtcbjQ2OTA6XHRcbjQ2OTE6XHRcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbjQ2OTI6XHRcbjQ2OTM6XHRcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuNDY5NDpcdFx0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuNDY5NTpcdFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbjQ2OTY6XHRcbjQ2OTc6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuNDY5ODpcdFx0XHRpZiAocGVlcl9jdHggIT0gb2ZwIFx1MDAyNlx1MDAyNiBvbGRfd2F0ZXJtYXJrIFx1MDAzZSBwZWVyX2N0eC1cdTAwM2V2YWx1ZSlcbjQ2OTk6XHRcdFx0XHRXUklURV9PTkNFKHBlZXJfY3R4LVx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcbjQ3MDA6XHRcbjQ3MDE6XHRcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cbjQ3MDI6XHRcdGlmIChvZnAtXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXG40NzAzOlx0XHRcdGxpc3RfYWRkKFx1MDAyNm9mcC1cdTAwM2VsaXN0LCB3YXRjaGVycyk7XG40NzA0Olx0XG40NzA1Olx0XHRXUklURV9PTkNFKG9mcC1cdTAwM2V2YWx1ZSwgdXNhZ2UpO1xuNDcwNjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWVtY2ctXHUwMDNlcGVha3NfbG9jayk7XG40NzA3Olx0XG40NzA4Olx0XHRyZXR1cm4gbmJ5dGVzO1xuNDcwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzEKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUHJlY2lzZSBJbXBsZW1lbnRhdGlvbiBDb25maXJtYXRpb24gJmFtcDsgTmV4dCBMb2dpY2FsIFN0ZXAqKgoKUmlnaHQsIHRoZSBpbXBsZW1lbnRhdGlvbiBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhlIHNwZWNpZmljYXRpb25zLiBObyBzdXJwcmlzZXMgdGhlcmUuIEdvb2QuIFdpdGggdGhhdCBjb25maXJtZWQsIGl0JiMzOTtzIGNsZWFyIHdoYXQgbmVlZHMgdG8gaGFwcGVuIG5leHQ6IEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJdCYjMzk7cyB0aGUgbmF0dXJhbCBwcm9ncmVzc2lvbiBhZnRlciB2YWxpZGF0aW9uIGFuZCBjb25maXJtcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIHRyaWdnZXIuIE5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbW9yeV9wZWFrX3dyaXRlJiMzNDssCiAgICAmIzM0O3N3YXBfcGVha193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfcGVha193cml0ZSYjMzQ7LAogICAgJiMzNDtzd2FwX3BlYWtfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjc6NTEuNTU1OTk3OTg4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4OTM1NDc5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfcGVha193cml0ZVwiLFxuICAgIFwic3dhcF9wZWFrX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLCB3aGljaCBoYW5kbGVzIHdyaXRlcyB0byB0aGUgYG1lbW9yeS5wZWFrYCBhbmQgYHN3YXAucGVha2AgY2dyb3VwIHYyIGZpbGVzLiBJdCBjaGFuZ2VzIHRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgdGhlIHBlYWsgbWVtb3J5IHVzYWdlIHdhdGVybWFyayBmb3Igd2F0Y2hlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgdGhhdCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgY2dyb3VwIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyNzo1MS41NTYwMTkyNDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzE0MjcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDNjZmQ1ZGJjMDkyZmRiOWRmMDBmNDUwYTg3ODg2ODUwOWU4NjcyYzJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMToyNzo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAyMmY1NWFlYjk0ZjNiLi5kMmQ3NjY2MjViNTUyIDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC00NjgzLDcgKzQ2ODMsNyBAQCBzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbiBcXHRcXHRcXHQgIGxvZmZfdCBvZmYsIHN0cnVjdCBwYWdlX2NvdW50ZXIgKnBjLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdXNhZ2UsIG9sZF93YXRlcm1hcms7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqcGVlcl9jdHg7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfb2ZfcGVhayAqb2ZwID0gb2ZfcGVhayhvZik7XFxuQEAgLTQ2OTEsMTEgKzQ2OTEsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZtZW1jZy1cXHUwMDNlcGVha3NfbG9jayk7XFxuIFxcbiBcXHR1c2FnZSA9IHBhZ2VfY291bnRlcl9yZWFkKHBjKTtcXG4rXFx0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrKTtcXG4gXFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXJfY3R4LCB3YXRjaGVycywgbGlzdClcXG4tXFx0XFx0aWYgKHVzYWdlIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbi1cXHRcXHRcXHRXUklURV9PTkNFKHBlZXJfY3R4LVxcdTAwM2V2YWx1ZSwgdXNhZ2UpO1xcbitcXHRcXHRpZiAocGVlcl9jdHggIT0gb2ZwIFxcdTAwMjZcXHUwMDI2IG9sZF93YXRlcm1hcmsgXFx1MDAzZSBwZWVyX2N0eC1cXHUwMDNldmFsdWUpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UocGVlcl9jdHgtXFx1MDAzZXZhbHVlLCBvbGRfd2F0ZXJtYXJrKTtcXG4gXFxuIFxcdC8qIGluaXRpYWwgd3JpdGUsIHJlZ2lzdGVyIHdhdGNoZXIgKi9cXG4gXFx0aWYgKG9mcC1cXHUwMDNldmFsdWUgPT0gT0ZQX1BFQUtfVU5TRVQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI3OjUyLjAwOTk2OTY1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYxNDM5NTY0NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3BlYWtfd3JpdGVcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGNncm91cCB2MiBmaWxlcy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgZm9yIHVwZGF0aW5nIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgZm9yIHdhdGNoZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGNncm91cCBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NmZDVkYmMwOTJmZGI5ZGYwMGY0NTBhODc4ODY4NTA5ZTg2NzJjMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDE6Mjc6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDIyZjU1YWViOTRmM2IuLmQyZDc2NjYyNWI1NTIgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQ2ODMsNyArNDY4Myw3IEBAIHN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXG4gXHRcdFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcbiBcdFx0XHQgIHN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXJzKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdXNhZ2U7XG4rXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xuIFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcbiBcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XG4gXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xuQEAgLTQ2OTEsMTEgKzQ2OTEsMTIgQEAgc3RhdGljIHNzaXplX3QgcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbiBcdHNwaW5fbG9jayhcdTAwMjZtZW1jZy1cdTAwM2VwZWFrc19sb2NrKTtcbiBcbiBcdHVzYWdlID0gcGFnZV9jb3VudGVyX3JlYWQocGMpO1xuK1x0b2xkX3dhdGVybWFyayA9IFJFQURfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xuIFx0V1JJVEVfT05DRShwYy1cdTAwM2Vsb2NhbF93YXRlcm1hcmssIHVzYWdlKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxuLVx0XHRpZiAodXNhZ2UgXHUwMDNlIHBlZXJfY3R4LVx1MDAzZXZhbHVlKVxuLVx0XHRcdFdSSVRFX09OQ0UocGVlcl9jdHgtXHUwMDNldmFsdWUsIHVzYWdlKTtcbitcdFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcdTAwMjZcdTAwMjYgb2xkX3dhdGVybWFyayBcdTAwM2UgcGVlcl9jdHgtXHUwMDNldmFsdWUpXG4rXHRcdFx0V1JJVEVfT05DRShwZWVyX2N0eC1cdTAwM2V2YWx1ZSwgb2xkX3dhdGVybWFyayk7XG4gXG4gXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXG4gXHRpZiAob2ZwLVx1MDAzZXZhbHVlID09IE9GUF9QRUFLX1VOU0VUKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjc6NTIuMDA5OTcxMjExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDg5MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQ29udHJvbCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1jb250cm9sLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgdHdlYWtpbmcgdGhlIGBwZWFrX3dyaXRlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGBwZWFrX3dyaXRlYCBpcyBhbGwgYWJvdXQgdHJhY2tpbmcgcGVhayBtZW1vcnkgdXNhZ2UsIHdoaWNoIGlzIGNydWNpYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBvdGVudGlhbGx5IGZvciB0dW5pbmcuIEkgc2VlIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBgcGVlcl9jdHgtXHUwMDNldmFsdWVgIGlzIHVwZGF0ZWQuXG5cbk9yaWdpbmFsbHksIGl0IHdhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29uOiBpZiB0aGUgY3VycmVudCB1c2FnZSAoYHVzYWdlYCkgd2FzIGhpZ2hlciB0aGFuIHRoZSBleGlzdGluZyBwZWFrIChgcGVlcl9jdHgtXHUwMDNldmFsdWVgKSwgdGhlbiB1cGRhdGUgdGhlIHBlYWsuIFByZXR0eSBzdGFuZGFyZC5cblxuTm93LCBpdCdzIGRvaW5nIHNvbWV0aGluZyBhIGJpdCBtb3JlIG51YW5jZWQuIEl0J3MgY29tcGFyaW5nIGFuIGBvbGRfd2F0ZXJtYXJrYCB2YWx1ZSBhZ2FpbnN0IHRoZSBleGlzdGluZyBwZWFrLCBidXQgb25seSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBgaWZgIHN0YXRlbWVudCB0ZWxscyBtZSB0aGF0IGl0J3MgdXNpbmcgYG9sZF93YXRlcm1hcmtgIGFuZCB0aGF0IGl0IHdpbGwgc2V0IGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAgdG8gaXQgd2hlbiBgcGVlcl9jdHhgIGlzIG5vdCBgb2ZwYCBhbmQgYG9sZF93YXRlcm1hcmtgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgZXhpc3RpbmcgcGVhayBtZW1vcnkgdXNhZ2Ugc3RvcmVkIGluIGBwZWVyX2N0eC1cdTAwM2V2YWx1ZWAuXG5cblRoaXMgbWFrZXMgbWUgd2FudCB0byBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYG9sZF93YXRlcm1hcmtgLCBhbmQgdGhlIG1lYW5pbmcgb2YgYG9mcGAuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBXaGF04oCZcyB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNvbmRpdGlvbmFsIHVwZGF0ZT8gSXMgdGhpcyBhYm91dCBwcmV2ZW50aW5nIGZsdWN0dWF0aW9ucywgc21vb3RoaW5nIG91dCB0aGUgcGVhaywgb3IgZGVhbGluZyB3aXRoIHNvbWUgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc2NlbmFyaW8/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgcmVzdCBvZiBgcGVha193cml0ZWAgYW5kIHBvc3NpYmx5IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMxMiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI3OjU2LjMwNDg2NTk4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY5NDQ2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVha193cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ2Njg9c3RhdGljIHZvaWQgcGVha19yZWxlYXNlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjgxLVxcbm1tL21lbWNvbnRyb2wuYzo0NjgyOnN0YXRpYyBzc2l6ZV90IHBlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsXFxubW0vbWVtY29udHJvbC5jLTQ2ODMtXFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NzEwLVxcbm1tL21lbWNvbnRyb2wuYzo0NzExOnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9wZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbm1tL21lbWNvbnRyb2wuYy00NzEyLVxcdFxcdFxcdFxcdCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ3MTUtXFxubW0vbWVtY29udHJvbC5jOjQ3MTY6XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5LFxcbm1tL21lbWNvbnRyb2wuYy00NzE3LVxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfcGVha3MpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMTY9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTAyNy1cXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1MDI4OlxcdFxcdC53cml0ZSA9IG1lbW9yeV9wZWFrX3dyaXRlLFxcbm1tL21lbWNvbnRyb2wuYy01MDI5LVxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTcyNz1zdGF0aWMgaW50IHN3YXBfcGVha19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczMy1cXG5tbS9tZW1jb250cm9sLmM6NTczNDpzdGF0aWMgc3NpemVfdCBzd2FwX3BlYWtfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXFxubW0vbWVtY29udHJvbC5jLTU3MzUtXFx0XFx0XFx0ICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTczOC1cXG5tbS9tZW1jb250cm9sLmM6NTczOTpcXHRyZXR1cm4gcGVha193cml0ZShvZiwgYnVmLCBuYnl0ZXMsIG9mZiwgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLFxcbm1tL21lbWNvbnRyb2wuYy01NzQwLVxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODI2LVxcdFxcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1ODI3OlxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTgyOC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyNzo1Ni44NjE4MTU2OTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjEyNDk3OTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGVha193cml0ZWAgRnVuY3Rpb24ncyBVc2FnZSoqXG5cbk9rYXksIHNvIGBwZWFrX3dyaXRlYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGFuZCBpdCdzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGVyZSdzIGEgd3JpdGUgb3BlcmF0aW9uIHRvIGVpdGhlciB0aGUgYG1lbW9yeS5wZWFrYCBvciBgc3dhcC5wZWFrYCBmaWxlcyB3aXRoaW4gYSBjZ3JvdXAuIFNwZWNpZmljYWxseSwgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAgYXJlIHRoZSBoYW5kbGVycyB0aGF0IGdldCB0aGUgYmFsbCByb2xsaW5nLiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIGFwcHJvYWNoIGlzIGZ1bmRhbWVudGFsbHkgc291bmQgYW5kIHRoYXQgY2dyb3VwZnMgaXMgdGhlIGludGVuZGVkIGludGVyZmFjZS4gTm93LCBJJ20gZ29pbmcgdG8gc2hpZnQgZ2VhcnMgYW5kIGRpZyBpbnRvIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcmVsYXRlZCB0byBgbWVtY29udHJvbGAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcHJvcGVyIG1lbWNvbnRyb2wgc2V0dGluZ3MgYXJlIGluIHBsYWNlIHRvIHN1cHBvcnQgdGhlc2UgcGVhayB3cml0ZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MDAuNDc0MzE3MDMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTgyMDM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MDAuNTQ5MzA3OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTA5NjczOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5IbW0sIHdoZXJlIHNob3VsZCBJIHN0YXJ0IGxvb2tpbmc/IEkndmUgZ290IHRoaXMgcHJvYmxlbSB0byBzb2x2ZSwgYW5kIGl0IGZlZWxzIGxpa2UgaXQncyBjb25uZWN0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZC4gUmlnaHQsIHRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gbWF5YmUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIGtleSB0byB1bmxvY2sgdGhlIGFuc3dlci4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBpbml0aWFsaXphdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaW1lIHRvIGRpdmUgaW50byB0aGF0IGFuZCBzZWUgaWYgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgdGhpcyBpc3N1ZSBiYWNrIHRvIGl0cyBzb3VyY2UuIFRoZSBLY29uZmlnIHN5c3RlbSBpcyB2YXN0LCBidXQgYGluaXQvS2NvbmZpZ2AgaXMgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHByb2JsZW1zIHJlbGF0ZWQgdG8gc3lzdGVtIGluaXRpYWxpemF0aW9uLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowMy40MDAyNzkwNzZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEyMTgyMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3ND1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDgzLVxcbmluaXQvS2NvbmZpZzoxMDg0OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDg1LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTEwNi1cXG5pbml0L0tjb25maWc6MTEwNzpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwOC1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowMy40ODMzODE0NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDUyMzMyNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbnRyb2xsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IHRoZSBtZW1vcnkgY29udHJvbGxlciBpcyBzZXQgdXAsIHNwZWNpZmljYWxseSB1c2luZyBgTUVNQ0dgIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBzdGFydCB3aXRoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYCBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgaG9sZCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHBlYWsgbWVtb3J5IHRyYWNraW5nLiBTaW5jZSBgcGVha193cml0ZWAgaXMgZmxhZ2dlZCBhcyBhIHN0YXRpYyBoZWxwZXIsIEknbSBjb25maWRlbnQgdGhvc2UgYXJlIHRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBleGFtaW5lLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNvbnNpZGVyaW5nIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYENHUk9VUFNgIGlzIGVuYWJsZWQsIHNpbmNlIGBNRU1DR2AgcmVsaWVzIG9uIGl0LiBUbyBlbnN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBJJ2xsIGdvIGNoZWNrIGBpbml0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRlbmNpZXMgZm9yIGBNRU1DR2AgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODowNy41MzU3MTk1MDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTc0MDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc0PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODMtXFxuaW5pdC9LY29uZmlnOjEwODQ6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODUtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk5LVxcbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAxLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA2LVxcbmluaXQvS2NvbmZpZzoxMTA3OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA4LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjA3LjY1NzQ2NjA4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY2OTcxNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCdzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIHplcm8gaW4gb24gdGhlIGBjb25maWcgTUVNQ0dgIG9wdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBtZW1vcnkgY29udHJvbCBncm91cHMuIEkga25vdyB0aGUgY29yZSBsb2dpYyBpcyBpbiB0aGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBncmFzcCBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYXJjaGl0ZWN0dXJhbCBzaGlmdHMgaW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIGZsYWdzIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBpbmZyYXN0cnVjdHVyZS4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIG90aGVyIEtjb25maWcgb3B0aW9ucywgc3VjaCBhcyBOVU1BIHN1cHBvcnQsIHBhZ2UgbWlncmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBlYXJseSBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBBbnkgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgY291bGQgY29tcGxpY2F0ZSBsYXRlciBhbmFseXNpcywgc28gdGhvcm91Z2huZXNzIGlzIGtleS4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGF0aHMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGZ1bmN0aW9uYWxpdHkgYW5kIHJ1bGUgb3V0IHdoYXQgSSBjYW4uIEkgd2lsbCB3YXRjaCBvdXQgZm9yIGNvbW1lbnRzIGluIHRoZSBmaWxlIG9yIGFueSBjcm9zcy1yZWZlcmVuY2VzIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxMS4xMjQ0NDEyNThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4MzpcXHRcXG4xMDg0OlxcdGNvbmZpZyBNRU1DR1xcbjEwODU6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NjpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4NzpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODg6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwODk6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MDpcXHRcXHRoZWxwXFxuMTA5MTpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkyOlxcdFxcbjEwOTM6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk0OlxcdFxcdGJvb2xcXG4xMDk1OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk4OlxcdFxcdGRlZmF1bHQgeVxcbjEwOTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjExLjEyNDY5MDcxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyNDEwMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cHM6XG5cbioqTWVtY2cgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE1FTUNHYCBpcyB0aGUgb25seSBjb25maWcgSSdsbCBuZWVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHRoZSBiYXNlIGVuYWJsaW5nIG9wdGlvbiBmb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLiBCdXQuLi4gd2FpdCBhIHNlY29uZCwgdGhhdCBuYWdnaW5nIGZlZWxpbmcuIFRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbi4uLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWV0aGluZyBhYm91dCB0aGF0IGludGVyYWN0aW9uLiBDb3VsZCBpdCByZXF1aXJlIGBNRU1DR19TV0FQYCB0b28/IEJlc3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZSBjaGVjay4gTGV0J3MgZGl2ZSByaWdodCBpbnRvIGBtbS9tZW1jb250cm9sLmNgLiBJJ2xsIHplcm8gaW4gYXJvdW5kIHRoZSBgc3dhcF9wZWFrX3dyaXRlYCBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhcm91bmQgaXQgYW5kIHZlcmlmeSB3aGV0aGVyIG9yIG5vdCBgTUVNQ0dfU1dBUGAgcGxheXMgYSBwYXJ0IGluIGl0cyBmdW5jdGlvbmFsaXR5LiBUaGF0J2xsIGNsZWFyIHVwIGFueSBkb3VidC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MTQuNzg3MTA0NDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTgxMDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3BlYWtfd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01NzI3PXN0YXRpYyBpbnQgc3dhcF9wZWFrX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NzMzLVxcbm1tL21lbWNvbnRyb2wuYzo1NzM0OnN0YXRpYyBzc2l6ZV90IHN3YXBfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG5tbS9tZW1jb250cm9sLmMtNTczNS1cXHRcXHRcXHQgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01ODAzPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01ODI2LVxcdFxcdC5zZXFfc2hvdyA9IHN3YXBfcGVha19zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1ODI3OlxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG5tbS9tZW1jb250cm9sLmMtNTgyOC1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxNC44NjI5MjAxMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2Nzc0Mzk3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiSG1tLCB3aGVyZSBpcyB0aGlzIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBkZWZpbmVkPyBJJ2xsIGJldCBpdCdzIHR1Y2tlZCBhd2F5IGJlaGluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZSwgcHJvYmFibHkgcmVsYXRlZCB0byBzd2FwIGZ1bmN0aW9uYWxpdHkuXCIgTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBsb29raW5nIGZvciBzb21ldGhpbmcgbGlrZSBgI2lmZGVmIENPTkZJR19TV0FQYCwgb3IgYSBzaW1pbGFyIG1hY3JvIHRoYXQgY29udHJvbHMgdGhlIGluY2x1c2lvbiBvZiBzd2FwLXJlbGF0ZWQgY29kZS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gY2hlY2suIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgcGF0dGVybiwgc28gdGhhdCdzIHdoZXJlIEknbGwgc3RhcnQgdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoxNy44MzA2NjcwMjZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTczMDpcXHRcXG41NzMxOlxcdFxcdHJldHVybiBwZWFrX3Nob3coc2YsIHYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCk7XFxuNTczMjpcXHR9XFxuNTczMzpcXHRcXG41NzM0OlxcdHN0YXRpYyBzc2l6ZV90IHN3YXBfcGVha193cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1ZixcXG41NzM1OlxcdFxcdFxcdFxcdCAgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjU3MzY6XFx0e1xcbjU3Mzc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG41NzM4OlxcdFxcbjU3Mzk6XFx0XFx0cmV0dXJuIHBlYWtfd3JpdGUob2YsIGJ1ZiwgbmJ5dGVzLCBvZmYsIFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCxcXG41NzQwOlxcdFxcdFxcdFxcdCAgXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwX3BlYWtzKTtcXG41NzQxOlxcdH1cXG41NzQyOlxcdFxcbjU3NDM6XFx0c3RhdGljIGludCBzd2FwX2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTc0NDpcXHR7XFxuNTc0NTpcXHRcXHRyZXR1cm4gc2VxX3B1dHNfbWVtY2dfdHVuYWJsZShtLFxcbjU3NDY6XFx0XFx0XFx0UkVBRF9PTkNFKG1lbV9jZ3JvdXBfZnJvbV9zZXEobSktXFx1MDAzZXN3YXAuaGlnaCkpO1xcbjU3NDc6XFx0fVxcbjU3NDg6XFx0XFxuNTc0OTpcXHRzdGF0aWMgc3NpemVfdCBzd2FwX2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjU3NTA6XFx0XFx0XFx0XFx0ICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZilcXG41NzUxOlxcdHtcXG41NzUyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNTc1MzpcXHRcXHR1bnNpZ25lZCBsb25nIGhpZ2g7XFxuNTc1NDpcXHRcXHRpbnQgZXJyO1xcbjU3NTU6XFx0XFxuNTc1NjpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjU3NTc6XFx0XFx0ZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgXFxcIm1heFxcXCIsIFxcdTAwMjZoaWdoKTtcXG41NzU4OlxcdFxcdGlmIChlcnIpXFxuNTc1OTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjU3NjA6XFx0XFxuNTc2MTpcXHRcXHRwYWdlX2NvdW50ZXJfc2V0X2hpZ2goXFx1MDAyNm1lbWNnLVxcdTAwM2Vzd2FwLCBoaWdoKTtcXG41NzYyOlxcdFxcbjU3NjM6XFx0XFx0cmV0dXJuIG5ieXRlcztcXG41NzY0OlxcdH1cXG41NzY1OlxcdFxcbjU3NjY6XFx0c3RhdGljIGludCBzd2FwX21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41NzY3OlxcdHtcXG41NzY4OlxcdFxcdHJldHVybiBzZXFfcHV0c19tZW1jZ190dW5hYmxlKG0sXFxuNTc2OTpcXHRcXHRcXHRSRUFEX09OQ0UobWVtX2Nncm91cF9mcm9tX3NlcShtKS1cXHUwMDNlc3dhcC5tYXgpKTtcXG41NzcwOlxcdH1cXG41NzcxOlxcdFxcbjU3NzI6XFx0c3RhdGljIHNzaXplX3Qgc3dhcF9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbjU3NzM6XFx0XFx0XFx0XFx0ICAgICAgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbjU3NzQ6XFx0e1xcbjU3NzU6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTtcXG41Nzc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbWF4O1xcbjU3Nzc6XFx0XFx0aW50IGVycjtcXG41Nzc4OlxcdFxcbjU3Nzk6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG41NzgwOlxcdFxcdGVyciA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsIFxcXCJtYXhcXFwiLCBcXHUwMDI2bWF4KTtcXG41NzgxOlxcdFxcdGlmIChlcnIpXFxuNTc4MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjU3ODM6XFx0XFxuNTc4NDpcXHRcXHR4Y2hnKFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcC5tYXgsIG1heCk7XFxuNTc4NTpcXHRcXG41Nzg2OlxcdFxcdHJldHVybiBuYnl0ZXM7XFxuNTc4NzpcXHR9XFxuNTc4ODpcXHRcXG41Nzg5OlxcdHN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTc5MDpcXHR7XFxuNTc5MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbjU3OTI6XFx0XFxuNTc5MzpcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJoaWdoICVsdVxcXFxuXFxcIixcXG41Nzk0OlxcdFxcdFxcdCAgIGF0b21pY19sb25nX3JlYWQoXFx1MDAyNm1lbWNnLVxcdTAwM2VtZW1vcnlfZXZlbnRzW01FTUNHX1NXQVBfSElHSF0pKTtcXG41Nzk1OlxcdFxcdHNlcV9wcmludGYobSwgXFxcIm1heCAlbHVcXFxcblxcXCIsXFxuNTc5NjpcXHRcXHRcXHQgICBhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG41Nzk3OlxcdFxcdHNlcV9wcmludGYobSwgXFxcImZhaWwgJWx1XFxcXG5cXFwiLFxcbjU3OTg6XFx0XFx0XFx0ICAgYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9GQUlMXSkpO1xcbjU3OTk6XFx0XFxuNTgwMDpcXHRcXHRyZXR1cm4gMDtcXG41ODAxOlxcdH1cXG41ODAyOlxcdFxcbjU4MDM6XFx0c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbjU4MDQ6XFx0XFx0e1xcbjU4MDU6XFx0XFx0XFx0Lm5hbWUgPSBcXFwic3dhcC5jdXJyZW50XFxcIixcXG41ODA2OlxcdFxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG41ODA3OlxcdFxcdFxcdC5yZWFkX3U2NCA9IHN3YXBfY3VycmVudF9yZWFkLFxcbjU4MDg6XFx0XFx0fSxcXG41ODA5OlxcdFxcdHtcXG41ODEwOlxcdFxcdFxcdC5uYW1lID0gXFxcInN3YXAuaGlnaFxcXCIsXFxuNTgxMTpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuNTgxMjpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX2hpZ2hfc2hvdyxcXG41ODEzOlxcdFxcdFxcdC53cml0ZSA9IHN3YXBfaGlnaF93cml0ZSxcXG41ODE0OlxcdFxcdH0sXFxuNTgxNTpcXHRcXHR7XFxuNTgxNjpcXHRcXHRcXHQubmFtZSA9IFxcXCJzd2FwLm1heFxcXCIsXFxuNTgxNzpcXHRcXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxuNTgxODpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX21heF9zaG93LFxcbjU4MTk6XFx0XFx0XFx0LndyaXRlID0gc3dhcF9tYXhfd3JpdGUsXFxuNTgyMDpcXHRcXHR9LFxcbjU4MjE6XFx0XFx0e1xcbjU4MjI6XFx0XFx0XFx0Lm5hbWUgPSBcXFwic3dhcC5wZWFrXFxcIixcXG41ODIzOlxcdFxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG41ODI0OlxcdFxcdFxcdC5vcGVuID0gcGVha19vcGVuLFxcbjU4MjU6XFx0XFx0XFx0LnJlbGVhc2UgPSBwZWFrX3JlbGVhc2UsXFxuNTgyNjpcXHRcXHRcXHQuc2VxX3Nob3cgPSBzd2FwX3BlYWtfc2hvdyxcXG41ODI3OlxcdFxcdFxcdC53cml0ZSA9IHN3YXBfcGVha193cml0ZSxcXG41ODI4OlxcdFxcdH0sXFxuNTgyOTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjE3LjgzMTI1NTE2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkxMzUyMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGBzd2FwX2ZpbGVzYCBmdW5jdGlvbiBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBtYXliZSB3cmFwcGVkIGluIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NXQVBgIG9yIGEgc2ltaWxhciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBUaGlzIHN1Z2dlc3RzIHRoZSBzd2FwIGZlYXR1cmUgbWlnaHQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBiYXNlZCBvbiBhIGJ1aWxkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgaXMgY3J1Y2lhbC4gSWYgaXQncyBjb25kaXRpb25hbGx5IGluY2x1ZGVkLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQncyBhY3RpdmUuIEkgaGF2ZSB0byB2ZXJpZnkgaWYgdGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBjYXVzZSBpc3N1ZXMgdW5kZXIgc29tZSBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjIwLjYyMjYxMDAwNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwOTg5ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01Nzg5PXN0YXRpYyBpbnQgc3dhcF9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTgwMi1cXG5tbS9tZW1jb250cm9sLmM6NTgwMzpzdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTU4MDQtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU5OTg9c3RhdGljIHNzaXplX3QgenN3YXBfd3JpdGViYWNrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE0LVxcbm1tL21lbWNvbnRyb2wuYzo2MDE1OnN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHpzd2FwX2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTYwMTYtXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMzY9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDQwLVxcbm1tL21lbWNvbnRyb2wuYzo2MDQxOlxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jLTYwNDItI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNDUtI2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYzo2MDQ2OlxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCB6c3dhcF9maWxlcykpO1xcbm1tL21lbWNvbnRyb2wuYy02MDQ3LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyMC43MjM2MDYzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI4NTU3NzMxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoZSBjb2RlOlxuXG4qKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtZW1fY2dyb3VwX3N3YXBfaW5pdGAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgYG1lbV9jZ3JvdXBfc3dhcF9pbml0YCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBmaWd1cmUgb3V0IGlmIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGZvciBgI2lmYCBvciBgI2lmZGVmYCBkaXJlY3RpdmVzIHN1cnJvdW5kaW5nIGl0cyBkZWNsYXJhdGlvbiBvciBkZWZpbml0aW9uLiBLbm93aW5nIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIGRpc2FibGVkIGJhc2VkIG9uIHNvbWUgcHJlcHJvY2Vzc29yIGZsYWcgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcG90ZW50aWFsIGltcGFjdCBhbmQgd2hlcmUgaXQgbWlnaHQgYmUgYWN0aXZlIG9yIGluYWN0aXZlIGluIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucy4gVGhpcyBpcyBhIHN0YW5kYXJkIGZpcnN0IHN0ZXAgZm9yIG1lIHdoZW4gdHJhY2tpbmcgZG93biB0aGUgYmVoYXZpb3Igb2YgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNC4wMDkxODY4NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc3MzM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3N3YXBfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1jb250cm9sLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTYwMTU9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDM1LVxcbm1tL21lbWNvbnRyb2wuYzo2MDM2OnN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxubW0vbWVtY29udHJvbC5jLTYwMzcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTYwNDktfVxcbm1tL21lbWNvbnRyb2wuYzo2MDUwOnN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XFxubW0vbWVtY29udHJvbC5jLTYwNTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjI0LjE2Mzk2NjQ3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzAyMTc5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgZm9yIFN3YXAgSW5pdGlhbGl6YXRpb24gR3VhcmQqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBgbWVtX2Nncm91cF9zd2FwX2luaXRgIGZ1bmN0aW9uLCBJIHdhbnQgdG8gcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBhbiBgI2lmZGVmIENPTkZJR19TV0FQYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIHdyYXBwaW5nIGl0LiBJdCdzIGFsbW9zdCBjZXJ0YWluIHRoYXQgc3dhcCBpbml0aWFsaXphdGlvbiBpcyBjb25kaXRpb25hbCBvbiBzd2FwIGJlaW5nIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gSSBjYW4ndCBpbWFnaW5lIHRoaXMgY29kZSBleGVjdXRpbmcgaWYgc3dhcCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkLiBEb2luZyBzbyB3b3VsZCBsaWtlbHkgbGVhZCB0byBhbGwgc29ydHMgb2YgdW5leHBlY3RlZCBiZWhhdmlvciwgbWVtb3J5IGxlYWtzLCBvciBldmVuIG91dHJpZ2h0IGNyYXNoZXMuIEl04oCZcyBiZXN0IHByYWN0aWNlIHRvIGV4cGxpY2l0bHkgY2hlY2sgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGNvbXBpbGVzIGNvcnJlY3RseSBmb3IgYWxsIGNvbmZpZ3VyYXRpb25zIGFuZCBhdm9pZHMgaGVhZGFjaGVzIGxhdGVyIG9uLiBLbm93aW5nIHRoaXMga2VlcHMgbWUgZnJvbSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNy40OTQxODc0NjhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MDIwOlxcdFxcdH0sXFxuNjAyMTpcXHRcXHR7XFxuNjAyMjpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6c3dhcC5tYXhcXFwiLFxcbjYwMjM6XFx0XFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbjYwMjQ6XFx0XFx0XFx0LnNlcV9zaG93ID0genN3YXBfbWF4X3Nob3csXFxuNjAyNTpcXHRcXHRcXHQud3JpdGUgPSB6c3dhcF9tYXhfd3JpdGUsXFxuNjAyNjpcXHRcXHR9LFxcbjYwMjc6XFx0XFx0e1xcbjYwMjg6XFx0XFx0XFx0Lm5hbWUgPSBcXFwienN3YXAud3JpdGViYWNrXFxcIixcXG42MDI5OlxcdFxcdFxcdC5zZXFfc2hvdyA9IHpzd2FwX3dyaXRlYmFja19zaG93LFxcbjYwMzA6XFx0XFx0XFx0LndyaXRlID0genN3YXBfd3JpdGViYWNrX3dyaXRlLFxcbjYwMzE6XFx0XFx0fSxcXG42MDMyOlxcdFxcdHsgfVxcdC8qIHRlcm1pbmF0ZSAqL1xcbjYwMzM6XFx0fTtcXG42MDM0OlxcdCNlbmRpZiAvKiBDT05GSUdfWlNXQVAgKi9cXG42MDM1OlxcdFxcbjYwMzY6XFx0c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG42MDM3OlxcdHtcXG42MDM4OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuNjAzOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG42MDQwOlxcdFxcbjYwNDE6XFx0XFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcXG42MDQyOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG42MDQzOlxcdFxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbjYwNDQ6XFx0I2VuZGlmXFxuNjA0NTpcXHQjaWZkZWYgQ09ORklHX1pTV0FQXFxuNjA0NjpcXHRcXHRXQVJOX09OKGNncm91cF9hZGRfZGZsX2NmdHlwZXMoXFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgenN3YXBfZmlsZXMpKTtcXG42MDQ3OlxcdCNlbmRpZlxcbjYwNDg6XFx0XFx0cmV0dXJuIDA7XFxuNjA0OTpcXHR9XFxuNjA1MDpcXHRzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbjYwNTE6XFx0XFxuNjA1MjpcXHQjZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG42MDUzOlxcdFxcbjYwNTQ6XFx0dm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBub2RlbWFza190ICptYXNrKVxcbjYwNTU6XFx0e1xcbjYwNTY6XFx0XFx0bm9kZW1hc2tfdCBhbGxvd2VkO1xcbjYwNTc6XFx0XFxuNjA1ODpcXHRcXHRpZiAoIW1lbWNnKVxcbjYwNTk6XFx0XFx0XFx0cmV0dXJuO1xcbjYwNjA6XFx0XFxuNjA2MTpcXHRcXHQvKlxcbjYwNjI6XFx0XFx0ICogU2luY2UgdGhpcyBpbnRlcmZhY2UgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSBtaWdyYXRpb24gcGF0aHMsIGFuZFxcbjYwNjM6XFx0XFx0ICogcmVjbGFpbSBhbmQgbWlncmF0aW9uIGFyZSBzdWJqZWN0IHRvIHJhY2UgY29uZGl0aW9ucyBzdWNoIGFzIGNoYW5nZXNcXG42MDY0OlxcdFxcdCAqIGluIGVmZmVjdGl2ZV9tZW1zIGFuZCBob3QtdW5wbHVnaW5nIG9mIG5vZGVzLCBpbmFjY3VyYXRlIGFsbG93ZWRcXG42MDY1OlxcdFxcdCAqIG1hc2sgaXMgYWNjZXB0YWJsZS5cXG42MDY2OlxcdFxcdCAqL1xcbjYwNjc6XFx0XFx0Y3B1c2V0X25vZGVzX2FsbG93ZWQobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIFxcdTAwMjZhbGxvd2VkKTtcXG42MDY4OlxcdFxcdG5vZGVzX2FuZCgqbWFzaywgKm1hc2ssIGFsbG93ZWQpO1xcbjYwNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODoyNy40OTQ1MTcyNDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0ODMyMjUwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc3BvdCBgI2VuZGlmIC8qIENPTkZJR19TV0FQICovYCB3YXkgZG93biB0aGVyZSBhdCBsaW5lIDYwNTIuIFJpZ2h0LCBzbyB0aGF0IHRlbGxzIG1lIGBzd2FwX3BlYWtfd3JpdGVgIGRlZmluaXRlbHkgcmVxdWlyZXMgYENPTkZJR19TV0FQYCB0byBiZSBkZWZpbmVkLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgbWVtb3J5X3BlYWtfd3JpdGVgLiBJdCdzIHJlbGF0ZWQgdG8gYG1lbW9yeV9maWxlc2AsIHNvIEknbGwgcXVpY2tseSB0cmFjZSB3aGVyZSBgbWVtb3J5X2ZpbGVzYCBpcyBhY3R1YWxseSBhZGRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODozMS4yNDI4NDIyODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODU5NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfZmlsZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtY29udHJvbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz01MDAzPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMTUtXFxubW0vbWVtY29udHJvbC5jOjUwMTY6c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxubW0vbWVtY29udHJvbC5jLTUwMTctXFx0e1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwOTA9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUxMDAtXFx0LmV4aXQgPSBtZW1fY2dyb3VwX2V4aXQsXFxubW0vbWVtY29udHJvbC5jOjUxMDE6XFx0LmRmbF9jZnR5cGVzID0gbWVtb3J5X2ZpbGVzLFxcbm1tL21lbWNvbnRyb2wuYy01MTAyLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDE6Mjg6MzEuMzUxNDQzNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDExODMwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2guIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSByZWxhdGVkIHRvIG1lbW9yeSBwZWFrIHRyYWNraW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIGNncm91cHMuIEkgc2VlIHRoYXQgYG1lbW9yeV9maWxlc2AgaXMgYWx3YXlzIGFkZGVkIGlmIGBNRU1DR2AgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgaXMgZW5hYmxlZC4gU28sIGBNRU1DR2AgaXMgZGVmaW5pdGVseSB0aGUgY3JpdGljYWwgY29uZmlnIHRvIGNvbnNpZGVyLCBhbmQgYFNXQVBgIChTd2FwKSBpcyBhbHNvIHJlbGV2YW50LiBHaXZlbiB0aGlzLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYFNXQVBgIGlzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkLlxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgcGVha193cml0ZWAsIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIHdpdGhpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uIFRoaXMgbWVhbnMgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzb21ldGhpbmcgdGhhdCBhZmZlY3RzIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIEknbSBnb2luZyB0byBwaW5wb2ludCB0aGUgY29yZSBmdW5jdGlvbnMgYWZmZWN0ZWQ6IGBtZW1vcnlfcGVha193cml0ZWAgYW5kIGBzd2FwX3BlYWtfd3JpdGVgLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMnIGNoYXJhY3RlcmlzdGljcy4gVGhleSAqYXJlKiBzdGF0aWMuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGd1aWRhbmNlOiBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aGV5J3JlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgd2l0aGluIHRoZSBgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXWAgYW5kIGBzd2FwX2ZpbGVzW11gIHN0cnVjdHVyZXMuIFNvLCBubywgdGhleSBhcmUgZGVmaW5pdGVseSBub3QgaW5saW5lZCEgVGhleSBhcmUgY2FsbGVkIHRocm91Z2ggZnVuY3Rpb24gcG9pbnRlcnMsIHNvIHRoYXQncyBnb29kLiBUaGV5IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoZSBjZ3JvdXAgY29yZSBjYWxscyB0aGVzZSBmdW5jdGlvbnMuIFRoYXQncyBwZXJmZWN0LiBTbywgSSB3aWxsIGxpc3QgYG1lbW9yeV9wZWFrX3dyaXRlYCBhbmQgYHN3YXBfcGVha193cml0ZWAuXG5cbkkgYnJpZWZseSBjb25zaWRlcmVkIGBwZWFrX3dyaXRlYCBhbmQgdGhlbiBJJ20gbGlzdGluZyBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC5cblxuSSdtIGNoZWNraW5nIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgYW5kIHllcywgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IHRoZSBwcmltYXJ5IG9uZSwgYW5kIGBTV0FQYCBpcyBjcnVjaWFsIGZvciBgc3dhcF9wZWFrX3dyaXRlYC4gU28sIEknbGwgZGVmaW5pdGVseSBsaXN0IGBNRU1DR2AgYW5kIGBTV0FQYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYG1lbW9yeS5wZWFrYCBpcyBwYXJ0IG9mIGNncm91cCB2Mi4gWWVzLCBgbWVtb3J5X2ZpbGVzYCBpcyBwYXJ0IG9mIGBkZmxfY2Z0eXBlc2AsIHdoaWNoIGlzIHRoZSBjZ3JvdXAgdjIgZnJhbWV3b3JrLiBJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnPyBOby5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBpcyB0aGUgd3JpdGUgaGFuZGxlciBmb3IgdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGZpbGVzIGluIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbS4gSXQncyBjaGFuZ2luZyB0aGUgd2F5IHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgaXMgdXBkYXRlZCBmb3Igd2F0Y2hlcnMsIHNvIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuIFRoaXMgY2hhbmdlIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2VyIHNwYWNlIGJ5IHdyaXRpbmcgdG8gdGhlc2UgZmlsZXMuXG5cblRoZXJlZm9yZSwgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZSBgbWVtb3J5X3BlYWtfd3JpdGVgIGFuZCBgc3dhcF9wZWFrX3dyaXRlYC4gQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBhcmUgYE1FTUNHYCBhbmQgYFNXQVBgLlxuXG5JJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgYHBlYWtfd3JpdGVgIGluIGBtbS9tZW1jb250cm9sLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzIxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAxOjI4OjQyLjE1MjYyOTgyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ2ODA6XFx0fVxcbjQ2ODE6XFx0XFxuNDY4MjpcXHRzdGF0aWMgc3NpemVfdCBwZWFrX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLFxcbjQ2ODM6XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2ZmLCBzdHJ1Y3QgcGFnZV9jb3VudGVyICpwYyxcXG40Njg0OlxcdFxcdFxcdFxcdCAgc3RydWN0IGxpc3RfaGVhZCAqd2F0Y2hlcnMpXFxuNDY4NTpcXHR7XFxuNDY4NjpcXHRcXHR1bnNpZ25lZCBsb25nIHVzYWdlLCBvbGRfd2F0ZXJtYXJrO1xcbjQ2ODc6XFx0XFx0c3RydWN0IGNncm91cF9vZl9wZWFrICpwZWVyX2N0eDtcXG40Njg4OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7XFxuNDY4OTpcXHRcXHRzdHJ1Y3QgY2dyb3VwX29mX3BlYWsgKm9mcCA9IG9mX3BlYWsob2YpO1xcbjQ2OTA6XFx0XFxuNDY5MTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1lbWNnLVxcdTAwM2VwZWFrc19sb2NrKTtcXG40NjkyOlxcdFxcbjQ2OTM6XFx0XFx0dXNhZ2UgPSBwYWdlX2NvdW50ZXJfcmVhZChwYyk7XFxuNDY5NDpcXHRcXHRvbGRfd2F0ZXJtYXJrID0gUkVBRF9PTkNFKHBjLVxcdTAwM2Vsb2NhbF93YXRlcm1hcmspO1xcbjQ2OTU6XFx0XFx0V1JJVEVfT05DRShwYy1cXHUwMDNlbG9jYWxfd2F0ZXJtYXJrLCB1c2FnZSk7XFxuNDY5NjpcXHRcXG40Njk3OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocGVlcl9jdHgsIHdhdGNoZXJzLCBsaXN0KVxcbjQ2OTg6XFx0XFx0XFx0aWYgKHBlZXJfY3R4ICE9IG9mcCBcXHUwMDI2XFx1MDAyNiBvbGRfd2F0ZXJtYXJrIFxcdTAwM2UgcGVlcl9jdHgtXFx1MDAzZXZhbHVlKVxcbjQ2OTk6XFx0XFx0XFx0XFx0V1JJVEVfT05DRShwZWVyX2N0eC1cXHUwMDNldmFsdWUsIG9sZF93YXRlcm1hcmspO1xcbjQ3MDA6XFx0XFxuNDcwMTpcXHRcXHQvKiBpbml0aWFsIHdyaXRlLCByZWdpc3RlciB3YXRjaGVyICovXFxuNDcwMjpcXHRcXHRpZiAob2ZwLVxcdTAwM2V2YWx1ZSA9PSBPRlBfUEVBS19VTlNFVClcXG40NzAzOlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZvZnAtXFx1MDAzZWxpc3QsIHdhdGNoZXJzKTtcXG40NzA0OlxcdFxcbjQ3MDU6XFx0XFx0V1JJVEVfT05DRShvZnAtXFx1MDAzZXZhbHVlLCB1c2FnZSk7XFxuNDcwNjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bWVtY2ctXFx1MDAzZXBlYWtzX2xvY2spO1xcbjQ3MDc6XFx0XFxuNDcwODpcXHRcXHRyZXR1cm4gbmJ5dGVzO1xcbjQ3MDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODo0Mi4xNTI5MTM1ODVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMjAzODc2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlByZWNpc2UgSW1wbGVtZW50YXRpb24gQ29uZmlybWF0aW9uIFx1MDAyNiBOZXh0IExvZ2ljYWwgU3RlcCoqXG5cblJpZ2h0LCB0aGUgaW1wbGVtZW50YXRpb24gYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9ucy4gTm8gc3VycHJpc2VzIHRoZXJlLiBHb29kLiBXaXRoIHRoYXQgY29uZmlybWVkLCBpdCdzIGNsZWFyIHdoYXQgbmVlZHMgdG8gaGFwcGVuIG5leHQ6IEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEl0J3MgdGhlIG5hdHVyYWwgcHJvZ3Jlc3Npb24gYWZ0ZXIgdmFsaWRhdGlvbiBhbmQgY29uZmlybXMgdGhlIG5leHQgbG9naWNhbCBmdW5jdGlvbiB0byB0cmlnZ2VyLiBObyBuZWVkIHRvIG92ZXJ0aGluayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzEsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMToyODo1My4yNzMzMDQ4NzVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYyMjQzMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3BlYWtfd3JpdGVcIixcbiAgICBcInN3YXBfcGVha193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwZWFrX3dyaXRlYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgd2hpY2ggaGFuZGxlcyB3cml0ZXMgdG8gdGhlIGBtZW1vcnkucGVha2AgYW5kIGBzd2FwLnBlYWtgIGNncm91cCB2MiBmaWxlcy4gSXQgY2hhbmdlcyB0aGUgbG9naWMgZm9yIHVwZGF0aW5nIHRoZSBwZWFrIG1lbW9yeSB1c2FnZSB3YXRlcm1hcmsgZm9yIHdhdGNoZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBieSB3cml0aW5nIHRvIHRoZXNlIGNncm91cCBmaWxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW9yeV9wZWFrX3dyaXRlXCIsXG4gICAgXCJzd2FwX3BlYWtfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcGVha193cml0ZWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIHdoaWNoIGhhbmRsZXMgd3JpdGVzIHRvIHRoZSBgbWVtb3J5LnBlYWtgIGFuZCBgc3dhcC5wZWFrYCBjZ3JvdXAgdjIgZmlsZXMuIEl0IGNoYW5nZXMgdGhlIGxvZ2ljIGZvciB1cGRhdGluZyB0aGUgcGVhayBtZW1vcnkgdXNhZ2Ugd2F0ZXJtYXJrIGZvciB3YXRjaGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYnkgd3JpdGluZyB0byB0aGVzZSBjZ3JvdXAgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[1] Phase: Succeeded StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 01:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 01:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2] Phase: Succeeded StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 05:19:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 05:19:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 01:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 01:29:16 +0000 UTC FinishedAt: 2026-08-01 01:29:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9mz7k/series-workflow9mz7k-convert-artifact-527745707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 01:29:37 +0000 UTC FinishedAt: 2026-08-01 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 01:29:37 +0000 UTC FinishedAt: 2026-08-01 01:52:18 +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:*0bc8e37c-b014-4d37-bd5d-e7c8e4e40771,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-workflow9mz7k/series-workflow9mz7k-convert-artifact-527745707/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": "5238788f-7b9a-49cf-b655-b6e4e47f8c25", "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-workflow9mz7k/series-workflow9mz7k-build-action-1606964137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 01:29:37 +0000 UTC FinishedAt: 2026-08-01 01:52:08 +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:*0bc8e37c-b014-4d37-bd5d-e7c8e4e40771,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-workflow9mz7k/series-workflow9mz7k-convert-artifact-527745707/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": "5238788f-7b9a-49cf-b655-b6e4e47f8c25", "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-workflow9mz7k/series-workflow9mz7k-build-action-1606964137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 01:52:18 +0000 UTC FinishedAt: 2026-08-01 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 01:52:18 +0000 UTC FinishedAt: 2026-08-01 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 01:52:18 +0000 UTC FinishedAt: 2026-08-01 01:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 01:52:18 +0000 UTC FinishedAt: 2026-08-01 01:52:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow9mz7k/series-workflow9mz7k-convert-artifact-2866975618/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 01:52:28 +0000 UTC FinishedAt: 2026-08-01 01:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 01:52:28 +0000 UTC FinishedAt: 2026-08-01 01:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5238788f-7b9a-49cf-b655-b6e4e47f8c25,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-workflow9mz7k/series-workflow9mz7k-build-action-1606964137/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-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 01:54:18 +0000 UTC FinishedAt: 2026-08-01 01:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 01:54:18 +0000 UTC FinishedAt: 2026-08-01 01:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 01:54:18 +0000 UTC FinishedAt: 2026-08-01 02:14:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 01:54:18 +0000 UTC FinishedAt: 2026-08-01 02:14:26 +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:*0bc8e37c-b014-4d37-bd5d-e7c8e4e40771,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-workflow9mz7k/series-workflow9mz7k-convert-artifact-2866975618/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": "a528dc41-98fc-4981-81c7-adc6f7f9c1fc", "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-workflow9mz7k/series-workflow9mz7k-build-action-4028005846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 01:54:18 +0000 UTC FinishedAt: 2026-08-01 02:14:16 +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:*0bc8e37c-b014-4d37-bd5d-e7c8e4e40771,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-workflow9mz7k/series-workflow9mz7k-convert-artifact-2866975618/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": "a528dc41-98fc-4981-81c7-adc6f7f9c1fc", "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-workflow9mz7k/series-workflow9mz7k-build-action-4028005846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 02:14:26 +0000 UTC FinishedAt: 2026-08-01 02:14:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 02:14:26 +0000 UTC FinishedAt: 2026-08-01 02:14:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 02:14:26 +0000 UTC FinishedAt: 2026-08-01 02:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 02:14:26 +0000 UTC FinishedAt: 2026-08-01 02:16:10 +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:*a528dc41-98fc-4981-81c7-adc6f7f9c1fc,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-workflow9mz7k/series-workflow9mz7k-build-action-4028005846/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-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 05:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 05:19:31 +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":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},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:*5238788f-7b9a-49cf-b655-b6e4e47f8c25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a528dc41-98fc-4981-81c7-adc6f7f9c1fc,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-workflow9mz7k/series-workflow9mz7k-build-action-1606964137/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-workflow9mz7k/series-workflow9mz7k-build-action-4028005846/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 02:16:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 02:16:25 +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":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},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-workflow9mz7k/series-workflow9mz7k-convert-artifact-2039281335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 02:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 02:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 02:16:20 +0000 UTC FinishedAt: 2026-08-01 02:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 02:16:30 +0000 UTC FinishedAt: 2026-08-01 05:19:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mz7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["memory_peak_write","swap_peak_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"2fe6be5fc09d50c0b9c105a7b89ce9bfc2bac694","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","SWAP"],"series_id":"337907d8-d612-4fa7-b5ab-1ae93abe97cf","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 02:16:30 +0000 UTC FinishedAt: 2026-08-01 05:19:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5238788f-7b9a-49cf-b655-b6e4e47f8c25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a528dc41-98fc-4981-81c7-adc6f7f9c1fc,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-workflow9mz7k/series-workflow9mz7k-build-action-1606964137/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-workflow9mz7k/series-workflow9mz7k-build-action-4028005846/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-workflow9mz7k/series-workflow9mz7k-convert-artifact-2039281335/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,}