Name: series-workflowmgrkn Phase: Succeeded StartedAt: 2026-09-03 07:21:05 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[0] Phase: Succeeded StartedAt: 2026-09-03 07:21:05 +0000 UTC FinishedAt: 2026-09-03 08:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 07:21:05 +0000 UTC FinishedAt: 2026-09-03 08:06:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "87d66a91-d13e-485e-b271-d156a1ad1a91" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_dir_find_block", "afs_dir_search_bucket", "afs_edit_dir_remove", "afs_fs_probe_fileserver", "afs_lookup_server", "afs_set_peer_appdata" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwX3NlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGluIHRoZSBBRlMgc3Vic3lzdGVtOlxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxuMi4gZnMvYWZzL2Rpcl9lZGl0LmMsIGZzL2Fmcy9kaXJfc2VhcmNoLmMsIGZzL2Fmcy9pbnRlcm5hbC5oOiBDb25zb2xpZGF0ZXMgbG9jYWwga21hcCB1bm1hcHBpbmcgbG9naWMgdXNpbmcgYWZzX2Rpcl9lbmRfaXRlcigpIGhlbHBlciB0byBlbnN1cmUgY2xlYW4gYW5kIGNvcnJlY3QgdW5tYXAgb3BlcmF0aW9ucyBkdXJpbmcgZGlyZWN0b3J5IGVkaXRzL3NlYXJjaGVzLlxuMy4gZnMvYWZzL2ZzX3Byb2JlLmM6IEluaXRpYWxpemVzIG9sZF9hbGlzdCBmcm9tIG9sZC1cdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cbjQuIGZzL2Fmcy9zZXJ2ZXIuYzogUmVtb3ZlcyBhbiBlcnJvbmVvdXMga2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpIGluIGFmc19sb29rdXBfc2VydmVyIGVycm9yIGNsZWFudXAsIHByZXZlbnRpbmcgaW52YWxpZC9wcmVtYXR1cmUgZnJlZSBvZiBlbmRwb2ludCBzdGF0ZS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrcy4gUG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUgLyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2YzY2ZiMWY5ZGVjZTRlNzA1MWFjZWMyNWQ2NDI4YTRmMjc4YjVmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXG5pbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2FkZHJfbGlzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvYWRkcl9saXN0LmNcbkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRcdHN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC1cdTAwM2VhZGRyc1tuXS5wZWVyO1xuIFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG8gPSBvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlcjtcbiBcbi1cdFx0aWYgKHBuID09IHBvKVxuJiM0MztcdFx0aWYgKHBuID09IHBvKSB7XG4mIzQzO1x0XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRvJiM0MzsmIzQzOztcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKHBuIFx1MDAzYyBwbykge1xuIFx0XHRcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcbiBcdFx0XHRuJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbi1cdFx0Z290byBlcnJvcl91bm1hcDtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiBcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuQEAgLTQ1OCw3ICYjNDM7NDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbkBAIC00ODUsNyAmIzQzOzQ4NCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4tXHRcdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiBcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiBcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG5AQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuIFx0XHRwZGUtXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xuLVx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XVwmIzM0OywgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiBcbiBvdXRfdW5tYXA6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIFx0cmV0dXJuO1xuIFxuIGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiBcdGdvdG8gb3V0X3VubWFwO1xuIFxuLWVycm9yX3VubWFwOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBlcnJvcjpcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5AQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCYjMzQ7JXp4LCVkXCYjMzQ7LCBibG9jaywgc2xvdCk7XG4gXG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiBcdGlmIChyZXQgPT0gLUVTVEFMRSlcbiBcdFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzZXJ2ZXItXHUwMDNlZnNfbG9jaykpO1xuIFx0aWYgKG9sZCkge1xuIFx0XHRlc3RhdGUtXHUwMDNlcmVzcG9uc2l2ZV9zZXQgPSBvbGQtXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XG4mIzQzO1x0XHRvbGRfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0XHRpZiAoIW5ld19hbGlzdClcbiBcdFx0XHRuZXdfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZXJ2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlcnZlci5jXG5AQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4gb3V0OlxuIFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTtcbiBcdGlmIChjYW5kaWRhdGUpIHtcbi1cdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpO1xuIFx0XHRrZnJlZShjYW5kaWRhdGUpO1xuIFx0XHRhZnNfZGVjX3NlcnZlcnNfb3V0c3RhbmRpbmcoY2VsbC1cdTAwM2VuZXQpO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwX3NlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbXVsdGlwbGUgZnVuY3Rpb25hbCBidWcgZml4ZXMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGNsaWVudDogZml4aW5nIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSB3aGVuIG1hdGNoaW5nIHBlZXJzIGFyZSBmb3VuZCwgY29ycmVjdGluZyBrdW5tYXBfbG9jYWwgaGFuZGxpbmcgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcyB2aWEgYWZzX2Rpcl9lbmRfaXRlcigpLCBlbnN1cmluZyBvbGRfYWxpc3QgaXMgcHJvcGVybHkgYXNzaWduZWQgaW4gYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoKSwgYW5kIHJlbW92aW5nIGFuIGludmFsaWQga2ZyZWUgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBBRlMgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwODowNDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9hZGRyX2xpc3QuYyBiL2ZzL2Fmcy9hZGRyX2xpc3QuYwppbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NAotLS0gYS9mcy9hZnMvYWRkcl9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2FkZHJfbGlzdC5jCkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCXN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC0mZ3Q7YWRkcnNbbl0ucGVlcjsKIAkJc3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LSZndDthZGRyc1tvXS5wZWVyOwogCi0JCWlmIChwbiA9PSBwbykKJiM0MzsJCWlmIChwbiA9PSBwbykgewomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwkJCW8mIzQzOyYjNDM7OwogCQkJY29udGludWU7CiYjNDM7CQl9CiAJCWlmIChwbiAmbHQ7IHBvKSB7CiAJCQlyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7CiAJCQluJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfZWRpdC5jIGIvZnMvYWZzL2Rpcl9lZGl0LmMKaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCS8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovCiAJZGUgPSAmYW1wO2Jsb2NrLSZndDtkaXJlbnRzW3Nsb3RdOwogCWlmIChkZS0mZ3Q7dS52YWxpZCAhPSAxKQotCQlnb3RvIGVycm9yX3VubWFwOwomIzQzOwkJZ290byBlcnJvcjsKIAogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LAogCQkJICAgbnRvaGwoZGUtJmd0O3Uudm5vZGUpLCBudG9obChkZS0mZ3Q7dS51bmlxdWUpLApAQCAtNDU4LDcgJiM0Mzs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovCiAJbmV4dCA9IGRlLSZndDt1Lmhhc2hfbmV4dDsKIAltZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAogCS8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci0mZ3Q7cHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWQKIAkgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS4KQEAgLTQ4NSw3ICYjNDM7NDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCQlwZGUgPSAmYW1wO3BibG9jay0mZ3Q7ZGlyZW50c1twc107CiAJCXByZXZfbmV4dCA9IHBkZS0mZ3Q7dS5oYXNoX25leHQ7CiAJCWlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7Ci0JCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAkJCXByX3dhcm4oJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqcyYjMzQ7LAogCQkJCXZub2RlLSZndDtmaWQudmlkLCB2bm9kZS0mZ3Q7ZmlkLnZub2RlLCB2bm9kZS0mZ3Q7ZmlkLnVuaXF1ZSwKIAkJCQlpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LApAQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXBkZS0mZ3Q7dS5oYXNoX25leHQgPSBuZXh0OwotCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAl9CiAKIAluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSk7CkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCV9kZWJ1ZygmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XSYjMzQ7LCBuYW1lLSZndDtuYW1lLCBiLCBzbG90KTsKIAogb3V0X3VubWFwOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcik7CiAJa3VubWFwX2xvY2FsKG1ldGEpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIAlyZXR1cm47CiAKIGFscmVhZHlfaW52YWxpZGF0ZWQ6Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwogCWdvdG8gb3V0X3VubWFwOwogCi1lcnJvcl91bm1hcDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogZXJyb3I6CiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsCiAJCQkgICAwLCAwLCAwLCAwLCBuYW1lLSZndDtuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guYwpAQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsCiAKIAlfZW50ZXIoJiMzNDslengsJWQmIzM0OywgYmxvY2ssIHNsb3QpOwogCi0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAKIAlpZiAoZHZub2RlLSZndDtkaXJlY3Rvcnlfc2l6ZSAmbHQ7IGJsZW5kKQogCQlnb3RvIGZhaWw7CkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJcmV0ID0gLUVOT0VOVDsKIGZvdW5kOgotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQotCiBiYWQ6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAJaWYgKHJldCA9PSAtRVNUQUxFKQogCQlhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci0mZ3Q7ZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO3NlcnZlci0mZ3Q7ZnNfbG9jaykpOwogCWlmIChvbGQpIHsKIAkJZXN0YXRlLSZndDtyZXNwb25zaXZlX3NldCA9IG9sZC0mZ3Q7cmVzcG9uc2l2ZV9zZXQ7CiYjNDM7CQlvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAkJaWYgKCFuZXdfYWxpc3QpCiAJCQluZXdfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAl9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CWlmIChpdGVyLSZndDtibG9jaykgewomIzQzOwkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKJiM0MzsJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJfc2lsbHkuYwogICovCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlcnZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuYwpAQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksCiBvdXQ6CiAJYWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTsKIAlpZiAoY2FuZGlkYXRlKSB7Ci0JCWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItJmd0O2VuZHBvaW50X3N0YXRlKSk7CiAJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCWFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLSZndDtuZXQpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBRlMgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gd29ydGggZnV6emluZyDigJMgYXJlIHRoZXJlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBUaGVuIEkmIzM5O2xsIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBmaWxlcyBtb2RpZmllZCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmUgc2V2ZXJhbCBmaXhlcyByZWxhdGVkIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5OgoKKiAgIGBmcy9hZnMvYWRkcl9saXN0LmNgOiBUaGUgZml4IGZvciB0aGUgaW5maW5pdGUgbG9vcCBpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGlzIGludHJpZ3VpbmcuIFRoYXQga2luZCBvZiBidWcgY2FuIGVhc2lseSBsZWFkIHRvIGRlbmlhbC1vZi1zZXJ2aWNlLCBzbyBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCiogICBgZnMvYWZzL2Rpcl9lZGl0LmNgOiBUaGUgZG91YmxlIHVubWFwIGlzc3VlIGluIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBhbm90aGVyIGFyZWEgdGhhdCB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi4gTWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzIGxpa2UgdGhhdCBhcmUgb2Z0ZW4gZnJ1aXRmdWwgdGFyZ2V0cy4gVGhlIHVzZSBvZiBgYWZzX2Rpcl9lbmRfaXRlcmAgaGVyZSBpcyBhbHNvIHNvbWV0aGluZyB0byBjb25zaWRlciwgYXMgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlc2UgZml4ZXMuCiogICBgZnMvYWZzL2Rpcl9zZWFyY2guY2A6IFRoZSByZWZhY3RvcmluZyBpbnZvbHZpbmcgYGt1bm1hcF9sb2NhbGAgYW5kIGBhZnNfZGlyX2VuZF9pdGVyYCBpbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvbXBsZXgsIGFuZCBjb21wbGV4IGNvZGUgb2Z0ZW4gaGFzIGJ1Z3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWZzX2Rpcl9lbmRfaXRlcmAgaXMgaW50ZW5kZWQgdG8gd29yay4KKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IFRoZSB1bmluaXRpYWxpemVkIGBvbGRfYWxpc3RgIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHJhaXNlcyBhIHJlZCBmbGFnLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoqICAgYGZzL2Fmcy9pbnRlcm5hbC5oYDogVGhlIGFkZGl0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBhIGdvb2Qgc2lnbnBvc3QuIFRoYXQgaGludHMgYXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4KKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBUaGUgYGtmcmVlYCBmaXggaW4gYGFmc19sb29rdXBfc2VydmVyYCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIEFGUyBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aWxsIGd1aWRlIGhvdyBJIGJ1aWxkIGEgZnV6emVyIHRoYXQgY2FuIGFjdHVhbGx5IHJlYWNoIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLiBUaGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCB0byBzZWUgd2hpY2ggaGF2ZSB0aGUgYmVzdCBvcHBvcnR1bml0eSB0byBleGVyY2lzZSBhbGwgY29kZSBwYXRocyBpbiB0aGlzIHBhdGNoIHNlcmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCBgZnMvYWZzL0tjb25maWdgLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZpbGUgc3lzdGVtczoKCioqRGl2aW5nIGludG8gdGhlIEFGUyBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL2Fmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtIGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzIG9mIGBjb25maWdgIG9wdGlvbnMsIGxpa2VseSBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnYCBibG9ja3MgdG8gb3JnYW5pemUgcmVsYXRlZCBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBjbGVhcmx5IGRvY3VtZW50ZWQsIHdpdGggY29uY2lzZSBkZXNjcmlwdGlvbnMgZXhwbGFpbmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICBUaGUgbWFpbiAmIzM0O0VuYWJsZSBBRlMgZmlsZSBzeXN0ZW0mIzM0OyBvcHRpb24gLSB0aGlzIHdpbGwgcHJvYmFibHkgYmUgdGhlIHJvb3QgYW5kIEkgY2FuIGV4cGVjdCBpdCBpcyBhIGRlcGVuZGVuY3kgb24gc29tZSBuZXR3b3JrIHN0YWNrIG9wdGlvbnMgYmVpbmcgdHVybmVkIG9uLCBzdWNoIGFzIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YC4KKiAgIEZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdmFyaW91cyBBRlMgZmVhdHVyZXM6IFNob3VsZCB0aGVyZSBiZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGxpa2UgS2VyYmVyb3M/IFdoYXQgYWJvdXQgaGFuZGxpbmcgb2Ygdm9sdW1lIG1hbmFnZW1lbnQgb3IgY2FjaGUgc2V0dGluZ3M/CiogICBEZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZHJpdmVyczogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uIG5ldHdvcmtpbmcgY29tcG9uZW50cywgY3J5cHRvIG1vZHVsZXMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBBRlMgcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8KKiAgIERlZmF1bHQgc2V0dGluZ3M6IEFyZSBzZW5zaWJsZSBkZWZhdWx0cyBwcm92aWRlZCwgb3Igd2lsbCBJIG5lZWQgdG8gbWFudWFsbHkgY29uZmlndXJlIGV2ZXJ5dGhpbmc/IEkgaG9wZSB0aGVyZSBhcmUgcmVhc29uYWJsZSBkZWZhdWx0cyB0aGF0IGEgc3lzYWRtaW4gY2FuIHR3ZWFrLCBhcyBvcHBvc2VkIHRvIHJlcXVpcmluZyBhbGwgcGFyYW1ldGVycyBiZSBleHBsaWNpdGx5IHNldC4KKiAgIEhlbHAgdGV4dDogSG9wZWZ1bGx5LCBlYWNoIG9wdGlvbiBoYXMgZGVzY3JpcHRpdmUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucywgaW5jbHVkaW5nIGFueSBwZXJmb3JtYW5jZSB0cmFkZW9mZnMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEFueSB3YXJuaW5ncyByZWdhcmRpbmcgdGhlIGZlYXR1cmUmIzM5O3MgbWF0dXJpdHkgb3Iga25vd24gYnVncyB3b3VsZCBiZSBhcHByZWNpYXRlZC4KKiAgIEFueSBidWlsZC10aW1lIGNoZWNrcyBvciBlcnJvciBtZXNzYWdlczogSSB3YW50IHRvIGJlIHN1cmUgdGhhdCBJJiMzOTtsbCBiZSB3YXJuZWQgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyBjb25mbGljdCBvciBtaXNjb25maWd1cmF0aW9uLgoKVGhlIHByZXNlbmNlIG9mIGFueSBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUgaW1wb3J0YW50IGFzIHRoZXkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLCBzbyB0aGF0IHdpbGwgYmUgYSBwb2ludCB0byBwYXkgYXR0ZW50aW9uIHRvLgpUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEFGUyYjMzk7cyBjYXBhYmlsaXRpZXMgYXJlLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRvIGN1c3RvbWl6ZSBpdCBmb3IgZGlmZmVyZW50IHN5c3RlbSByZXF1aXJlbWVudHMuIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRlNfRlNDQUNIRVxuICAyODpcdFx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIEFGU19GUz1tIFx1MDAyNlx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFx1MDAyNlx1MDAyNiBGU0NBQ0hFPXlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcbiAgMzI6XHRcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4gIDM2Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXG4gIDM5Olx0XHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XG4gIDQwOlx0XHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBDaGVja3BvaW50OiBEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJiMzOTtzIGxpa2VseSBmaWxlc3lzdGVtLXJlbGF0ZWQsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2Fmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIEFGUy1zcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEFGUyBpcyBiZWluZyBidWlsdCwgbGlua2VkLCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgYE1ha2VmaWxlYCB3aWxsIHJldmVhbCB0aGUga2V5IGNvbXBvbmVudHM6IG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBpbmNsdWRlIHBhdGhzLCBhbnkgc3BlY2lhbCBmbGFncyBvciBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSBBRlMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlc2Ugd2lsbCBnZXQgbWUgb25lIHN0ZXAgY2xvc2VyIHRvIGlzb2xhdGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBidWlsZCBzdHJhdGVneS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zLCBtaXNzaW5nIGRlcGVuZGVuY2llcywgb3IgY29uZmxpY3RpbmcgZmxhZ3MgdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0a2Fmcy15IDo9IFxcXG4gICA3Olx0XHRhZGRyX2xpc3QubyBcXFxuICAgODpcdFx0YWRkcl9wcmVmcy5vIFxcXG4gICA5Olx0XHRjYWxsYmFjay5vIFxcXG4gIDEwOlx0XHRjZWxsLm8gXFxcbiAgMTE6XHRcdGNtX3NlY3VyaXR5Lm8gXFxcbiAgMTI6XHRcdGNtc2VydmljZS5vIFxcXG4gIDEzOlx0XHRkaXIubyBcXFxuICAxNDpcdFx0ZGlyX2VkaXQubyBcXFxuICAxNTpcdFx0ZGlyX3NlYXJjaC5vIFxcXG4gIDE2Olx0XHRkaXJfc2lsbHkubyBcXFxuICAxNzpcdFx0ZHlucm9vdC5vIFxcXG4gIDE4Olx0XHRmaWxlLm8gXFxcbiAgMTk6XHRcdGZsb2NrLm8gXFxcbiAgMjA6XHRcdGZzY2xpZW50Lm8gXFxcbiAgMjE6XHRcdGZzX29wZXJhdGlvbi5vIFxcXG4gIDIyOlx0XHRmc19wcm9iZS5vIFxcXG4gIDIzOlx0XHRpbm9kZS5vIFxcXG4gIDI0Olx0XHRtYWluLm8gXFxcbiAgMjU6XHRcdG1pc2MubyBcXFxuICAyNjpcdFx0bW50cHQubyBcXFxuICAyNzpcdFx0cm90YXRlLm8gXFxcbiAgMjg6XHRcdHJ4cnBjLm8gXFxcbiAgMjk6XHRcdHNlY3VyaXR5Lm8gXFxcbiAgMzA6XHRcdHNlcnZlci5vIFxcXG4gIDMxOlx0XHRzZXJ2ZXJfbGlzdC5vIFxcXG4gIDMyOlx0XHRzdXBlci5vIFxcXG4gIDMzOlx0XHRzeW1saW5rLm8gXFxcbiAgMzQ6XHRcdHZhbGlkYXRpb24ubyBcXFxuICAzNTpcdFx0dmxjbGllbnQubyBcXFxuICAzNjpcdFx0dmxfYWxpYXMubyBcXFxuICAzNzpcdFx0dmxfbGlzdC5vIFxcXG4gIDM4Olx0XHR2bF9wcm9iZS5vIFxcXG4gIDM5Olx0XHR2bF9yb3RhdGUubyBcXFxuICA0MDpcdFx0dm9sdW1lLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFGUyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgQUZTLCB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtIGNsaWVudCwgd2l0aGluIGEgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIFNpbmNlIGl0JiMzOTtzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBleGlzdHMgKmluLXRyZWUqIGluIExpbnV4LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgSSAqY2FuKiByZWFjaCBhbmQgZnV6eiBpdC4gSXQmIzM5O3MgbW91bnRhYmxlIHVzaW5nIHRoZSBzdGFuZGFyZCBgbW91bnQgLXQgYWZzYCBjb21tYW5kLCBzbyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIHJlZ3VsYXIgVkZTIHN5c2NhbGxzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBwcm9iaW5nIGFuZCBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBmdW5jdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRvIGludmVzdGlnYXRlOgoKKiAgIGBmcy9hZnMvYWRkcl9saXN0LmNgOiBzcGVjaWZpY2FsbHksIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAKKiAgIGBmcy9hZnMvZGlyX2VkaXQuY2A6IHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gaXMgb24gdGhlIHJhZGFyCiogICBgZnMvYWZzL2Rpcl9zZWFyY2guY2A6IEkmIzM5O2xsIGJlIGNoZWNraW5nIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YAoqICAgYGZzL2Fmcy9mc19wcm9iZS5jYDogYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBpcyBuZXh0CiogICBgZnMvYWZzL3NlcnZlci5jYDogRmluYWxseSwgYGFmc19sb29rdXBfc2VydmVyYCB3aWxsIGJlIHNjcnV0aW5pemVkCgpUaGUgY29yZSBvZiBteSBhcHByb2FjaCBpcyB0byBkZXRlcm1pbmUgaWYgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUg4oCTIGFyZSB0aGV5IG5vbi1zdGF0aWMsIGV4cG9ydGVkLCBvciBhY3QgYXMgZW50cnlwb2ludHMgdGhhdCBJIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgQUZTIGFyY2hpdGVjdHVyZSB0byBmb3JtdWxhdGUgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBmcy9hZnMvYWRkcl9saXN0LmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSAzOTQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRyZXR1cm47XG4gMzgxOlx0XHR9XG4gMzgyOlx0XHRpZiAoIW5ld19hbGlzdCkge1xuIDM4MzpcdFx0XHQvKiBEZWFkIHNlcnZlci4gIEp1c3QgcmVtb3ZlIGFsbC4gKi9cbiAzODQ6XHRcdFx0Zm9yICg7IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRyczsgbyYjNDM7JiM0MzspXG4gMzg1Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xuIDM4NjpcdFx0XHRyZXR1cm47XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXG4gMzkwOlx0XHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXG4gMzkxOlx0XHQgKiByZWNvcmQuXG4gMzkyOlx0XHQgKi9cbiAzOTM6XHRcdHdoaWxlIChuIFx1MDAzYyBuZXdfYWxpc3QtXHUwMDNlbnJfYWRkcnMgXHUwMDI2XHUwMDI2IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRycykge1xuIDM5NDpcdFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiAzOTU6XHRcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gMzk2Olx0XG4gMzk3Olx0XHRcdGlmIChwbiA9PSBwbykge1xuIDM5ODpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDM5OTpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQwMTpcdFx0XHR9XG4gNDAyOlx0XHRcdGlmIChwbiBcdTAwM2MgcG8pIHtcbiA0MDM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7XG4gNDA0Olx0XHRcdFx0biYjNDM7JiM0Mzs7XG4gNDA1Olx0XHRcdH0gZWxzZSB7XG4gNDA2Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG8sIDApO1xuIDQwNzpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwODpcdFx0XHR9XG4gNDA5Olx0XHR9XG4gNDEwOlx0XG4gNDExOlx0XHRpZiAobiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxMjpcdFx0XHRmb3IgKDsgbiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBuJiM0MzsmIzQzOylcbiA0MTM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlciwgZGF0YSk7XG4gNDE0Olx0XHRpZiAobyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxNTpcdFx0XHRmb3IgKDsgbyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBvJiM0MzsmIzQzOylcbiA0MTY6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XG4gNDE3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgYW5kIEl0cyBDYWxsZXJzKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGRpZ2dpbmcgaW50byB0aGlzIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3Qgc2lnbmF0dXJlIOKAkyB0aGUgaW5wdXQgcGFyYW1ldGVycywgdGhlIHJldHVybiB0eXBlLCB0aGUgd2hvbGUgc2hlYmFuZy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIGlzIGNydWNpYWwuIE9uY2UgSSYjMzk7dmUgZ290IHRoYXQgc3RyYWlnaHQsIEkgY2FuIG1vdmUgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscyBpcyBnb2luZyB0byBwcm92aWRlIHRoZSB0cnVlIGluc2lnaHRzIGludG8gdGhpcyBjb2Rl4oCZcyBmdW5jdGlvbmFsaXR5IGFuZCBwdXJwb3NlLiBUaGUgc2lnbmF0dXJlIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwcm9ncmFtIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmM9MzI3PWludCBhZnNfbWVyZ2VfZnNfYWRkcjYoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0LFxuLS1cbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNjgtICovXG5mcy9hZnMvYWRkcl9saXN0LmM6MzY5OnZvaWQgYWZzX3NldF9wZWVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNzAtXHRcdFx0ICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0LFxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jPTIzOD1pbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy0yNjYtXHRpZiAob2xkX2FsaXN0ICE9IG5ld19hbGlzdClcbmZzL2Fmcy9mc19wcm9iZS5jOjI2NzpcdFx0YWZzX3NldF9wZWVyX2FwcGRhdGEoc2VydmVyLCBvbGRfYWxpc3QsIG5ld19hbGlzdCk7XG5mcy9hZnMvZnNfcHJvYmUuYy0yNjgtXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTAyMT1leHRlcm4gaW50IGFmc19tZXJnZV9mc19hZGRyNihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWRkcixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwMjItXHRcdFx0ICAgICAgX19iZTMyICp4ZHIsIHUxNiBwb3J0KTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwMjM6dm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuZnMvYWZzL2ludGVybmFsLmgtMTAyNC1cdFx0XHQgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QsXG4tLVxuZnMvYWZzL3NlcnZlci5jPTQ2NT1zdGF0aWMgdm9pZCBhZnNfc2VydmVyX2Rlc3Ryb3llcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvYWZzL3NlcnZlci5jLTQ4Ny1cdGlmIChlc3RhdGUpXG5mcy9hZnMvc2VydmVyLmM6NDg4Olx0XHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIGVzdGF0ZS1cdTAwM2VhZGRyZXNzZXMsIE5VTEwpO1xuZnMvYWZzL3NlcnZlci5jLTQ4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGl0cyBDb250ZXh0KioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0cmFjZSBpdHMgZGVjbGFyYXRpb24gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUsIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBvdmVyYWxsIGludGVyYWN0aW9uIGlzIGtleS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgaW52b2tlZCBpbiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgY2hhbmdlcyBtaWdodCBhZmZlY3QgdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgdGhlIGZ1bmN0aW9uIGFjY2Vzc2VzLCBpbmNsdWRpbmcgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgYmVmb3JlIEkgbWFrZSBhbnkgY2hhbmdlcywgb3IgZXZlbiBqdXN0IGFzc2VzcyB0aGUgaW1wYWN0IG9mIGV4aXN0aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNjg9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4MC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgxOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzgyLVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE2PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI2LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjc6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MjgtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTEzLVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTQ6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTUtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjQtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI1Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyNi1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQUZTIFNlcnZlciBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgYGFmc19sb29rdXBfc2VydmVyYCBhbmQgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQUZTIGZpbGVzZXJ2ZXIuIGBhZnNfbG9va3VwX3NlcnZlcmAgY2xlYXJseSBwbGF5cyBhIHJvbGUgaW4gdGhlIGluaXRpYWwgc2VydmVyIGxvb2t1cCBhbmQgY29ubmVjdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWNoaW5nIG9yIGhhbmRsaW5nIGFueSBzb3J0IG9mIHNlcnZlciBkaXNjb3Zlcnk/IFRoZW4sIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgc2VlbXMgbGlrZSBhIHByb2JpbmcgZnVuY3Rpb24g4oCTIHBlcmhhcHMgdXNlZCB0byBjaGVjayBzZXJ2ZXIgaGVhbHRoLCBhdmFpbGFiaWxpdHksIG9yIGZpbGUgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgb3IgYWN0aW9ucyBmbG93IGluIGVhY2ggZnVuY3Rpb24gYW5kIGhvdyB0aGV5IG1pZ2h0IG92ZXJsYXAgb3Igd29yayB0b2dldGhlciB0byBhY2hpZXZlIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIHJvYnVzdG5lc3MuIEkga25vdyB0aGF0IGxvb2tpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY2xpZW50IGZpbmRzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VydmVyLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIG1ha2Ugc3VyZSB0aGUgc2VydmVyIGlzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfbG9va3VwX3NlcnZlcnxhZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZnNfcHJvYmUuYz0xMzg9dm9pZCBhZnNfZmlsZXNlcnZlcl9wcm9iZV9yZXN1bHQoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jLTIzNy0gKi9cbmZzL2Fmcy9mc19wcm9iZS5jOjIzODppbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9mc19wcm9iZS5jLTIzOS1cdFx0XHQgICAgc3RydWN0IGFmc19hZGRyX2xpc3QgKm5ld19hbGlzdCwgc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jPTM4OD1zdGF0aWMgdm9pZCBhZnNfZGlzcGF0Y2hfZnNfcHJvYmUoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy00MDAtXG5mcy9hZnMvZnNfcHJvYmUuYzo0MDE6XHRhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihuZXQsIHNlcnZlciwgTlVMTCwga2V5KTtcbmZzL2Fmcy9mc19wcm9iZS5jLTQwMi1cdGFmc19wdXRfc2VydmVyKG5ldCwgc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3B1dF9wcm9iZSk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTI0OT1leHRlcm4gdm9pZCBhZnNfZmlsZXNlcnZlcl9wcm9iZV9yZXN1bHQoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2ludGVybmFsLmg6MTI1MDppbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNTEtXHRcdFx0ICAgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpuZXdfYWxpc3QsIHN0cnVjdCBrZXkgKmtleSk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTU0OT1zdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2ZpbmRfc2VydmVyKGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NTA6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTE1NTEtZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfZ2V0X3NlcnZlcihzdHJ1Y3QgYWZzX3NlcnZlciAqLCBlbnVtIGFmc19zZXJ2ZXJfdHJhY2UpO1xuLS1cbmZzL2Fmcy9zZXJ2ZXIuYz0xNTI9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfbG9va3VwX2FkZHJzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL3NlcnZlci5jLTE3Ny0gKi9cbmZzL2Fmcy9zZXJ2ZXIuYzoxNzg6c3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5LFxuZnMvYWZzL3NlcnZlci5jLTE3OS1cdFx0XHRcdCAgICAgY29uc3QgdXVpZF90ICp1dWlkLCB1MzIgYWRkcl92ZXJzaW9uKVxuLS1cbmZzL2Fmcy9zZXJ2ZXIuYy0yMzQtXG5mcy9hZnMvc2VydmVyLmM6MjM1Olx0XHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcbmZzL2Fmcy9zZXJ2ZXIuYy0yMzYtXHRcdGlmIChyZXQpXG4tLVxuZnMvYWZzL3NlcnZlci5jPTU0MT1zdGF0aWMgbm9pbmxpbmUgYm9vbCBhZnNfdXBkYXRlX3NlcnZlcl9yZWNvcmQoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuLS1cbmZzL2Fmcy9zZXJ2ZXIuYy01NzQtXHRpZiAoc2VydmVyLVx1MDAzZWFkZHJfdmVyc2lvbiAhPSBhbGlzdC1cdTAwM2V2ZXJzaW9uKVxuZnMvYWZzL3NlcnZlci5jOjU3NTpcdFx0YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIob3AtXHUwMDNlbmV0LCBzZXJ2ZXIsIGFsaXN0LCBrZXkpO1xuZnMvYWZzL3NlcnZlci5jLTU3Ni1cbi0tXG5mcy9hZnMvc2VydmVyX2xpc3QuYz0yNz1zdHJ1Y3QgYWZzX3NlcnZlcl9saXN0ICphZnNfYWxsb2Nfc2VydmVyX2xpc3Qoc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSxcbi0tXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04MS1cbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jOjgyOlx0XHRzZXJ2ZXIgPSBhZnNfbG9va3VwX3NlcnZlcih2b2x1bWUtXHUwMDNlY2VsbCwga2V5LCBcdTAwMjZ2bGRiLVx1MDAzZWZzX3NlcnZlcltpXSxcbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jLTgzLVx0XHRcdFx0XHQgICB2bGRiLVx1MDAzZWFkZHJfdmVyc2lvbltpXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGlyZWN0b3J5IEJsb2NrIERpc2NvdmVyeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbG9va3VwIGxvZ2ljLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGFmc19kaXJfZmluZF9ibG9ja2AgYW5kIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgbGlrZWx5IGNvcmUgY29tcG9uZW50cyBpbnZvbHZlZCBpbiByZXNvbHZpbmcgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIGRpcmVjdG9yeSBibG9ja3Mgd2l0aGluIHRoZSBBRlMgZmlsZSBzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIG92ZXJhbGwgaGlnaC1sZXZlbCBzZWFyY2ggc3RyYXRlZ3ksIHBvdGVudGlhbGx5IGhhbmRsaW5nIHRoaW5ncyBsaWtlIGNhY2hlIGxvb2t1cHMgb3IgaXRlcmF0aW5nIHRocm91Z2ggdmFyaW91cyBpbmRleCBzdHJ1Y3R1cmVzLiBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCwgc291bmRzIGxpa2UgYSBtb3JlIGdyYW51bGFyIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGluIHRoZSBBRlMgY29kZWJhc2UsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIHVzZWQgdG8gc2VhcmNoIHNwZWNpZmljIGhhc2ggYnVja2V0cy4gVGhpcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgYWNjZXNzIG9yIHNpbXBseSBhIHdheSB0byBvcmdhbml6ZSBvdXIgZGF0YS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHRoZXkgY2FsbGVkIHNlcXVlbnRpYWxseSwgb3IgaXMgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCByZXBlYXRlZGx5IGludm9rZXMgdW50aWwgdGhlIHRhcmdldCBibG9jayBpcyBsb2NhdGVkPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZWlyIHByb3RvdHlwZXMgYW5kIGNhbGwgZ3JhcGhzIHRvIHNlZSB3aGF0IGRhdGEgdGhleSB3b3JrIHdpdGggYW5kIGhvdyB0aGV5IGludGVyYWN0IHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgcmVzcG9uc2liaWxpdHkuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiBBRlMgZGlyZWN0b3J5IGJsb2NrIGRpc2NvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrfGFmc19kaXJfc2VhcmNoX2J1Y2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6NDIzOlx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cbmZzL2Fmcy9kaXJfZWRpdC5jOjQzNjpcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuZnMvYWZzL2Rpcl9lZGl0LmMtNDM3LVx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX2VkaXQuYy00ODAtXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XHRcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYik7XG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXHRcdGlmICghcGJsb2NrKVxuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9NTc9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzo2Nzp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTE5LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjA6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTIxLVx0XHRcdCAgc3RydWN0IGFmc19maWQgKl9maWQpXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyNzpcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soaXRlciwgMCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cdGlmICghbWV0YSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MTQ5Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE1MC1cdFx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlx0XHRyZXQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cdFx0dXBfcmVhZChcdTAwMjZkdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTEyOT1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMzA6dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spO1xuZnMvYWZzL2ludGVybmFsLmg6MTEzMTppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMi1cdFx0XHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTYKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogODMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFGUyBGaWxlc3lzdGVtIFBhdGNoIEFuYWx5c2lzOiBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBBRlMgZmlsZXN5c3RlbSBkcml2ZXIsIGBmcy9hZnNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25hbCBidWdzLiBGaXJzdCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBhZGRyZXNzIGxpc3QgY29tcGFyaXNvbi4gVGhlbiwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGhhcyBiZWVuIHJlZmFjdG9yZWQgdG8gYWRkcmVzcyB1bm1hcHBpbmcgaXNzdWVzLCBjZW50cmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gV2UgYWxzbyBoYXZlIGEgZml4IGluIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgd2hlcmUgYG9sZF9hbGlzdGAgd2FzIG5vdCBhc3NpZ25lZCBjb3JyZWN0bHksIGFuZCBmaW5hbGx5LCBhIHJvZ3VlIGBrZnJlZWAgY2FsbCBoYXMgYmVlbiByZW1vdmVkIGZyb20gYGFmc19sb29rdXBfc2VydmVyYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gR2l2ZW4gdGhhdCBBRlMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIHN5emthbGxlciBpcyBhIHNvbGlkIGNob2ljZSBoZXJlLiBJdCYjMzk7cyB3ZWxsLWVxdWlwcGVkIHRvIG1vdW50IGFuZCBmdXp6IG5ldHdvcmsgZmlsZXN5c3RlbXMsIGNyZWF0ZSBzb2NrZXRzLCBhbmQgZ2VuZXJhbGx5IHN0cmVzcyB0aGUga2VybmVsJiMzOTtzIGZpbGVzeXN0ZW0gY29tcG9uZW50cy4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgYSBnb29kIHRyYWNrIHJlY29yZCB3aXRoIHRoaXMga2luZCBvZiB3b3JrIGlzIGEgbWFqb3IgcGx1cy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgQUZTX0ZTYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbmNsdWRlIGBJTkVUYCwgYEFGX1JYUlBDYCwgYEROU19SRVNPTFZFUmAsIGBORVRGU19TVVBQT1JUYCwgYW5kIGBDUllQVE9fS1JCNWAuIFRoaXMgYWxsIHNlZW1zIGNvcnJlY3QgZm9yIGEgbmV0d29yayBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBBRlNfRlNgIGlzIGVuYWJsZWQuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMuIEFmdGVyIGFuYWx5c2lzLCB0aGVzZSBhcmUgYWxsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYW5kIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoaXMgY29uZmlybXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb2N1cyBvbi4KClNvLCBzdW1taW5nIHVwOiBUaGUgcGF0Y2ggZml4ZXMgY3JpdGljYWwgYnVncyBhY3Jvc3MgYSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSBieSBzeXprYWxsZXIgd2hpY2ggdXNlcyBuZXR3b3JrIGZpbGUgc3lzdGVtcyBhbmQgbG9jYWwgZmlsZSBzeXN0ZW1zLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVudHJ5cG9pbnRzIGFyZSBhbGwgcHJvcGVybHkgaWRlbnRpZmllZC4gSSBzaG91bGQgc2V0IHRoZSByZXN1bHRzIHRvOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O0ZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIChpbmZpbml0ZSBsb29wLCB1bm1hcCBpc3N1ZXMsIGFkZHJlc3MgbGlzdCBhc3NpZ25tZW50LCBrZnJlZSkgaW4gQUZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OwoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrJiMzNDssICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OywgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LCAmIzM0O2Fmc19sb29rdXBfc2VydmVyJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QUZTX0ZTJiMzNDtdYAoKVGhlbiBJIHdpbGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9zZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9zZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwODowNDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9hZGRyX2xpc3QuYyBiL2ZzL2Fmcy9hZGRyX2xpc3QuYwppbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NAotLS0gYS9mcy9hZnMvYWRkcl9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2FkZHJfbGlzdC5jCkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCXN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC0mZ3Q7YWRkcnNbbl0ucGVlcjsKIAkJc3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LSZndDthZGRyc1tvXS5wZWVyOwogCi0JCWlmIChwbiA9PSBwbykKJiM0MzsJCWlmIChwbiA9PSBwbykgewomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwkJCW8mIzQzOyYjNDM7OwogCQkJY29udGludWU7CiYjNDM7CQl9CiAJCWlmIChwbiAmbHQ7IHBvKSB7CiAJCQlyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7CiAJCQluJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfZWRpdC5jIGIvZnMvYWZzL2Rpcl9lZGl0LmMKaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCS8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovCiAJZGUgPSAmYW1wO2Jsb2NrLSZndDtkaXJlbnRzW3Nsb3RdOwogCWlmIChkZS0mZ3Q7dS52YWxpZCAhPSAxKQotCQlnb3RvIGVycm9yX3VubWFwOwomIzQzOwkJZ290byBlcnJvcjsKIAogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LAogCQkJICAgbnRvaGwoZGUtJmd0O3Uudm5vZGUpLCBudG9obChkZS0mZ3Q7dS51bmlxdWUpLApAQCAtNDU4LDcgJiM0Mzs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovCiAJbmV4dCA9IGRlLSZndDt1Lmhhc2hfbmV4dDsKIAltZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAogCS8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci0mZ3Q7cHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWQKIAkgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS4KQEAgLTQ4NSw3ICYjNDM7NDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCQlwZGUgPSAmYW1wO3BibG9jay0mZ3Q7ZGlyZW50c1twc107CiAJCXByZXZfbmV4dCA9IHBkZS0mZ3Q7dS5oYXNoX25leHQ7CiAJCWlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7Ci0JCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAkJCXByX3dhcm4oJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqcyYjMzQ7LAogCQkJCXZub2RlLSZndDtmaWQudmlkLCB2bm9kZS0mZ3Q7ZmlkLnZub2RlLCB2bm9kZS0mZ3Q7ZmlkLnVuaXF1ZSwKIAkJCQlpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LApAQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXBkZS0mZ3Q7dS5oYXNoX25leHQgPSBuZXh0OwotCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAl9CiAKIAluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSk7CkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCV9kZWJ1ZygmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XSYjMzQ7LCBuYW1lLSZndDtuYW1lLCBiLCBzbG90KTsKIAogb3V0X3VubWFwOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcik7CiAJa3VubWFwX2xvY2FsKG1ldGEpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIAlyZXR1cm47CiAKIGFscmVhZHlfaW52YWxpZGF0ZWQ6Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwogCWdvdG8gb3V0X3VubWFwOwogCi1lcnJvcl91bm1hcDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogZXJyb3I6CiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsCiAJCQkgICAwLCAwLCAwLCAwLCBuYW1lLSZndDtuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guYwpAQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsCiAKIAlfZW50ZXIoJiMzNDslengsJWQmIzM0OywgYmxvY2ssIHNsb3QpOwogCi0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAKIAlpZiAoZHZub2RlLSZndDtkaXJlY3Rvcnlfc2l6ZSAmbHQ7IGJsZW5kKQogCQlnb3RvIGZhaWw7CkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJcmV0ID0gLUVOT0VOVDsKIGZvdW5kOgotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQotCiBiYWQ6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAJaWYgKHJldCA9PSAtRVNUQUxFKQogCQlhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci0mZ3Q7ZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO3NlcnZlci0mZ3Q7ZnNfbG9jaykpOwogCWlmIChvbGQpIHsKIAkJZXN0YXRlLSZndDtyZXNwb25zaXZlX3NldCA9IG9sZC0mZ3Q7cmVzcG9uc2l2ZV9zZXQ7CiYjNDM7CQlvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAkJaWYgKCFuZXdfYWxpc3QpCiAJCQluZXdfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAl9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CWlmIChpdGVyLSZndDtibG9jaykgewomIzQzOwkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKJiM0MzsJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJfc2lsbHkuYwogICovCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlcnZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuYwpAQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksCiBvdXQ6CiAJYWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTsKIAlpZiAoY2FuZGlkYXRlKSB7Ci0JCWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItJmd0O2VuZHBvaW50X3N0YXRlKSk7CiAJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCWFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLSZndDtuZXQpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgd2lsbCBkbyB0aGUgdHJpY2suIFdlIGhhdmUgYSBjaGFuZ2UgaW4gYGZzL2Fmcy9hZGRyX2xpc3QuY2AgdG8gY29uc2lkZXIsIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgYWRqdXN0bWVudCB0byB0aGUgbG9naWMgd2l0aGluIHRoZSBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdGhlIGl0ZXJhdGlvbiBpbiB0aGUgYGZvcmAgbG9vcCBpZiBgcG5gIGFuZCBgcG9gIGFyZSB0aGUgc2FtZTsgdGhpcyBpcyB0aGUga2V5IHBpZWNlIHRvIHVuZGVyc3RhbmRpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS01TQU4gbWlnaHQgcGljayB1cC4gSXQgc2VlbXMgbGlrZSBpdCBwcmV2ZW50cyBzb21lIG9mIHRoZSBpdGVyYXRpb24gaW4gdGhlIGxvb3AgaWYgYHBuYCBhbmQgYHBvYCBhcmUgdGhlIHNhbWUuIE5vdyBJIGhhdmUgdG8gZGV0ZXJtaW5lIHdoYXQgYHBuYCBhbmQgYHBvYCBhcmUgYW5kIGlmIHRoZXkgYXJlIGV2ZXIgTlVMTCwgb3IgaG93IHRoZXkgYXJlIHNldC4gQSBzdGFuZGFyZCBLQVNBTiBjaGVjayBpcyBsaWtlbHkgdG8gZGV0ZWN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgcHJlc2VudCwgYnV0IHNpbmNlIHRoZXNlIGxvb2sgbGlrZSBwZWVycywgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBtYXkgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGEgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRyZXR1cm47XG4gMzgxOlx0XHR9XG4gMzgyOlx0XHRpZiAoIW5ld19hbGlzdCkge1xuIDM4MzpcdFx0XHQvKiBEZWFkIHNlcnZlci4gIEp1c3QgcmVtb3ZlIGFsbC4gKi9cbiAzODQ6XHRcdFx0Zm9yICg7IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRyczsgbyYjNDM7JiM0MzspXG4gMzg1Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xuIDM4NjpcdFx0XHRyZXR1cm47XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXG4gMzkwOlx0XHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXG4gMzkxOlx0XHQgKiByZWNvcmQuXG4gMzkyOlx0XHQgKi9cbiAzOTM6XHRcdHdoaWxlIChuIFx1MDAzYyBuZXdfYWxpc3QtXHUwMDNlbnJfYWRkcnMgXHUwMDI2XHUwMDI2IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRycykge1xuIDM5NDpcdFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiAzOTU6XHRcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gMzk2Olx0XG4gMzk3Olx0XHRcdGlmIChwbiA9PSBwbykge1xuIDM5ODpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDM5OTpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQwMTpcdFx0XHR9XG4gNDAyOlx0XHRcdGlmIChwbiBcdTAwM2MgcG8pIHtcbiA0MDM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7XG4gNDA0Olx0XHRcdFx0biYjNDM7JiM0Mzs7XG4gNDA1Olx0XHRcdH0gZWxzZSB7XG4gNDA2Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG8sIDApO1xuIDQwNzpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwODpcdFx0XHR9XG4gNDA5Olx0XHR9XG4gNDEwOlx0XG4gNDExOlx0XHRpZiAobiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxMjpcdFx0XHRmb3IgKDsgbiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBuJiM0MzsmIzQzOylcbiA0MTM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlciwgZGF0YSk7XG4gNDE0Olx0XHRpZiAobyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxNTpcdFx0XHRmb3IgKDsgbyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBvJiM0MzsmIzQzOylcbiA0MTY6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XG4gNDE3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBBRlM6IENhdGNoaW5nIGFuIEluZmluaXRlIExvb3AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIG92ZXIgdGhpcyBBRlMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyBhIGNsYXNzaWM6IGEgbmFzdHkgaW5maW5pdGUgbG9vcCBpbiBgZnMvYWZzL2FkZHJfbGlzdC5jYC4gVGhlIHJvb3QgY2F1c2U/IGBwbmAgYW5kIGBwb2AgZW5kIHVwIGJlaW5nIHRoZSBzYW1lIHZhbHVlLCBidXQgbmVpdGhlciBgbmAgbm9yIGBvYCBhcmUgaW5jcmVtZW50ZWQsIHdoaWNoIG1lYW5zIHRoZSBsb29wIHdpbGwgbmV2ZXIgdGVybWluYXRlLiAgVGhhdCYjMzk7cyBhIGd1YXJhbnRlZWQgaGFuZywgYSB0b3RhbCBzb2Z0bG9ja3VwIOKAkyBjcml0aWNhbCEgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBhZGRyZXNzZWQgaW4gdGhlIGZpeC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNoYW5nZXMuICBXZSBoYXZlIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIGBmcy9hZnMvZGlyX2VkaXQuY2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdC8qIERpZG4mIzM5O3QgZmluZCB0aGUgZGlyZW50IHRvIGNsb2JiZXIuICBSZS1kb3dubG9hZC4gKi9cbiA0MjY6XHRcdFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfbm9lbnQsXG4gNDI3Olx0XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQyODpcdFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIodm5vZGUsIGFmc19kaXJfaW52YWxpZF9lZGl0X3JlbV93cm9uZ19uYW1lKTtcbiA0Mjk6XHRcdFx0Z290byBvdXRfdW5tYXA7XG4gNDMwOlx0XHR9XG4gNDMxOlx0XG4gNDMyOlx0XHRlbnRyeSA9IGZvdW5kO1xuIDQzMzpcdFx0YiAgICA9IGVudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDM0Olx0XHRzbG90ID0gZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcbiA0MzU6XHRcbiA0MzY6XHRcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuIDQzNzpcdFx0aWYgKCFibG9jaylcbiA0Mzg6XHRcdFx0Z290byBlcnJvcjtcbiA0Mzk6XHRcdGlmICghdGVzdF9iaXQoQUZTX1ZOT0RFX0RJUl9WQUxJRCwgXHUwMDI2dm5vZGUtXHUwMDNlZmxhZ3MpKVxuIDQ0MDpcdFx0XHRnb3RvIGFscmVhZHlfaW52YWxpZGF0ZWQ7XG4gNDQxOlx0XG4gNDQyOlx0XHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIDQ0MzpcdFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIDQ0NDpcdFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbiA0NDU6XHRcdFx0Z290byBlcnJvcjtcbiA0NDY6XHRcbiA0NDc6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxuIDQ0ODpcdFx0XHRcdCAgIG50b2hsKGRlLVx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cdTAwM2V1LnVuaXF1ZSksXG4gNDQ5Olx0XHRcdFx0ICAgbmFtZS1cdTAwM2VuYW1lKTtcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIEFkanVzdCB0aGUgYml0bWFwLiAqL1xuIDQ1MjpcdFx0YWZzX2NsZWFyX2NvbnRpZ19iaXRzKGJsb2NrLCBzbG90LCBpdGVyLm5yX3Nsb3RzKTtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIEFkanVzdCB0aGUgYWxsb2NhdGlvbiBjb3VudGVyLiAqL1xuIDQ1NTpcdFx0aWYgKGIgXHUwMDNjIEFGU19ESVJfQkxPQ0tTX1dJVEhfQ1RSKVxuIDQ1NjpcdFx0XHRtZXRhLVx1MDAzZW1ldGEuYWxsb2NfY3Ryc1tiXSAmIzQzOz0gaXRlci5ucl9zbG90cztcbiA0NTc6XHRcbiA0NTg6XHRcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIDQ1OTpcdFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIDQ2MDpcdFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gNDYzOlx0XHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbiA0NjQ6XHRcdCAqL1xuIDQ2NTpcdFx0aWYgKCFpdGVyLnByZXZfZW50cnkpIHtcbiA0NjY6XHRcdFx0X19iZTE2IHByZXZfbmV4dCA9IG1ldGEtXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0XHRpZiAodW5saWtlbHkocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkpIHtcbiA0Njk6XHRcdFx0XHRwcl93YXJuKFwmIzM0OyVsbHg6JWxseDoleDogbm90IGhlYWQgb2YgY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCYjMzQ7LFxuIDQ3MDpcdFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIDQ3MTpcdFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbiA0NzI6XHRcdFx0XHRcdG5hbWUtXHUwMDNlbGVuLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQ3MzpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gNDc0Olx0XHRcdH1cbiA0NzU6XHRcdFx0bWV0YS1cdTAwM2VtZXRhLmhhc2h0YWJsZVtpdGVyLmJ1Y2tldF0gPSBuZXh0O1xuIDQ3NjpcdFx0fSBlbHNlIHtcbiA0Nzc6XHRcdFx0dW5zaWduZWQgaW50IHBiID0gaXRlci5wcmV2X2VudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDc4Olx0XHRcdHVuc2lnbmVkIGludCBwcyA9IGl0ZXIucHJldl9lbnRyeSAlIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQ3OTpcdFx0XHRfX2JlMTYgcHJldl9uZXh0O1xuIDQ4MDpcdFxuIDQ4MTpcdFx0XHRwYmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXHUwMDI2aXRlciwgcGIpO1xuIDQ4MjpcdFx0XHRpZiAoIXBibG9jaylcbiA0ODM6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ4NDpcdFx0XHRwZGUgPSBcdTAwMjZwYmxvY2stXHUwMDNlZGlyZW50c1twc107XG4gNDg1Olx0XHRcdHByZXZfbmV4dCA9IHBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiA0ODY6XHRcdFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcbiA0ODc6XHRcdFx0XHRwcl93YXJuKFwmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCYjMzQ7LFxuIDQ4ODpcdFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIDQ4OTpcdFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbiA0OTA6XHRcdFx0XHRcdG5hbWUtXHUwMDNlbGVuLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQ5MTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gNDkyOlx0XHRcdH1cbiA0OTM6XHRcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbiA0OTQ6XHRcdH1cbiA0OTU6XHRcbiA0OTY6XHRcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbiA0OTc6XHRcbiA0OTg6XHRcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24pO1xuIDQ5OTpcdFx0YWZzX3N0YXRfdih2bm9kZSwgbl9kaXJfcm0pO1xuIDUwMDpcdFx0X2RlYnVnKFwmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XVwmIzM0OywgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiA1MDE6XHRcbiA1MDI6XHRvdXRfdW5tYXA6XG4gNTAzOlx0XHRhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpO1xuIDUwNDpcdFx0a3VubWFwX2xvY2FsKG1ldGEpO1xuIDUwNTpcdFx0X2xlYXZlKFwmIzM0O1wmIzM0Oyk7XG4gNTA2Olx0XHRyZXR1cm47XG4gNTA3Olx0XG4gNTA4Olx0YWxyZWFkeV9pbnZhbGlkYXRlZDpcbiA1MDk6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIDUxMDpcdFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gNTExOlx0XHRnb3RvIG91dF91bm1hcDtcbiA1MTI6XHRcbiA1MTM6XHRlcnJvcjpcbiA1MTQ6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBRlMgQ29kZTogQmxvY2sgSXRlcmF0aW9uIGFuZCBTZXJ2ZXIgUHJvYmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZnMvYWZzL2Rpcl9lZGl0LmNgLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB3ZSB3ZXJlIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgYGJsb2NrYCBhbmQgYHBibG9ja2AgdXNpbmcgdGhlIGBpdGVyYCBzdHJ1Y3QuIFdlIHVzZWQgdG8gY2FsbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgZGlyZWN0bHksIGJ1dCBpdCB3YXMgcG9zc2libGUgdGhhdCBgaXRlci5ibG9ja2AgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgaW4gYSBiYWQgc3RhdGXigJRlaXRoZXIgc3RpbGwgc2V0IGFmdGVyIHVzZSBvciB1bm1hcHBlZCBhdCB0aGUgd3JvbmcgdGltZSwgb3IgcGVyaGFwcyBldmVuIHVubWFwcGVkIHR3aWNlISBUaGUgaW50cm9kdWN0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcilgIGlzIHNtYXJ0LiBJdCBjZW50cmFsaXplcyB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGwgYW5kIGFsc28gY2xlYXJzIGBpdGVyLSZndDtibG9jayA9IE5VTExgLiBUaGlzIGlzIGEgbXVjaCBjbGVhbmVyIGFwcHJvYWNoLCBlbnN1cmluZyB0aGUgdW5tYXBwaW5nIGFuZCBjbGVhcmluZyBvY2N1ciBjb25zaXN0ZW50bHkgYXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBvciBvbiBlcnJvciB2aWEgdGhlIGBvdXRfdW5tYXBgIGxhYmVsLiBUaGlzIHNob3VsZCBwcmV2ZW50IHRob3NlIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgSSBsaWtlIHRoaXMhCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgbW92ZSBvdmVyIHRvIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjU4LiBJdCBsb29rcyBsaWtlIGl0IGRlYWxzIHdpdGggYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYG9sZF9hbGlzdGAgdmFyaWFibGUuIEl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbGx5IHJlZHVuZGFudCBhc3NpZ25tZW50LiBMZXQgbWUgZGlnIGludG8gaXQgYW5kIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLiBTZWVtcyB3ZSBhcmUgY29weWluZyBzb21lIHN0YXRlIHRvIGBlc3RhdGVgLiBUaGUgbmV3IGxpbmUgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGBuZXdfYWxpc3RgIGlmIHRoZSBgb2xkYCBzZXJ2ZXIgaXMgbm90IGNoYW5naW5nLiBUaGlzIG9wdGltaXphdGlvbiBtYXkgYmUgbW9yZSBwZXJmb3JtYW50IHRoYW4gYSBjb21wbGV0ZSByZXBsYWNlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgYnV0IGl0IGFwcGVhcnMgc291bmQgc28gZmFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9mc19wcm9iZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR7XG4gMjQxOlx0XHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gMjQyOlx0XHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIDI0MzpcdFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbiAyNDQ6XHRcbiAyNDU6XHRcdF9lbnRlcihcJiMzNDslcFVcJiMzNDssIFx1MDAyNnNlcnZlci1cdTAwM2V1dWlkKTtcbiAyNDY6XHRcbiAyNDc6XHRcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xuIDI0ODpcdFx0aWYgKCFlc3RhdGUpXG4gMjQ5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI1MDpcdFxuIDI1MTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmVzdGF0ZS1cdTAwM2VyZWYsIDIpO1xuIDI1MjpcdFx0ZXN0YXRlLVx1MDAzZXNlcnZlcl9pZCA9IHNlcnZlci1cdTAwM2VkZWJ1Z19pZDtcbiAyNTM6XHRcdGVzdGF0ZS1cdTAwM2VydHQgPSBVSU5UX01BWDtcbiAyNTQ6XHRcbiAyNTU6XHRcdHdyaXRlX2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWZzX2xvY2spO1xuIDI1NjpcdFxuIDI1NzpcdFx0b2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUsXG4gMjU4Olx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzZXJ2ZXItXHUwMDNlZnNfbG9jaykpO1xuIDI1OTpcdFx0aWYgKG9sZCkge1xuIDI2MDpcdFx0XHRlc3RhdGUtXHUwMDNlcmVzcG9uc2l2ZV9zZXQgPSBvbGQtXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XG4gMjYxOlx0XHRcdG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXM7XG4gMjYyOlx0XHRcdGlmICghbmV3X2FsaXN0KVxuIDI2MzpcdFx0XHRcdG5ld19hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXM7XG4gMjY0Olx0XHR9XG4gMjY1Olx0XG4gMjY2Olx0XHRpZiAob2xkX2FsaXN0ICE9IG5ld19hbGlzdClcbiAyNjc6XHRcdFx0YWZzX3NldF9wZWVyX2FwcGRhdGEoc2VydmVyLCBvbGRfYWxpc3QsIG5ld19hbGlzdCk7XG4gMjY4Olx0XG4gMjY5Olx0XHRlc3RhdGUtXHUwMDNlYWRkcmVzc2VzID0gYWZzX2dldF9hZGRybGlzdChuZXdfYWxpc3QsIGFmc19hbGlzdF90cmFjZV9nZXRfZXN0YXRlKTtcbiAyNzA6XHRcdGFsaXN0ID0gZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiAyNzE6XHRcdGVzdGF0ZS1cdTAwM2Vwcm9iZV9zZXEgPSAmIzQzOyYjNDM7c2VydmVyLVx1MDAzZXByb2JlX2NvdW50ZXI7XG4gMjcyOlx0XHRhdG9taWNfc2V0KFx1MDAyNmVzdGF0ZS1cdTAwM2Vucl9wcm9iaW5nLCBhbGlzdC1cdTAwM2Vucl9hZGRycyk7XG4gMjczOlx0XG4gMjc0Olx0XHRpZiAobmV3X2FsaXN0KVxuIDI3NTpcdFx0XHRzZXJ2ZXItXHUwMDNlYWRkcl92ZXJzaW9uID0gbmV3X2FsaXN0LVx1MDAzZXZlcnNpb247XG4gMjc2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlLCBlc3RhdGUpO1xuIDI3NzpcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2Vmc19sb2NrKTtcbiAyNzg6XHRcdGlmIChvbGQpXG4gMjc5Olx0XHRcdHNldF9iaXQoQUZTX0VTVEFURV9TVVBFUlNFREVELCBcdTAwMjZvbGQtXHUwMDNlZmxhZ3MpO1xuIDI4MDpcdFxuIDI4MTpcdFx0dHJhY2VfYWZzX2VzdGF0ZShlc3RhdGUtXHUwMDNlc2VydmVyX2lkLCBlc3RhdGUtXHUwMDNlcHJvYmVfc2VxLCByZWZjb3VudF9yZWFkKFx1MDAyNmVzdGF0ZS1cdTAwM2VyZWYpLFxuIDI4MjpcdFx0XHRcdCBhZnNfZXN0YXRlX3RyYWNlX2FsbG9jX3Byb2JlKTtcbiAyODM6XHRcbiAyODQ6XHRcdGFmc19nZXRfYWRkcmVzc19wcmVmZXJlbmNlcyhuZXQsIG5ld19hbGlzdCk7XG4gMjg1Olx0XG4gMjg2Olx0XHRzZXJ2ZXItXHUwMDNlcHJvYmVkX2F0ID0gamlmZmllcztcbiAyODc6XHRcdHVucHJvYmVkID0gKDFVTCBcdTAwM2NcdTAwM2MgYWxpc3QtXHUwMDNlbnJfYWRkcnMpIC0gMTtcbiAyODg6XHRcdHdoaWxlICh1bnByb2JlZCkge1xuIDI4OTpcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXggPSAwLCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRlMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkgaW1tZWRpYXRlbHkgc3BvdCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggaG93IGBvbGRfYWxpc3RgIGlzIGJlaW5nIGhhbmRsZWQuIEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGBOVUxMYCwgd2hpY2ggaXMgZmluZSwgYnV0IHRoZW4gd2l0aGluIHRoZSBgaWYgKG9sZClgIGJsb2NrLCB0aGUgY3J1Y2lhbCBhc3NpZ25tZW50IG9mIGBvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3Nlc2Agc2VlbXMgdG8gYmUgbWlzc2luZy4gVGhhdCBtZWFucyBgb2xkX2FsaXN0YCBvbmx5IGdldHMgYSB2YWxpZCBhZGRyZXNzIGxpc3QgaWYgc29tZXRoaW5nIGVsc2Ugc2V0cyBpdCBmaXJzdC4gT3RoZXJ3aXNlLCBpdCBzdGF5cyBgTlVMTGAuIFRoaXMgb3ZlcnNpZ2h0IGhhcyBzb21lIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKTm93LCBiZWNhdXNlIGBvbGRfYWxpc3RgIGNvdWxkIHJlbWFpbiBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBvbGRfYWxpc3QgIT0gbmV3X2FsaXN0YCBpcyB3aGVyZSB0aGluZ3MgYnJlYWsgZG93bi4gVGhlIGNvZGUgdHJlYXRzICphbGwqIG9sZCBwZWVycyBhcyAmIzM0O25vbi1leGlzdGVudCYjMzQ7IGJlY2F1c2UgYG9sZF9hbGlzdGAgaXMsIGluIGVmZmVjdCwgYWx3YXlzIGBOVUxMYCBpbiB0aGF0IHNjZW5hcmlvLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGxvZ2ljIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgdG8gYmVoYXZlIGluY29ycmVjdGx5LCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHdoYXQgd2Ugd2FudC4KCkkmIzM5O2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgZnMvYWZzL3NlcnZlci5jYCBub3cgdG8gc2VlIHdoYXQgZWxzZSBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgc2l0dWF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY2hlY2tpbmcgYXJvdW5kIGxpbmUgMjQyLiBBaCwgdGhlcmUgaXQgaXMuIExvb2tpbmcgYXQgdGhpcyBibG9jayBvZiBjb2RlLCBJJiMzOTttIG5vdGljaW5nIGFuIGludGVyZXN0aW5nIGNhbGwgdG8gYGtmcmVlKClgIHdpdGggYSBwb2ludGVyIHJlbGF0ZWQgdG8gYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgY2xlYW51cCBoYXBwZW5pbmcsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBob3cgdGhlIHNlcnZlciBlbmRwb2ludHMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBob3cgYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgIGlzIGJlaW5nIGhhbmRsZWQgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0sIHRvIHNlZSBpZiB0aGUgbWlzc2luZyBhc3NpZ25tZW50IGlzIGNvbm5lY3RlZCB0byB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvc2VydmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0dXBfd3JpdGUoXHUwMDI2Y2VsbC1cdTAwM2Vmc19sb2NrKTtcbiAyMjE6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNlcnZlci1cdTAwM2V0aW1lcik7XG4gMjIyOlx0XG4gMjIzOlx0XHQvKiBJZiB3ZSBnZXQgdG8gY3JlYXRlIHRoZSBzZXJ2ZXIsIHdlIGxvb2sgdXAgdGhlIGFkZHJlc3NlcyBhbmQgdGhlblxuIDIyNDpcdFx0ICogaW1tZWRpYXRlbHkgZGlzcGF0Y2ggYW4gYXN5bmNocm9ub3VzIHByb2JlIHRvIGVhY2ggaW50ZXJmYWNlIG9uIHRoZVxuIDIyNTpcdFx0ICogZmlsZXNlcnZlci4gIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIHJlcGVhdC1wcm9iaW5nIHNlcnZpY2UgaXNcbiAyMjY6XHRcdCAqIHN0YXJ0ZWQuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmIChjcmVhdGluZykge1xuIDIyOTpcdFx0XHRhbGlzdCA9IGFmc192bF9sb29rdXBfYWRkcnMoc2VydmVyLCBrZXkpO1xuIDIzMDpcdFx0XHRpZiAoSVNfRVJSKGFsaXN0KSkge1xuIDIzMTpcdFx0XHRcdHJldCA9IFBUUl9FUlIoYWxpc3QpO1xuIDIzMjpcdFx0XHRcdGdvdG8gY3JlYXRlX2ZhaWxlZDtcbiAyMzM6XHRcdFx0fVxuIDIzNDpcdFxuIDIzNTpcdFx0XHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcbiAyMzY6XHRcdFx0aWYgKHJldClcbiAyMzc6XHRcdFx0XHRnb3RvIGNyZWF0ZV9mYWlsZWQ7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChBRlNfU0VSVkVSX0ZMX0NSRUFUSU5HLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuIDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdG91dDpcbiAyNDM6XHRcdGFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfc2VydmVyX2NyZWF0ZSk7XG4gMjQ0Olx0XHRpZiAoY2FuZGlkYXRlKSB7XG4gMjQ1Olx0XHRcdGtmcmVlKGNhbmRpZGF0ZSk7XG4gMjQ2Olx0XHRcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVx1MDAzZW5ldCk7XG4gMjQ3Olx0XHR9XG4gMjQ4Olx0XHRyZXR1cm4gc2VydmVyID86IEVSUl9QVFIocmV0KTtcbiAyNDk6XHRcbiAyNTA6XHR3YWl0X2Zvcl9jcmVhdGlvbjpcbiAyNTE6XHRcdGFmc19zZWVfc2VydmVyKHNlcnZlciwgYWZzX3NlcnZlcl90cmFjZV93YWl0X2NyZWF0ZSk7XG4gMjUyOlx0XHR3YWl0X29uX2JpdChcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MsIEFGU19TRVJWRVJfRkxfQ1JFQVRJTkcsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiAyNTM6XHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfVU5DUkVBVEVELCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpKSB7XG4gMjU0Olx0XHRcdC8qIEJhcnJpZXI6IHJlYWQgZmxhZyBiZWZvcmUgZXJyb3IgKi9cbiAyNTU6XHRcdFx0cmV0ID0gUkVBRF9PTkNFKHNlcnZlci1cdTAwM2VjcmVhdGVfZXJyb3IpO1xuIDI1NjpcdFx0XHRhZnNfcHV0X3NlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3VudXNlX2NyZWF0ZV9mYWlsKTtcbiAyNTc6XHRcdFx0c2VydmVyID0gTlVMTDtcbiAyNTg6XHRcdFx0Z290byBvdXQ7XG4gMjU5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzIKCQkJCQkJCW91dHB1dDogMzA1CgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRlMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBmcy9hZnMvc2VydmVyLmNgLCBJIGlkZW50aWZpZWQgYW5kIHJlbW92ZWQgYSBuYXN0eSBga2ZyZWVgIGNhbGwgb24gYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgIGR1cmluZyB0aGUgY2xlYW51cCBwYXRoIG9mIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoYXQgd2FzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYmVjYXVzZSB0aGF0IHBhcnRpY3VsYXIgcG9pbnRlciBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbiBmcmVlZCB0aGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uZGl0aW9ucyB3aGVyZSB0aGUgY2FuZGlkYXRlIHNlcnZlciB3YXNuJiMzOTt0IGV2ZW4gYmVpbmcgdXNlZCBvciBjb3VsZCBoYXZlIGJlZW4gYW5vdGhlciBzZXJ2ZXIuIEEgY3JpdGljYWwgb3ZlcnNpZ2h0LCB0aGFua2Z1bGx5IGNhdWdodC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzOgoKMS4gICoqYGZzL2Fmcy9hZGRyX2xpc3QuY2AqKjogRml4ZWQgYW4gaW5maW5pdGUgbG9vcCBpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGEoKWAgYnkgY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgbG9vcCBpbmRpY2VzIChgbmAgYW5kIGBvYCkgd2hlbiB0aGUgcGVlciBwb2ludGVycyAoYHBuYCBhbmQgYHBvYCkgbWF0Y2guIFNpbXBsZSBidXQgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBzb2Z0bG9ja3MuCjIuICAqKmBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGZzL2Fmcy9pbnRlcm5hbC5oYCoqOiBTdHJlYW1saW5lZCB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGwgaW50byBhIGhlbHBlciBmdW5jdGlvbiBgYWZzX2Rpcl9lbmRfaXRlcigmYW1wO2l0ZXIpYC4gVGhpcyBhdm9pZHMgaW1wcm9wZXIgdW5tYXBwaW5nL25lc3Rpbmcgb2YgdGhlIGxvY2FsIGttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3RhYmlsaXR5IHByb2JsZW1zLiBHb29kIGZvciBjb2RlIGh5Z2llbmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgozLiAgKipgZnMvYWZzL2ZzX3Byb2JlLmNgKio6IENvcnJlY3RlZCB0aGUgYXNzaWdubWVudCBgb2xkX2FsaXN0ID0gb2xkLSZndDthZGRyZXNzZXNgIHRvIGVuc3VyZSBwcm9wZXIgdHJhY2tpbmcgb2YgcGVlciBhcHBkYXRhIGNoYW5nZXMuIFRoaXMgd2FzIGZpeGluZyBhIGxvZ2ljIGJ1ZzsgaXQgZW5zdXJlcyBwcm9wZXIgdHJhY2tpbmcgb2YgdGhlIGBvbGQtJmd0O2FkZHJlc3Nlc2Agc3RydWN0IGZvciBmdXR1cmUgdXNlLgo0LiAgKipgZnMvYWZzL3NlcnZlci5jYCoqOiBUaGUgY3JpdGljYWwgcmVtb3ZhbCBJIG1lbnRpb25lZCBlYXJsaWVyOiB0aGUgZXJyb25lb3VzIGBrZnJlZWAuIFRoYXQgb25lLCBpZiBub3QgY2F1Z2h0LCB3b3VsZCBoYXZlIGNhdXNlZCBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbi4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgS01TQU4gYXBwbGljYWJpbGl0eS4gQXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2VyIHNwYWNlIGJlaW5nIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzPyBMZXQmIzM5O3Mgc2VlOgoKKiAgICoqYGFmc19zZXRfcGVlcl9hcHBkYXRhYCoqOiBObywgdGhpcyBpcyBmaXhpbmcgbG9vcCBpdGVyYXRpb24gbG9naWMsIGRvZXNuJiMzOTt0IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipgYWZzX2Rpcl9lbmRfaXRlcmAqKjogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHNhZmVseSB1bm1hcHBpbmcgZGlyZWN0b3J5IGl0ZXJhdG9yIHBhZ2UgYnVmZmVyczsgaXQmIzM5O3MgYSBjbGVhbnVwLCBub3QgaW50cm9kdWN0aW9uIG9mIG5ldyB1bmluaXRpYWxpemVkIHJlYWRzLgoqICAgKipgb2xkX2FsaXN0YCoqOiBObywgdGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBmaXggdG8gYW4gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGBvbGQtJmd0O2FkZHJlc3Nlc2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipga2ZyZWVgIHJlbW92YWwqKjogVGhpcyBpcyBmaXhpbmcgYW4gaW5jb3JyZWN0IGZyZWU7IGl0IHByZXZlbnRzIG1lbW9yeSBjb3JydXB0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBhY2Nlc3MgaXMgZXhwb3NlZCwgaW4gZmFjdCwgaXQgcHJvdGVjdHMgbWVtb3J5IGZyb20gYmVpbmcgaW1wcm9wZXJseSBmcmVlZC4KCkRvZXMgYW55IHBhcnQgb2YgdGhlIGRpZmYgaGFuZGxlIGBjb3B5X3RvX3VzZXJgLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucz8gTm8sIG5vbmUgb2YgdGhlc2UgYXJlYXMgd2VyZSB0b3VjaGVkLgoKQnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZDoKCiogICBJbmZpbml0ZSBsb29wcy9zb2Z0bG9ja3MgLSBZRVMsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYSBsb29wCiogICBQcm9wZXIgdW5tYXBwaW5nIG9mIGxvY2FsIGttYXBzIC0gWUVTLCB3aXRoIGBhZnNfZGlyX2VuZF9pdGVyYAoqICAgTG9naWMgYnVnIHdoZXJlIGBvbGRfYWxpc3RgIHdhc24mIzM5O3QgdHJhY2tlZCAtIFlFUywgZml4ZWQgaW4gYGZzX3Byb2JlLmNgCiogICBFcnJvbmVvdXMgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgLSBZRVMsIHRoZSBrZXkgZml4IGluIGBzZXJ2ZXIuY2AKCkFsbCB0aGUgYnVncyBJIHNlZSBhcmUgbG9naWMgYnVncywgc29mdGxvY2tzLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyAoVUFGIC8gZG91YmxlIGZyZWUpLiBUaGVzZSBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBkbyBhIGZpbmFsIGRvdWJsZS1jaGVjaywgYnV0IHRoZSBhbmFseXNpcyBpcyBzb3VuZC4gVGltZSB0byBzZXQgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OC4yMTMxNzE3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzg1NDI4MDE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgICBcImFmc19sb29rdXBfc2VydmVyXCIsXG4gICAgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OC4yMTMxODAyMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzU5MjY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXFxuaW5kZXggNjNiZjA5NmI3MjFhYS4uNzMxOTVkNzZiNDgxYSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvYWRkcl9saXN0LmNcXG4rKysgYi9mcy9hZnMvYWRkcl9saXN0LmNcXG5AQCAtMzk0LDggKzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC1cXHUwMDNlYWRkcnNbbl0ucGVlcjtcXG4gXFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyO1xcbiBcXG4tXFx0XFx0aWYgKHBuID09IHBvKVxcbitcXHRcXHRpZiAocG4gPT0gcG8pIHtcXG4rXFx0XFx0XFx0bisrO1xcbitcXHRcXHRcXHRvKys7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChwbiBcXHUwMDNjIHBvKSB7XFxuIFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcXG4gXFx0XFx0XFx0bisrO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyX2VkaXQuY1xcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXFxuIFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiBcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4tXFx0XFx0Z290byBlcnJvcl91bm1hcDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuIFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiBcXHRcXHRcXHQgICBudG9obChkZS1cXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVxcdTAwM2V1LnVuaXF1ZSksXFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiBcXHRuZXh0ID0gZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIFxcbiBcXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXFx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXFxuIFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdHBkZSA9IFxcdTAwMjZwYmxvY2stXFx1MDAzZWRpcmVudHNbcHNdO1xcbiBcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiBcXHRcXHRcXHRcXHR2bm9kZS1cXHUwMDNlZmlkLnZpZCwgdm5vZGUtXFx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXFx1MDAzZWZpZC51bmlxdWUsXFxuIFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiBcXG4gb3V0X3VubWFwOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gXFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiBcXHRyZXR1cm47XFxuIFxcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4tZXJyb3JfdW5tYXA6XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIGVycm9yOlxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxcbiBcXG4gXFx0X2VudGVyKFxcXCIlengsJWRcXFwiLCBibG9jaywgc2xvdCk7XFxuIFxcbi1cXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbi1cXHR9XFxuK1xcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuIFxcbiBcXHRpZiAoZHZub2RlLVxcdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcXHUwMDNjIGJsZW5kKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFxuIFxcdHJldCA9IC1FTk9FTlQ7XFxuIGZvdW5kOlxcbi1cXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbi1cXHR9XFxuLVxcbiBiYWQ6XFxuK1xcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuIFxcdGlmIChyZXQgPT0gLUVTVEFMRSlcXG4gXFx0XFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXFx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbmluZGV4IGE5MWFkMTkzOGQwNzguLjhjNjIzMzRkYmZlNzIgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbkBAIC0yNTgsNiArMjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2c2VydmVyLVxcdTAwM2Vmc19sb2NrKSk7XFxuIFxcdGlmIChvbGQpIHtcXG4gXFx0XFx0ZXN0YXRlLVxcdTAwM2VyZXNwb25zaXZlX3NldCA9IG9sZC1cXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XFxuK1xcdFxcdG9sZF9hbGlzdCA9IG9sZC1cXHUwMDNlYWRkcmVzc2VzO1xcbiBcXHRcXHRpZiAoIW5ld19hbGlzdClcXG4gXFx0XFx0XFx0bmV3X2FsaXN0ID0gb2xkLVxcdTAwM2VhZGRyZXNzZXM7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuK1xcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBkaXJfc2lsbHkuY1xcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXFxuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcXG5AQCAtMjQyLDcgKzI0Miw2IEBAIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcXG4gb3V0OlxcbiBcXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xcbiBcXHRpZiAoY2FuZGlkYXRlKSB7XFxuLVxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSk7XFxuIFxcdFxcdGtmcmVlKGNhbmRpZGF0ZSk7XFxuIFxcdFxcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVxcdTAwM2VuZXQpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA0OjQ5Ljc5MDAxNjk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjUxMzc5MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgICBcImFmc19sb29rdXBfc2VydmVyXCIsXG4gICAgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtdWx0aXBsZSBmdW5jdGlvbmFsIGJ1ZyBmaXhlcyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gY2xpZW50OiBmaXhpbmcgYW4gaW5maW5pdGUgbG9vcCBpbiBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpIHdoZW4gbWF0Y2hpbmcgcGVlcnMgYXJlIGZvdW5kLCBjb3JyZWN0aW5nIGt1bm1hcF9sb2NhbCBoYW5kbGluZyBkdXJpbmcgZGlyZWN0b3J5IGVkaXRzL3NlYXJjaGVzIHZpYSBhZnNfZGlyX2VuZF9pdGVyKCksIGVuc3VyaW5nIG9sZF9hbGlzdCBpcyBwcm9wZXJseSBhc3NpZ25lZCBpbiBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcigpLCBhbmQgcmVtb3ZpbmcgYW4gaW52YWxpZCBrZnJlZSBpbiBhZnNfbG9va3VwX3NlcnZlcigpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEFGUyBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2YzY2ZiMWY5ZGVjZTRlNzA1MWFjZWMyNWQ2NDI4YTRmMjc4YjVmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvYWRkcl9saXN0LmMgYi9mcy9hZnMvYWRkcl9saXN0LmNcbmluZGV4IDYzYmYwOTZiNzIxYWEuLjczMTk1ZDc2YjQ4MWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvYWRkcl9saXN0LmNcbisrKyBiL2ZzL2Fmcy9hZGRyX2xpc3QuY1xuQEAgLTM5NCw4ICszOTQsMTEgQEAgdm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiBcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gXG4tXHRcdGlmIChwbiA9PSBwbylcbitcdFx0aWYgKHBuID09IHBvKSB7XG4rXHRcdFx0bisrO1xuK1x0XHRcdG8rKztcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHRpZiAocG4gXHUwMDNjIHBvKSB7XG4gXHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG4sIGRhdGEpO1xuIFx0XHRcdG4rKztcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXG4gXHRkZSA9IFx1MDAyNmJsb2NrLVx1MDAzZWRpcmVudHNbc2xvdF07XG4gXHRpZiAoZGUtXHUwMDNldS52YWxpZCAhPSAxKVxuLVx0XHRnb3RvIGVycm9yX3VubWFwO1xuK1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCIlbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wiLFxuIFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXCIsIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuK1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCIlengsJWRcIiwgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4gZm91bmQ6XG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuLVxuIGJhZDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5pbmRleCBhOTFhZDE5MzhkMDc4Li44YzYyMzM0ZGJmZTcyIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcbisrKyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5AQCAtMjU4LDYgKzI1OCw3IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2c2VydmVyLVx1MDAzZWZzX2xvY2spKTtcbiBcdGlmIChvbGQpIHtcbiBcdFx0ZXN0YXRlLVx1MDAzZXJlc3BvbnNpdmVfc2V0ID0gb2xkLVx1MDAzZXJlc3BvbnNpdmVfc2V0O1xuK1x0XHRvbGRfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0XHRpZiAoIW5ld19hbGlzdClcbiBcdFx0XHRuZXdfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4re1xuK1x0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbitcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuK1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZXJ2ZXIuY1xuKysrIGIvZnMvYWZzL3NlcnZlci5jXG5AQCAtMjQyLDcgKzI0Miw2IEBAIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcbiBvdXQ6XG4gXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xuIFx0aWYgKGNhbmRpZGF0ZSkge1xuLVx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSk7XG4gXHRcdGtmcmVlKGNhbmRpZGF0ZSk7XG4gXHRcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVx1MDAzZW5ldCk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OS43OTAwMTk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NDQwOTQ0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZTIFBhdGNoIFNlcmllcyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiB3b3J0aCBmdXp6aW5nIOKAkyBhcmUgdGhlcmUgcG90ZW50aWFsIGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gVGhlbiBJJ2xsIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzIG1vZGlmaWVkLCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBzZXZlcmFsIGZpeGVzIHJlbGF0ZWQgdG8gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgZnMvYWZzL2FkZHJfbGlzdC5jYDogVGhlIGZpeCBmb3IgdGhlIGluZmluaXRlIGxvb3AgaW4gYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBpcyBpbnRyaWd1aW5nLiBUaGF0IGtpbmQgb2YgYnVnIGNhbiBlYXNpbHkgbGVhZCB0byBkZW5pYWwtb2Ytc2VydmljZSwgc28gSSdsbCBmbGFnIHRoYXQgYXMgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG4qICAgYGZzL2Fmcy9kaXJfZWRpdC5jYDogVGhlIGRvdWJsZSB1bm1hcCBpc3N1ZSBpbiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgYW5vdGhlciBhcmVhIHRoYXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uIE1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycyBsaWtlIHRoYXQgYXJlIG9mdGVuIGZydWl0ZnVsIHRhcmdldHMuIFRoZSB1c2Ugb2YgYGFmc19kaXJfZW5kX2l0ZXJgIGhlcmUgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29uc2lkZXIsIGFzIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRoZXNlIGZpeGVzLlxuKiAgIGBmcy9hZnMvZGlyX3NlYXJjaC5jYDogVGhlIHJlZmFjdG9yaW5nIGludm9sdmluZyBga3VubWFwX2xvY2FsYCBhbmQgYGFmc19kaXJfZW5kX2l0ZXJgIGluIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCBpcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpdGVyYXRpb24gbG9naWMgaXMgY29tcGxleCwgYW5kIGNvbXBsZXggY29kZSBvZnRlbiBoYXMgYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBpbnRlbmRlZCB0byB3b3JrLlxuKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IFRoZSB1bmluaXRpYWxpemVkIGBvbGRfYWxpc3RgIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHJhaXNlcyBhIHJlZCBmbGFnLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuXG4qICAgYGZzL2Fmcy9pbnRlcm5hbC5oYDogVGhlIGFkZGl0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBhIGdvb2Qgc2lnbnBvc3QuIFRoYXQgaGludHMgYXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyB1c2VkLlxuKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBUaGUgYGtmcmVlYCBmaXggaW4gYGFmc19sb29rdXBfc2VydmVyYCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuTmV4dCwgSSdsbCBjaGVjayB0aGUgYGZzL2Fmcy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBBRlMgaW4gdGhlIGtlcm5lbC4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2lsbCBndWlkZSBob3cgSSBidWlsZCBhIGZ1enplciB0aGF0IGNhbiBhY3R1YWxseSByZWFjaCB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLiBUaGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgSSd2ZSBpZGVudGlmaWVkIHRvIHNlZSB3aGljaCBoYXZlIHRoZSBiZXN0IG9wcG9ydHVuaXR5IHRvIGV4ZXJjaXNlIGFsbCBjb2RlIHBhdGhzIGluIHRoaXMgcGF0Y2ggc2VyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDQ6NTUuMzM0MTE3MTMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUxODg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDQ6NTUuNDQ3NjQwMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY3NTExMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIGBmcy9hZnMvS2NvbmZpZ2AsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmaWxlIHN5c3RlbXM6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIEFuZHJldyBGaWxlIFN5c3RlbSBkcml2ZXIgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbnRpY2lwYXRpbmcgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzIG9mIGBjb25maWdgIG9wdGlvbnMsIGxpa2VseSBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnYCBibG9ja3MgdG8gb3JnYW5pemUgcmVsYXRlZCBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gaG9waW5nIGl0J3MgY2xlYXJseSBkb2N1bWVudGVkLCB3aXRoIGNvbmNpc2UgZGVzY3JpcHRpb25zIGV4cGxhaW5pbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIFRoZSBtYWluIFwiRW5hYmxlIEFGUyBmaWxlIHN5c3RlbVwiIG9wdGlvbiAtIHRoaXMgd2lsbCBwcm9iYWJseSBiZSB0aGUgcm9vdCBhbmQgSSBjYW4gZXhwZWN0IGl0IGlzIGEgZGVwZW5kZW5jeSBvbiBzb21lIG5ldHdvcmsgc3RhY2sgb3B0aW9ucyBiZWluZyB0dXJuZWQgb24sIHN1Y2ggYXMgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX0lQVjZgLlxuKiAgIEZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdmFyaW91cyBBRlMgZmVhdHVyZXM6IFNob3VsZCB0aGVyZSBiZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGxpa2UgS2VyYmVyb3M/IFdoYXQgYWJvdXQgaGFuZGxpbmcgb2Ygdm9sdW1lIG1hbmFnZW1lbnQgb3IgY2FjaGUgc2V0dGluZ3M/XG4qICAgRGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGRyaXZlcnM6IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uIG5ldHdvcmtpbmcgY29tcG9uZW50cywgY3J5cHRvIG1vZHVsZXMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBBRlMgcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz9cbiogICBEZWZhdWx0IHNldHRpbmdzOiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQsIG9yIHdpbGwgSSBuZWVkIHRvIG1hbnVhbGx5IGNvbmZpZ3VyZSBldmVyeXRoaW5nPyBJIGhvcGUgdGhlcmUgYXJlIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCBhIHN5c2FkbWluIGNhbiB0d2VhaywgYXMgb3Bwb3NlZCB0byByZXF1aXJpbmcgYWxsIHBhcmFtZXRlcnMgYmUgZXhwbGljaXRseSBzZXQuXG4qICAgSGVscCB0ZXh0OiBIb3BlZnVsbHksIGVhY2ggb3B0aW9uIGhhcyBkZXNjcmlwdGl2ZSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zLCBpbmNsdWRpbmcgYW55IHBlcmZvcm1hbmNlIHRyYWRlb2ZmcyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gQW55IHdhcm5pbmdzIHJlZ2FyZGluZyB0aGUgZmVhdHVyZSdzIG1hdHVyaXR5IG9yIGtub3duIGJ1Z3Mgd291bGQgYmUgYXBwcmVjaWF0ZWQuXG4qICAgQW55IGJ1aWxkLXRpbWUgY2hlY2tzIG9yIGVycm9yIG1lc3NhZ2VzOiBJIHdhbnQgdG8gYmUgc3VyZSB0aGF0IEknbGwgYmUgd2FybmVkIGlmIHRoZXJlJ3MgYW4gb2J2aW91cyBjb25mbGljdCBvciBtaXNjb25maWd1cmF0aW9uLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBpbXBvcnRhbnQgYXMgdGhleSBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMsIHNvIHRoYXQgd2lsbCBiZSBhIHBvaW50IHRvIHBheSBhdHRlbnRpb24gdG8uXG5UaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEFGUydzIGNhcGFiaWxpdGllcyBhcmUsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdG8gY3VzdG9taXplIGl0IGZvciBkaWZmZXJlbnQgc3lzdGVtIHJlcXVpcmVtZW50cy4gSSdtIHJlYWR5IHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA0OjU4LjkxNTE1MzkyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBRl9SWFJQQ1xcbiAgIDY6XFx0XFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW1cXG4gIDExOlxcdFxcdCAgZHJpdmVyLiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1bnNlY3VyZWQgcmVhZC1vbmx5IEFGUyBhY2Nlc3MuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFGU19ERUJVR1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiQUZTIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlNcXG4gIDIwOlxcdFxcdGhlbHBcXG4gIDIxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHJ1bnRpbWUgY29udHJvbGxhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBhcHBlYXIuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGU19GU0NBQ0hFXFxuICAyODpcXHRcXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlM9bSBcXHUwMDI2XFx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFxcdTAwMjZcXHUwMDI2IEZTQ0FDSEU9eVxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IEFGUyBkYXRhIHRvIGJlIGNhY2hlZCBsb2NhbGx5IG9uIGRpc2sgdGhyb3VnaFxcbiAgMzI6XFx0XFx0ICB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXJcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkFGUyBzZXJ2ZXIgY3Vyc29yIGRlYnVnZ2luZ1xcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY2F1c2UgdGhlIGNvbnRlbnRzIG9mIGEgc2VydmVyIGN1cnNvciB0byBiZSBkdW1wZWQgdG9cXG4gIDM5OlxcdFxcdCAgdGhlIGRtZXNnIGxvZyBpZiB0aGUgc2VydmVyIHJvdGF0aW9uIGFsZ29yaXRobSBmYWlscyB0byBzdWNjZXNzZnVsbHlcXG4gIDQwOlxcdFxcdCAgY29udGFjdCBhIHNlcnZlci5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo1OC45MTUyNDg5OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzczMzQ4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IGZpbGVzeXN0ZW0tcmVsYXRlZCwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvYWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjAyLjY4ODU5OTgyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBSZWQgSGF0IExpbnV4IEFGUyBjbGllbnQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGthZnMteSA6PSBcXFxcXFxuICAgNzpcXHRcXHRhZGRyX2xpc3QubyBcXFxcXFxuICAgODpcXHRcXHRhZGRyX3ByZWZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0Y2FsbGJhY2subyBcXFxcXFxuICAxMDpcXHRcXHRjZWxsLm8gXFxcXFxcbiAgMTE6XFx0XFx0Y21fc2VjdXJpdHkubyBcXFxcXFxuICAxMjpcXHRcXHRjbXNlcnZpY2UubyBcXFxcXFxuICAxMzpcXHRcXHRkaXIubyBcXFxcXFxuICAxNDpcXHRcXHRkaXJfZWRpdC5vIFxcXFxcXG4gIDE1OlxcdFxcdGRpcl9zZWFyY2gubyBcXFxcXFxuICAxNjpcXHRcXHRkaXJfc2lsbHkubyBcXFxcXFxuICAxNzpcXHRcXHRkeW5yb290Lm8gXFxcXFxcbiAgMTg6XFx0XFx0ZmlsZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGZsb2NrLm8gXFxcXFxcbiAgMjA6XFx0XFx0ZnNjbGllbnQubyBcXFxcXFxuICAyMTpcXHRcXHRmc19vcGVyYXRpb24ubyBcXFxcXFxuICAyMjpcXHRcXHRmc19wcm9iZS5vIFxcXFxcXG4gIDIzOlxcdFxcdGlub2RlLm8gXFxcXFxcbiAgMjQ6XFx0XFx0bWFpbi5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRtbnRwdC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJvdGF0ZS5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4cnBjLm8gXFxcXFxcbiAgMjk6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzMDpcXHRcXHRzZXJ2ZXIubyBcXFxcXFxuICAzMTpcXHRcXHRzZXJ2ZXJfbGlzdC5vIFxcXFxcXG4gIDMyOlxcdFxcdHN1cGVyLm8gXFxcXFxcbiAgMzM6XFx0XFx0c3ltbGluay5vIFxcXFxcXG4gIDM0OlxcdFxcdHZhbGlkYXRpb24ubyBcXFxcXFxuICAzNTpcXHRcXHR2bGNsaWVudC5vIFxcXFxcXG4gIDM2OlxcdFxcdHZsX2FsaWFzLm8gXFxcXFxcbiAgMzc6XFx0XFx0dmxfbGlzdC5vIFxcXFxcXG4gIDM4OlxcdFxcdHZsX3Byb2JlLm8gXFxcXFxcbiAgMzk6XFx0XFx0dmxfcm90YXRlLm8gXFxcXFxcbiAgNDA6XFx0XFx0dm9sdW1lLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTowMi42ODg3MTE3MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2NTQzNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFGUyBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIEFGUywgdGhlIEFuZHJldyBGaWxlIFN5c3RlbSBjbGllbnQsIHdpdGhpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBTaW5jZSBpdCdzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBleGlzdHMgKmluLXRyZWUqIGluIExpbnV4LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgSSAqY2FuKiByZWFjaCBhbmQgZnV6eiBpdC4gSXQncyBtb3VudGFibGUgdXNpbmcgdGhlIHN0YW5kYXJkIGBtb3VudCAtdCBhZnNgIGNvbW1hbmQsIHNvIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdXNpbmcgcmVndWxhciBWRlMgc3lzY2FsbHMuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHByb2JpbmcgYW5kIGZ1enppbmcuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcG90ZW50aWFsbHkgbW9kaWZpZWQgZnVuY3Rpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRvIGludmVzdGlnYXRlOlxuXG4qICAgYGZzL2Fmcy9hZGRyX2xpc3QuY2A6IHNwZWNpZmljYWxseSwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYFxuKiAgIGBmcy9hZnMvZGlyX2VkaXQuY2A6IHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gaXMgb24gdGhlIHJhZGFyXG4qICAgYGZzL2Fmcy9kaXJfc2VhcmNoLmNgOiBJJ2xsIGJlIGNoZWNraW5nIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YFxuKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgaXMgbmV4dFxuKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBGaW5hbGx5LCBgYWZzX2xvb2t1cF9zZXJ2ZXJgIHdpbGwgYmUgc2NydXRpbml6ZWRcblxuVGhlIGNvcmUgb2YgbXkgYXBwcm9hY2ggaXMgdG8gZGV0ZXJtaW5lIGlmIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIOKAkyBhcmUgdGhleSBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgYWN0IGFzIGVudHJ5cG9pbnRzIHRoYXQgSSBjYW4gZGlyZWN0bHkgbWFuaXB1bGF0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEFGUyBhcmNoaXRlY3R1cmUgdG8gZm9ybXVsYXRlIGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy4gSSdsbCBzdGFydCB3aXRoIGBmcy9hZnMvYWRkcl9saXN0LmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSAzOTQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjA1LjY5NTI1ODk2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRcXHRyZXR1cm47XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXHRpZiAoIW5ld19hbGlzdCkge1xcbiAzODM6XFx0XFx0XFx0LyogRGVhZCBzZXJ2ZXIuICBKdXN0IHJlbW92ZSBhbGwuICovXFxuIDM4NDpcXHRcXHRcXHRmb3IgKDsgbyBcXHUwMDNjIG9sZF9hbGlzdC1cXHUwMDNlbnJfYWRkcnM7IG8rKylcXG4gMzg1OlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKG9sZF9hbGlzdC1cXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XFxuIDM4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDM4NzpcXHRcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIFdhbGsgdGhyb3VnaCB0aGUgdHdvIGxpc3RzIHNpbXVsdGFuZW91c2x5LCBzZXR0aW5nIG5ldyBwZWVycyBhbmRcXG4gMzkwOlxcdFxcdCAqIGNsZWFyaW5nIG9sZCBvbmVzLiAgVGhlIHR3byBsaXN0cyBhcmUgb3JkZXJlZCBieSBwb2ludGVyIHRvIHBlZXJcXG4gMzkxOlxcdFxcdCAqIHJlY29yZC5cXG4gMzkyOlxcdFxcdCAqL1xcbiAzOTM6XFx0XFx0d2hpbGUgKG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzIFxcdTAwMjZcXHUwMDI2IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKSB7XFxuIDM5NDpcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXFx1MDAzZWFkZHJzW25dLnBlZXI7XFxuIDM5NTpcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcG8gPSBvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXI7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdGlmIChwbiA9PSBwbykge1xcbiAzOTg6XFx0XFx0XFx0XFx0bisrO1xcbiAzOTk6XFx0XFx0XFx0XFx0bysrO1xcbiA0MDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQwMTpcXHRcXHRcXHR9XFxuIDQwMjpcXHRcXHRcXHRpZiAocG4gXFx1MDAzYyBwbykge1xcbiA0MDM6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG4sIGRhdGEpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0bisrO1xcbiA0MDU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDA2OlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBvLCAwKTtcXG4gNDA3OlxcdFxcdFxcdFxcdG8rKztcXG4gNDA4OlxcdFxcdFxcdH1cXG4gNDA5OlxcdFxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0XFx0aWYgKG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKVxcbiA0MTI6XFx0XFx0XFx0Zm9yICg7IG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBuKyspXFxuIDQxMzpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXFx1MDAzZWFkZHJzW25dLnBlZXIsIGRhdGEpO1xcbiA0MTQ6XFx0XFx0aWYgKG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKVxcbiA0MTU6XFx0XFx0XFx0Zm9yICg7IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBvKyspXFxuIDQxNjpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xcbiA0MTc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTowNS42OTU0MDUwMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI0MjA0MzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgYW5kIEl0cyBDYWxsZXJzKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBkaWdnaW5nIGludG8gdGhpcyBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaXRzIGV4YWN0IHNpZ25hdHVyZSDigJMgdGhlIGlucHV0IHBhcmFtZXRlcnMsIHRoZSByZXR1cm4gdHlwZSwgdGhlIHdob2xlIHNoZWJhbmcuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBpcyBjcnVjaWFsLiBPbmNlIEkndmUgZ290IHRoYXQgc3RyYWlnaHQsIEkgY2FuIG1vdmUgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscyBpcyBnb2luZyB0byBwcm92aWRlIHRoZSB0cnVlIGluc2lnaHRzIGludG8gdGhpcyBjb2Rl4oCZcyBmdW5jdGlvbmFsaXR5IGFuZCBwdXJwb3NlLiBUaGUgc2lnbmF0dXJlIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwcm9ncmFtIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToxMC45Mzc0NTIwMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEwMTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jPTMyNz1pbnQgYWZzX21lcmdlX2ZzX2FkZHI2KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCxcXG4tLVxcbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNjgtICovXFxuZnMvYWZzL2FkZHJfbGlzdC5jOjM2OTp2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvYWZzL2FkZHJfbGlzdC5jLTM3MC1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QsXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYz0yMzg9aW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYy0yNjYtXFx0aWYgKG9sZF9hbGlzdCAhPSBuZXdfYWxpc3QpXFxuZnMvYWZzL2ZzX3Byb2JlLmM6MjY3OlxcdFxcdGFmc19zZXRfcGVlcl9hcHBkYXRhKHNlcnZlciwgb2xkX2FsaXN0LCBuZXdfYWxpc3QpO1xcbmZzL2Fmcy9mc19wcm9iZS5jLTI2OC1cXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEwMjE9ZXh0ZXJuIGludCBhZnNfbWVyZ2VfZnNfYWRkcjYoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFkZHIsXFxuZnMvYWZzL2ludGVybmFsLmgtMTAyMi1cXHRcXHRcXHQgICAgICBfX2JlMzIgKnhkciwgdTE2IHBvcnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwMjM6dm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwMjQtXFx0XFx0XFx0ICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0LFxcbi0tXFxuZnMvYWZzL3NlcnZlci5jPTQ2NT1zdGF0aWMgdm9pZCBhZnNfc2VydmVyX2Rlc3Ryb3llcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtNDg3LVxcdGlmIChlc3RhdGUpXFxuZnMvYWZzL3NlcnZlci5jOjQ4ODpcXHRcXHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIGVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzLCBOVUxMKTtcXG5mcy9hZnMvc2VydmVyLmMtNDg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToxMS4wNTQ1NTczNjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0Njg4ODk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGl0cyBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBgYWZzX2VkaXRfZGlyX3JlbW92ZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdHJhY2UgaXRzIGRlY2xhcmF0aW9uIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUsIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBvdmVyYWxsIGludGVyYWN0aW9uIGlzIGtleS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBpbnZva2VkIGluIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGdsb2JhbCB2YXJpYWJsZXMgdGhhdCB0aGUgZnVuY3Rpb24gYWNjZXNzZXMsIGluY2x1ZGluZyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLCBvciBldmVuIGp1c3QgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZXhpc3RpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjIxLjUyMzQ1MDk5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0MTgyNzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9MTM2OD1zdGF0aWMgdm9pZCBhZnNfcm1kaXJfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTEzODAtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjEzODE6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTEzODItXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTE1MTY9c3RhdGljIHZvaWQgYWZzX3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTUyNi1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTUyNzpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTUyOC1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTE4ODg9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTkxMy1cXHQgICAgb3JpZ19kdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXFx1MDAzZWR2X2JlZm9yZSArIG9yaWdfZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTkxNDpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKG9yaWdfZHZub2RlLCBcXHUwMDI2b2xkX2RlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xOTE1LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JlbmFtZV8wKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xOTI0LVxcdFxcdGlmICghb3AtXFx1MDAzZXJlbmFtZS5uZXdfbmVnYXRpdmUpXFxuZnMvYWZzL2Rpci5jOjE5MjU6XFx0XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShuZXdfZHZub2RlLCBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xOTI2LVxcdFxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JlbmFtZV8xKTtcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYy0zOTItICovXFxuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG5mcy9hZnMvZGlyX2VkaXQuYy0zOTQtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24gd2h5KVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTQxLVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKSB7XFxuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b2xkLVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTQzLVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jPTE3Nj1zdGF0aWMgdm9pZCBhZnNfc2lsbHlfdW5saW5rX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xODQtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpcl9zaWxseS5jOjE4NTpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyX3NpbGx5LmMtMTg2LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMTE4PWV4dGVybiB2b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgYWZzX2ZpZCAqLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXFx0XFx0XFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMjA6ZXh0ZXJuIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTEyMS12b2lkIGFmc19lZGl0X2Rpcl91cGRhdGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToyNy4yNjUyODMzNTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NjM5NDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEFGUyBTZXJ2ZXIgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGBhZnNfbG9va3VwX3NlcnZlcmAgYW5kIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEFGUyBmaWxlc2VydmVyLiBgYWZzX2xvb2t1cF9zZXJ2ZXJgIGNsZWFybHkgcGxheXMgYSByb2xlIGluIHRoZSBpbml0aWFsIHNlcnZlciBsb29rdXAgYW5kIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSXMgaXQgY2FjaGluZyBvciBoYW5kbGluZyBhbnkgc29ydCBvZiBzZXJ2ZXIgZGlzY292ZXJ5PyBUaGVuLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHNlZW1zIGxpa2UgYSBwcm9iaW5nIGZ1bmN0aW9uIOKAkyBwZXJoYXBzIHVzZWQgdG8gY2hlY2sgc2VydmVyIGhlYWx0aCwgYXZhaWxhYmlsaXR5LCBvciBmaWxlIHN5c3RlbSByZXNwb25zaXZlbmVzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIG9yIGFjdGlvbnMgZmxvdyBpbiBlYWNoIGZ1bmN0aW9uIGFuZCBob3cgdGhleSBtaWdodCBvdmVybGFwIG9yIHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCByb2J1c3RuZXNzLiBJIGtub3cgdGhhdCBsb29raW5nIGludG8gdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNsaWVudCBmaW5kcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHNlcnZlci4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGF0IHN0ZXBzIGFyZSB0YWtlbiB0byBtYWtlIHN1cmUgdGhlIHNlcnZlciBpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToyOS41MjE2ODEzMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3Mzg2ODA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2xvb2t1cF9zZXJ2ZXJ8YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9mc19wcm9iZS5jPTEzOD12b2lkIGFmc19maWxlc2VydmVyX3Byb2JlX3Jlc3VsdChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYy0yMzctICovXFxuZnMvYWZzL2ZzX3Byb2JlLmM6MjM4OmludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9mc19wcm9iZS5jLTIzOS1cXHRcXHRcXHQgICAgc3RydWN0IGFmc19hZGRyX2xpc3QgKm5ld19hbGlzdCwgc3RydWN0IGtleSAqa2V5KVxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmM9Mzg4PXN0YXRpYyB2b2lkIGFmc19kaXNwYXRjaF9mc19wcm9iZShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmMtNDAwLVxcbmZzL2Fmcy9mc19wcm9iZS5jOjQwMTpcXHRhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihuZXQsIHNlcnZlciwgTlVMTCwga2V5KTtcXG5mcy9hZnMvZnNfcHJvYmUuYy00MDItXFx0YWZzX3B1dF9zZXJ2ZXIobmV0LCBzZXJ2ZXIsIGFmc19zZXJ2ZXJfdHJhY2VfcHV0X3Byb2JlKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNDk9ZXh0ZXJuIHZvaWQgYWZzX2ZpbGVzZXJ2ZXJfcHJvYmVfcmVzdWx0KHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMjUwOmludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpuZXdfYWxpc3QsIHN0cnVjdCBrZXkgKmtleSk7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQ5PXN0cnVjdCBhZnNfc2VydmVyICphZnNfZmluZF9zZXJ2ZXIoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NTA6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNTUxLWV4dGVybiBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2dldF9zZXJ2ZXIoc3RydWN0IGFmc19zZXJ2ZXIgKiwgZW51bSBhZnNfc2VydmVyX3RyYWNlKTtcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYz0xNTI9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfbG9va3VwX2FkZHJzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtMTc3LSAqL1xcbmZzL2Fmcy9zZXJ2ZXIuYzoxNzg6c3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5LFxcbmZzL2Fmcy9zZXJ2ZXIuYy0xNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1dWlkX3QgKnV1aWQsIHUzMiBhZGRyX3ZlcnNpb24pXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtMjM0LVxcbmZzL2Fmcy9zZXJ2ZXIuYzoyMzU6XFx0XFx0cmV0ID0gYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoY2VsbC1cXHUwMDNlbmV0LCBzZXJ2ZXIsIGFsaXN0LCBrZXkpO1xcbmZzL2Fmcy9zZXJ2ZXIuYy0yMzYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYz01NDE9c3RhdGljIG5vaW5saW5lIGJvb2wgYWZzX3VwZGF0ZV9zZXJ2ZXJfcmVjb3JkKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYy01NzQtXFx0aWYgKHNlcnZlci1cXHUwMDNlYWRkcl92ZXJzaW9uICE9IGFsaXN0LVxcdTAwM2V2ZXJzaW9uKVxcbmZzL2Fmcy9zZXJ2ZXIuYzo1NzU6XFx0XFx0YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIob3AtXFx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcXG5mcy9hZnMvc2VydmVyLmMtNTc2LVxcbi0tXFxuZnMvYWZzL3NlcnZlcl9saXN0LmM9Mjc9c3RydWN0IGFmc19zZXJ2ZXJfbGlzdCAqYWZzX2FsbG9jX3NlcnZlcl9saXN0KHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUsXFxuLS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04MS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYzo4MjpcXHRcXHRzZXJ2ZXIgPSBhZnNfbG9va3VwX3NlcnZlcih2b2x1bWUtXFx1MDAzZWNlbGwsIGtleSwgXFx1MDAyNnZsZGItXFx1MDAzZWZzX3NlcnZlcltpXSxcXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04My1cXHRcXHRcXHRcXHRcXHQgICB2bGRiLVxcdTAwM2VhZGRyX3ZlcnNpb25baV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTozMy4yNjAzNjg3OThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3Mzc4ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGlyZWN0b3J5IEJsb2NrIERpc2NvdmVyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRpcmVjdG9yeSBibG9jayBsb29rdXAgbG9naWMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHRoZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIGludm9sdmVkIGluIHJlc29sdmluZyB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgZGlyZWN0b3J5IGJsb2NrcyB3aXRoaW4gdGhlIEFGUyBmaWxlIHN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIGhpZ2gtbGV2ZWwgc2VhcmNoIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGluZ3MgbGlrZSBjYWNoZSBsb29rdXBzIG9yIGl0ZXJhdGluZyB0aHJvdWdoIHZhcmlvdXMgaW5kZXggc3RydWN0dXJlcy4gYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAsIHNvdW5kcyBsaWtlIGEgbW9yZSBncmFudWxhciBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBpbiB0aGUgQUZTIGNvZGViYXNlLCBJJ20gYmV0dGluZyB0aGF0IGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIHVzZWQgdG8gc2VhcmNoIHNwZWNpZmljIGhhc2ggYnVja2V0cy4gVGhpcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgYWNjZXNzIG9yIHNpbXBseSBhIHdheSB0byBvcmdhbml6ZSBvdXIgZGF0YS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHRoZXkgY2FsbGVkIHNlcXVlbnRpYWxseSwgb3IgaXMgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCByZXBlYXRlZGx5IGludm9rZXMgdW50aWwgdGhlIHRhcmdldCBibG9jayBpcyBsb2NhdGVkPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlaXIgcHJvdG90eXBlcyBhbmQgY2FsbCBncmFwaHMgdG8gc2VlIHdoYXQgZGF0YSB0aGV5IHdvcmsgd2l0aCBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eS4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIEFGUyBkaXJlY3RvcnkgYmxvY2sgZGlzY292ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjM5LjAzNDE2MDUxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MjU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2Rpcl9maW5kX2Jsb2NrfGFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmM9MzkzPXZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cXHQvKiBGaW5kIHRoZSBlbnRyeSBpbiB0aGUgYmxvYi4gKi9cXG5mcy9hZnMvZGlyX2VkaXQuYzo0MjM6XFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXFx1MDAyNml0ZXIsIG5hbWUsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cXHRpZiAoZm91bmQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYy00MzUtXFxuZnMvYWZzL2Rpcl9lZGl0LmM6NDM2OlxcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBiKTtcXG5mcy9hZnMvZGlyX2VkaXQuYy00MzctXFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQ4MC1cXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XFx0XFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBwYik7XFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDgyLVxcdFxcdGlmICghcGJsb2NrKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYz01Nz1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy02Ni0gKi9cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjY3OnVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsb2NrKVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMTktICovXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjA6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyMS1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjc6XFx0bWV0YSA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCAwKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cXHRpZiAoIW1ldGEpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjE0OTpcXHRcXHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xNTAtXFx0XFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM9MTg0PWludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0yMTEtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoyMTI6XFx0XFx0cmV0ID0gYWZzX2Rpcl9zZWFyY2hfYnVja2V0KFxcdTAwMjZpdGVyLCBuYW1lLCBfZmlkKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cXHRcXHR1cF9yZWFkKFxcdTAwMjZkdm5vZGUtXFx1MDAzZXZhbGlkYXRlX2xvY2spO1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTEyOT1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMwOnVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsb2NrKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMxOmludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMi1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6MzkuMTAyNjkyNzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDUyOTE1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFGUyBGaWxlc3lzdGVtIFBhdGNoIEFuYWx5c2lzOiBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyB0aGUgQUZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBgZnMvYWZzYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIHNldmVyYWwga2V5IGZ1bmN0aW9uYWwgYnVncy4gRmlyc3QsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYWRkcmVzcyBsaXN0IGNvbXBhcmlzb24uIFRoZW4sIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGFkZHJlc3MgdW5tYXBwaW5nIGlzc3VlcywgY2VudHJhbGl6aW5nIHRoZSBvcGVyYXRpb24uIFdlIGFsc28gaGF2ZSBhIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHdoZXJlIGBvbGRfYWxpc3RgIHdhcyBub3QgYXNzaWduZWQgY29ycmVjdGx5LCBhbmQgZmluYWxseSwgYSByb2d1ZSBga2ZyZWVgIGNhbGwgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGBhZnNfbG9va3VwX3NlcnZlcmAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gR2l2ZW4gdGhhdCBBRlMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIHN5emthbGxlciBpcyBhIHNvbGlkIGNob2ljZSBoZXJlLiBJdCdzIHdlbGwtZXF1aXBwZWQgdG8gbW91bnQgYW5kIGZ1enogbmV0d29yayBmaWxlc3lzdGVtcywgY3JlYXRlIHNvY2tldHMsIGFuZCBnZW5lcmFsbHkgc3RyZXNzIHRoZSBrZXJuZWwncyBmaWxlc3lzdGVtIGNvbXBvbmVudHMuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGEgZ29vZCB0cmFjayByZWNvcmQgd2l0aCB0aGlzIGtpbmQgb2Ygd29yayBpcyBhIG1ham9yIHBsdXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBBRlNfRlNgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24sIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGUgYElORVRgLCBgQUZfUlhSUENgLCBgRE5TX1JFU09MVkVSYCwgYE5FVEZTX1NVUFBPUlRgLCBhbmQgYENSWVBUT19LUkI1YC4gVGhpcyBhbGwgc2VlbXMgY29ycmVjdCBmb3IgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQUZTX0ZTYCBpcyBlbmFibGVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMuIEFmdGVyIGFuYWx5c2lzLCB0aGVzZSBhcmUgYWxsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYW5kIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoaXMgY29uZmlybXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb2N1cyBvbi5cblxuU28sIHN1bW1pbmcgdXA6IFRoZSBwYXRjaCBmaXhlcyBjcml0aWNhbCBidWdzIGFjcm9zcyBhIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtLCBpdCdzIGVhc2lseSByZWFjaGFibGUgYnkgc3l6a2FsbGVyIHdoaWNoIHVzZXMgbmV0d29yayBmaWxlIHN5c3RlbXMgYW5kIGxvY2FsIGZpbGUgc3lzdGVtcywgYW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBlbnRyeXBvaW50cyBhcmUgYWxsIHByb3Blcmx5IGlkZW50aWZpZWQuIEkgc2hvdWxkIHNldCB0aGUgcmVzdWx0cyB0bzpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogXCJGaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyAoaW5maW5pdGUgbG9vcCwgdW5tYXAgaXNzdWVzLCBhZGRyZXNzIGxpc3QgYXNzaWdubWVudCwga2ZyZWUpIGluIEFGUyBmaWxlc3lzdGVtIGRyaXZlciwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCJcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImFmc19lZGl0X2Rpcl9yZW1vdmVcIiwgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIiwgXCJhZnNfZGlyX3NlYXJjaF9idWNrZXRcIiwgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiLCBcImFmc19mc19wcm9iZV9maWxlc2VydmVyXCIsIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQUZTX0ZTXCJdYFxuXG5UaGVuIEkgd2lsbCBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTYsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjUyLjE1NTYxMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxOTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCIsXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIixcbiAgICBcImFmc19zZXRfcGVlcl9hcHBkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCIsXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIixcbiAgICBcImFmc19zZXRfcGVlcl9hcHBkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTo1Mi4zMDM4MTM4NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzYzNjI4ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTIuMzA2NjU2Mjc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk3NjA3ODE4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGluIHRoZSBBRlMgc3Vic3lzdGVtOlxcbjEuIGZzL2Fmcy9hZGRyX2xpc3QuYzogRml4ZXMgYW4gaW5maW5pdGUgbG9vcCBpbiBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpIGJ5IGluY3JlbWVudGluZyBib3RoIHBvaW50ZXJzL2luZGljZXMgd2hlbiBwbiA9PSBwby5cXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXFxuMy4gZnMvYWZzL2ZzX3Byb2JlLmM6IEluaXRpYWxpemVzIG9sZF9hbGlzdCBmcm9tIG9sZC1cXHUwMDNlYWRkcmVzc2VzIGR1cmluZyBmaWxlc2VydmVyIHByb2JpbmcuXFxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSkpIGluIGFmc19sb29rdXBfc2VydmVyIGVycm9yIGNsZWFudXAsIHByZXZlbnRpbmcgaW52YWxpZC9wcmVtYXR1cmUgZnJlZSBvZiBlbmRwb2ludCBzdGF0ZS5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdmM2NmYjFmOWRlY2U0ZTcwNTFhY2VjMjVkNjQyOGE0ZjI3OGI1ZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA4OjA0OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXG5pbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2FkZHJfbGlzdC5jXG4rKysgYi9mcy9hZnMvYWRkcl9saXN0LmNcbkBAIC0zOTQsOCArMzk0LDExIEBAIHZvaWQgYWZzX3NldF9wZWVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBuID0gbmV3X2FsaXN0LVx1MDAzZWFkZHJzW25dLnBlZXI7XG4gXHRcdHN0cnVjdCByeHJwY19wZWVyICpwbyA9IG9sZF9hbGlzdC1cdTAwM2VhZGRyc1tvXS5wZWVyO1xuIFxuLVx0XHRpZiAocG4gPT0gcG8pXG4rXHRcdGlmIChwbiA9PSBwbykge1xuK1x0XHRcdG4rKztcbitcdFx0XHRvKys7XG4gXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0aWYgKHBuIFx1MDAzYyBwbykge1xuIFx0XHRcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcbiBcdFx0XHRuKys7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXG4rKysgYi9mcy9hZnMvZGlyX2VkaXQuY1xuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbi1cdFx0Z290byBlcnJvcl91bm1hcDtcbitcdFx0Z290byBlcnJvcjtcbiBcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxuIFx0XHRcdCAgIG50b2hsKGRlLVx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cdTAwM2V1LnVuaXF1ZSksXG5AQCAtNDU4LDcgKzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCdzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbkBAIC00ODUsNyArNDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRwZGUgPSBcdTAwMjZwYmxvY2stXHUwMDNlZGlyZW50c1twc107XG4gXHRcdHByZXZfbmV4dCA9IHBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiBcdFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcbi1cdFx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdFx0XHRwcl93YXJuKFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcIixcbiBcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiBcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG5AQCAtNDkzLDcgKzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG4gXHRcdHBkZS1cdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XG4tXHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0fVxuIFxuIFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUpO1xuQEAgLTUwMywxOCArNTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVwiLCBuYW1lLVx1MDAzZW5hbWUsIGIsIHNsb3QpO1xuIFxuIG91dF91bm1hcDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCJcIik7XG4gXHRyZXR1cm47XG4gXG4gYWxyZWFkeV9pbnZhbGlkYXRlZDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIFx0Z290byBvdXRfdW5tYXA7XG4gXG4tZXJyb3JfdW5tYXA6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIGVycm9yOlxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX3NlYXJjaC5jIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwiJXp4LCVkXCIsIGJsb2NrLCBzbG90KTtcbiBcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFx0aWYgKHJldCA9PSAtRVNUQUxFKVxuIFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI1OCw2ICsyNTgsNyBAQCBpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNnNlcnZlci1cdTAwM2Vmc19sb2NrKSk7XG4gXHRpZiAob2xkKSB7XG4gXHRcdGVzdGF0ZS1cdTAwM2VyZXNwb25zaXZlX3NldCA9IG9sZC1cdTAwM2VyZXNwb25zaXZlX3NldDtcbitcdFx0b2xkX2FsaXN0ID0gb2xkLVx1MDAzZWFkZHJlc3NlcztcbiBcdFx0aWYgKCFuZXdfYWxpc3QpXG4gXHRcdFx0bmV3X2FsaXN0ID0gb2xkLVx1MDAzZWFkZHJlc3NlcztcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxuK3tcbitcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbitcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmNcbmluZGV4IDBmZTE2MmVhMmEzNmQuLjE4OTEzOGJkNmQ3MTIgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbisrKyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTI0Miw3ICsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4gb3V0OlxuIFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTtcbiBcdGlmIChjYW5kaWRhdGUpIHtcbi1cdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpO1xuIFx0XHRrZnJlZShjYW5kaWRhdGUpO1xuIFx0XHRhZnNfZGVjX3NlcnZlcnNfb3V0c3RhbmRpbmcoY2VsbC1cdTAwM2VuZXQpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTIuMzA2NjU3ODk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNDcwMTg5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbmVlZCB0byBmaXJlIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHdpbGwgZG8gdGhlIHRyaWNrLiBXZSBoYXZlIGEgY2hhbmdlIGluIGBmcy9hZnMvYWRkcl9saXN0LmNgIHRvIGNvbnNpZGVyLCBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGFkanVzdG1lbnQgdG8gdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gSSdsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGFgLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBza2lwcGluZyB0aGUgaXRlcmF0aW9uIGluIHRoZSBgZm9yYCBsb29wIGlmIGBwbmAgYW5kIGBwb2AgYXJlIHRoZSBzYW1lOyB0aGlzIGlzIHRoZSBrZXkgcGllY2UgdG8gdW5kZXJzdGFuZGluZyB3aGV0aGVyIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLTVNBTiBtaWdodCBwaWNrIHVwLiBJdCBzZWVtcyBsaWtlIGl0IHByZXZlbnRzIHNvbWUgb2YgdGhlIGl0ZXJhdGlvbiBpbiB0aGUgbG9vcCBpZiBgcG5gIGFuZCBgcG9gIGFyZSB0aGUgc2FtZS4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgd2hhdCBgcG5gIGFuZCBgcG9gIGFyZSBhbmQgaWYgdGhleSBhcmUgZXZlciBOVUxMLCBvciBob3cgdGhleSBhcmUgc2V0LiBBIHN0YW5kYXJkIEtBU0FOIGNoZWNrIGlzIGxpa2VseSB0byBkZXRlY3QgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpZiBwcmVzZW50LCBidXQgc2luY2UgdGhlc2UgbG9vayBsaWtlIHBlZXJzLCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIG1heSBiZSBhbiBvcHBvcnR1bml0eSBmb3IgYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyB3aGF0IEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTkuNTUzNjc5NTg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9hZGRyX2xpc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODE6XFx0XFx0fVxcbiAzODI6XFx0XFx0aWYgKCFuZXdfYWxpc3QpIHtcXG4gMzgzOlxcdFxcdFxcdC8qIERlYWQgc2VydmVyLiAgSnVzdCByZW1vdmUgYWxsLiAqL1xcbiAzODQ6XFx0XFx0XFx0Zm9yICg7IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBvKyspXFxuIDM4NTpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xcbiAzODY6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODc6XFx0XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXFxuIDM5MDpcXHRcXHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXFxuIDM5MTpcXHRcXHQgKiByZWNvcmQuXFxuIDM5MjpcXHRcXHQgKi9cXG4gMzkzOlxcdFxcdHdoaWxlIChuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRycyBcXHUwMDI2XFx1MDAyNiBvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRycykge1xcbiAzOTQ6XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBuID0gbmV3X2FsaXN0LVxcdTAwM2VhZGRyc1tuXS5wZWVyO1xcbiAzOTU6XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHRcXHRpZiAocG4gPT0gcG8pIHtcXG4gMzk4OlxcdFxcdFxcdFxcdG4rKztcXG4gMzk5OlxcdFxcdFxcdFxcdG8rKztcXG4gNDAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0MDE6XFx0XFx0XFx0fVxcbiA0MDI6XFx0XFx0XFx0aWYgKHBuIFxcdTAwM2MgcG8pIHtcXG4gNDAzOlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcXG4gNDA0OlxcdFxcdFxcdFxcdG4rKztcXG4gNDA1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDQwNjpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbywgMCk7XFxuIDQwNzpcXHRcXHRcXHRcXHRvKys7XFxuIDQwODpcXHRcXHRcXHR9XFxuIDQwOTpcXHRcXHR9XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdGlmIChuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRycylcXG4gNDEyOlxcdFxcdFxcdGZvciAoOyBuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRyczsgbisrKVxcbiA0MTM6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEobmV3X2FsaXN0LVxcdTAwM2VhZGRyc1tuXS5wZWVyLCBkYXRhKTtcXG4gNDE0OlxcdFxcdGlmIChvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRycylcXG4gNDE1OlxcdFxcdFxcdGZvciAoOyBvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRyczsgbysrKVxcbiA0MTY6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyLCAwKTtcXG4gNDE3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTkuNTUzNzUwNjc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDQ3NTA2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIEFGUzogQ2F0Y2hpbmcgYW4gSW5maW5pdGUgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIG92ZXIgdGhpcyBBRlMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyBhIGNsYXNzaWM6IGEgbmFzdHkgaW5maW5pdGUgbG9vcCBpbiBgZnMvYWZzL2FkZHJfbGlzdC5jYC4gVGhlIHJvb3QgY2F1c2U/IGBwbmAgYW5kIGBwb2AgZW5kIHVwIGJlaW5nIHRoZSBzYW1lIHZhbHVlLCBidXQgbmVpdGhlciBgbmAgbm9yIGBvYCBhcmUgaW5jcmVtZW50ZWQsIHdoaWNoIG1lYW5zIHRoZSBsb29wIHdpbGwgbmV2ZXIgdGVybWluYXRlLiAgVGhhdCdzIGEgZ3VhcmFudGVlZCBoYW5nLCBhIHRvdGFsIHNvZnRsb2NrdXAg4oCTIGNyaXRpY2FsISBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IGFkZHJlc3NlZCBpbiB0aGUgZml4LlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNoYW5nZXMuICBXZSBoYXZlIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEknbGwgc3RhcnQgYnkgZGl2aW5nIGludG8gYGZzL2Fmcy9kaXJfZWRpdC5jYCBmaXJzdCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDIuMjU4NTA0MTkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9kaXJfZWRpdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyNTpcXHRcXHRcXHQvKiBEaWRuJ3QgZmluZCB0aGUgZGlyZW50IHRvIGNsb2JiZXIuICBSZS1kb3dubG9hZC4gKi9cXG4gNDI2OlxcdFxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX25vZW50LFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQyODpcXHRcXHRcXHRhZnNfaW52YWxpZGF0ZV9kaXIodm5vZGUsIGFmc19kaXJfaW52YWxpZF9lZGl0X3JlbV93cm9uZ19uYW1lKTtcXG4gNDI5OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiA0MzA6XFx0XFx0fVxcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRlbnRyeSA9IGZvdW5kO1xcbiA0MzM6XFx0XFx0YiAgICA9IGVudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQzNDpcXHRcXHRzbG90ID0gZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0YmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIGIpO1xcbiA0Mzc6XFx0XFx0aWYgKCFibG9jaylcXG4gNDM4OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQzOTpcXHRcXHRpZiAoIXRlc3RfYml0KEFGU19WTk9ERV9ESVJfVkFMSUQsIFxcdTAwMjZ2bm9kZS1cXHUwMDNlZmxhZ3MpKVxcbiA0NDA6XFx0XFx0XFx0Z290byBhbHJlYWR5X2ludmFsaWRhdGVkO1xcbiA0NDE6XFx0XFxuIDQ0MjpcXHRcXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xcbiA0NDM6XFx0XFx0ZGUgPSBcXHUwMDI2YmxvY2stXFx1MDAzZWRpcmVudHNbc2xvdF07XFxuIDQ0NDpcXHRcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4gNDQ1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiA0NDg6XFx0XFx0XFx0XFx0ICAgbnRvaGwoZGUtXFx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cXHUwMDNldS51bmlxdWUpLFxcbiA0NDk6XFx0XFx0XFx0XFx0ICAgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdC8qIEFkanVzdCB0aGUgYml0bWFwLiAqL1xcbiA0NTI6XFx0XFx0YWZzX2NsZWFyX2NvbnRpZ19iaXRzKGJsb2NrLCBzbG90LCBpdGVyLm5yX3Nsb3RzKTtcXG4gNDUzOlxcdFxcbiA0NTQ6XFx0XFx0LyogQWRqdXN0IHRoZSBhbGxvY2F0aW9uIGNvdW50ZXIuICovXFxuIDQ1NTpcXHRcXHRpZiAoYiBcXHUwMDNjIEFGU19ESVJfQkxPQ0tTX1dJVEhfQ1RSKVxcbiA0NTY6XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWV0YS5hbGxvY19jdHJzW2JdICs9IGl0ZXIubnJfc2xvdHM7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiA0NTk6XFx0XFx0bmV4dCA9IGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gNDYwOlxcdFxcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVxcdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxcbiA0NjM6XFx0XFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCdzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cXG4gNDY0OlxcdFxcdCAqL1xcbiA0NjU6XFx0XFx0aWYgKCFpdGVyLnByZXZfZW50cnkpIHtcXG4gNDY2OlxcdFxcdFxcdF9fYmUxNiBwcmV2X25leHQgPSBtZXRhLVxcdTAwM2VtZXRhLmhhc2h0YWJsZVtpdGVyLmJ1Y2tldF07XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdFxcdFxcdGlmICh1bmxpa2VseShwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSkge1xcbiA0Njk6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgaGVhZCBvZiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiA0NzA6XFx0XFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiA0NzE6XFx0XFx0XFx0XFx0XFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdG5hbWUtXFx1MDAzZWxlbiwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ3MzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NzQ6XFx0XFx0XFx0fVxcbiA0NzU6XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdID0gbmV4dDtcXG4gNDc2OlxcdFxcdH0gZWxzZSB7XFxuIDQ3NzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGIgPSBpdGVyLnByZXZfZW50cnkgLyBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDc4OlxcdFxcdFxcdHVuc2lnbmVkIGludCBwcyA9IGl0ZXIucHJldl9lbnRyeSAlIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xcbiA0Nzk6XFx0XFx0XFx0X19iZTE2IHByZXZfbmV4dDtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0XFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBwYik7XFxuIDQ4MjpcXHRcXHRcXHRpZiAoIXBibG9jaylcXG4gNDgzOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQ4NDpcXHRcXHRcXHRwZGUgPSBcXHUwMDI2cGJsb2NrLVxcdTAwM2VkaXJlbnRzW3BzXTtcXG4gNDg1OlxcdFxcdFxcdHByZXZfbmV4dCA9IHBkZS1cXHUwMDNldS5oYXNoX25leHQ7XFxuIDQ4NjpcXHRcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbiA0ODc6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcXG4gNDkwOlxcdFxcdFxcdFxcdFxcdG5hbWUtXFx1MDAzZWxlbiwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ5MTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0OTI6XFx0XFx0XFx0fVxcbiA0OTM6XFx0XFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuIDQ5NDpcXHRcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUsIHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uKTtcXG4gNDk5OlxcdFxcdGFmc19zdGF0X3Yodm5vZGUsIG5fZGlyX3JtKTtcXG4gNTAwOlxcdFxcdF9kZWJ1ZyhcXFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXFxcIiwgbmFtZS1cXHUwMDNlbmFtZSwgYiwgc2xvdCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdG91dF91bm1hcDpcXG4gNTAzOlxcdFxcdGFmc19kaXJfZW5kX2l0ZXIoXFx1MDAyNml0ZXIpO1xcbiA1MDQ6XFx0XFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiA1MDU6XFx0XFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gNTA2OlxcdFxcdHJldHVybjtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0YWxyZWFkeV9pbnZhbGlkYXRlZDpcXG4gNTA5OlxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxcbiA1MTA6XFx0XFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDUxMTpcXHRcXHRnb3RvIG91dF91bm1hcDtcXG4gNTEyOlxcdFxcbiA1MTM6XFx0ZXJyb3I6XFxuIDUxNDpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDIuMjU4NjAyMzUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzAxNDg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFGUyBDb2RlOiBCbG9jayBJdGVyYXRpb24gYW5kIFNlcnZlciBQcm9iaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZnMvYWZzL2Rpcl9lZGl0LmNgLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB3ZSB3ZXJlIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgYGJsb2NrYCBhbmQgYHBibG9ja2AgdXNpbmcgdGhlIGBpdGVyYCBzdHJ1Y3QuIFdlIHVzZWQgdG8gY2FsbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgZGlyZWN0bHksIGJ1dCBpdCB3YXMgcG9zc2libGUgdGhhdCBgaXRlci5ibG9ja2AgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgaW4gYSBiYWQgc3RhdGXigJRlaXRoZXIgc3RpbGwgc2V0IGFmdGVyIHVzZSBvciB1bm1hcHBlZCBhdCB0aGUgd3JvbmcgdGltZSwgb3IgcGVyaGFwcyBldmVuIHVubWFwcGVkIHR3aWNlISBUaGUgaW50cm9kdWN0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpYCBpcyBzbWFydC4gSXQgY2VudHJhbGl6ZXMgdGhlIGBrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jaylgIGNhbGwgYW5kIGFsc28gY2xlYXJzIGBpdGVyLVx1MDAzZWJsb2NrID0gTlVMTGAuIFRoaXMgaXMgYSBtdWNoIGNsZWFuZXIgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSB1bm1hcHBpbmcgYW5kIGNsZWFyaW5nIG9jY3VyIGNvbnNpc3RlbnRseSBhdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIG9yIG9uIGVycm9yIHZpYSB0aGUgYG91dF91bm1hcGAgbGFiZWwuIFRoaXMgc2hvdWxkIHByZXZlbnQgdGhvc2UgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBJIGxpa2UgdGhpcyFcblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIG1vdmUgb3ZlciB0byBgZnMvYWZzL2ZzX3Byb2JlLmNgLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjU4LiBJdCBsb29rcyBsaWtlIGl0IGRlYWxzIHdpdGggYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYG9sZF9hbGlzdGAgdmFyaWFibGUuIEl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbGx5IHJlZHVuZGFudCBhc3NpZ25tZW50LiBMZXQgbWUgZGlnIGludG8gaXQgYW5kIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLiBTZWVtcyB3ZSBhcmUgY29weWluZyBzb21lIHN0YXRlIHRvIGBlc3RhdGVgLiBUaGUgbmV3IGxpbmUgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGBuZXdfYWxpc3RgIGlmIHRoZSBgb2xkYCBzZXJ2ZXIgaXMgbm90IGNoYW5naW5nLiBUaGlzIG9wdGltaXphdGlvbiBtYXkgYmUgbW9yZSBwZXJmb3JtYW50IHRoYW4gYSBjb21wbGV0ZSByZXBsYWNlLiBMZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyBvdmVyYWxsIHBlcmZvcm1hbmNlLCBidXQgaXQgYXBwZWFycyBzb3VuZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjowOC4zODg3NTQxMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9mc19wcm9iZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR7XFxuIDI0MTpcXHRcXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XFxuIDI0MjpcXHRcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xcbiAyNDM6XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0X2VudGVyKFxcXCIlcFVcXFwiLCBcXHUwMDI2c2VydmVyLVxcdTAwM2V1dWlkKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XFxuIDI0ODpcXHRcXHRpZiAoIWVzdGF0ZSlcXG4gMjQ5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmVzdGF0ZS1cXHUwMDNlcmVmLCAyKTtcXG4gMjUyOlxcdFxcdGVzdGF0ZS1cXHUwMDNlc2VydmVyX2lkID0gc2VydmVyLVxcdTAwM2VkZWJ1Z19pZDtcXG4gMjUzOlxcdFxcdGVzdGF0ZS1cXHUwMDNlcnR0ID0gVUlOVF9NQVg7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlZnNfbG9jayk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSxcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2c2VydmVyLVxcdTAwM2Vmc19sb2NrKSk7XFxuIDI1OTpcXHRcXHRpZiAob2xkKSB7XFxuIDI2MDpcXHRcXHRcXHRlc3RhdGUtXFx1MDAzZXJlc3BvbnNpdmVfc2V0ID0gb2xkLVxcdTAwM2VyZXNwb25zaXZlX3NldDtcXG4gMjYxOlxcdFxcdFxcdG9sZF9hbGlzdCA9IG9sZC1cXHUwMDNlYWRkcmVzc2VzO1xcbiAyNjI6XFx0XFx0XFx0aWYgKCFuZXdfYWxpc3QpXFxuIDI2MzpcXHRcXHRcXHRcXHRuZXdfYWxpc3QgPSBvbGQtXFx1MDAzZWFkZHJlc3NlcztcXG4gMjY0OlxcdFxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0aWYgKG9sZF9hbGlzdCAhPSBuZXdfYWxpc3QpXFxuIDI2NzpcXHRcXHRcXHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIG9sZF9hbGlzdCwgbmV3X2FsaXN0KTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0ZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXMgPSBhZnNfZ2V0X2FkZHJsaXN0KG5ld19hbGlzdCwgYWZzX2FsaXN0X3RyYWNlX2dldF9lc3RhdGUpO1xcbiAyNzA6XFx0XFx0YWxpc3QgPSBlc3RhdGUtXFx1MDAzZWFkZHJlc3NlcztcXG4gMjcxOlxcdFxcdGVzdGF0ZS1cXHUwMDNlcHJvYmVfc2VxID0gKytzZXJ2ZXItXFx1MDAzZXByb2JlX2NvdW50ZXI7XFxuIDI3MjpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZlc3RhdGUtXFx1MDAzZW5yX3Byb2JpbmcsIGFsaXN0LVxcdTAwM2Vucl9hZGRycyk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdGlmIChuZXdfYWxpc3QpXFxuIDI3NTpcXHRcXHRcXHRzZXJ2ZXItXFx1MDAzZWFkZHJfdmVyc2lvbiA9IG5ld19hbGlzdC1cXHUwMDNldmVyc2lvbjtcXG4gMjc2OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlLCBlc3RhdGUpO1xcbiAyNzc6XFx0XFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZzX2xvY2spO1xcbiAyNzg6XFx0XFx0aWYgKG9sZClcXG4gMjc5OlxcdFxcdFxcdHNldF9iaXQoQUZTX0VTVEFURV9TVVBFUlNFREVELCBcXHUwMDI2b2xkLVxcdTAwM2VmbGFncyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHRyYWNlX2Fmc19lc3RhdGUoZXN0YXRlLVxcdTAwM2VzZXJ2ZXJfaWQsIGVzdGF0ZS1cXHUwMDNlcHJvYmVfc2VxLCByZWZjb3VudF9yZWFkKFxcdTAwMjZlc3RhdGUtXFx1MDAzZXJlZiksXFxuIDI4MjpcXHRcXHRcXHRcXHQgYWZzX2VzdGF0ZV90cmFjZV9hbGxvY19wcm9iZSk7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGFmc19nZXRfYWRkcmVzc19wcmVmZXJlbmNlcyhuZXQsIG5ld19hbGlzdCk7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdHNlcnZlci1cXHUwMDNlcHJvYmVkX2F0ID0gamlmZmllcztcXG4gMjg3OlxcdFxcdHVucHJvYmVkID0gKDFVTCBcXHUwMDNjXFx1MDAzYyBhbGlzdC1cXHUwMDNlbnJfYWRkcnMpIC0gMTtcXG4gMjg4OlxcdFxcdHdoaWxlICh1bnByb2JlZCkge1xcbiAyODk6XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4ID0gMCwgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDguMzg4ODk4MzQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTAzNTkyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFGUyBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkgaW1tZWRpYXRlbHkgc3BvdCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggaG93IGBvbGRfYWxpc3RgIGlzIGJlaW5nIGhhbmRsZWQuIEkgc2VlIGl0J3MgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlbiB3aXRoaW4gdGhlIGBpZiAob2xkKWAgYmxvY2ssIHRoZSBjcnVjaWFsIGFzc2lnbm1lbnQgb2YgYG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXNgIHNlZW1zIHRvIGJlIG1pc3NpbmcuIFRoYXQgbWVhbnMgYG9sZF9hbGlzdGAgb25seSBnZXRzIGEgdmFsaWQgYWRkcmVzcyBsaXN0IGlmIHNvbWV0aGluZyBlbHNlIHNldHMgaXQgZmlyc3QuIE90aGVyd2lzZSwgaXQgc3RheXMgYE5VTExgLiBUaGlzIG92ZXJzaWdodCBoYXMgc29tZSBzZXJpb3VzIGltcGxpY2F0aW9ucy5cblxuTm93LCBiZWNhdXNlIGBvbGRfYWxpc3RgIGNvdWxkIHJlbWFpbiBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBvbGRfYWxpc3QgIT0gbmV3X2FsaXN0YCBpcyB3aGVyZSB0aGluZ3MgYnJlYWsgZG93bi4gVGhlIGNvZGUgdHJlYXRzICphbGwqIG9sZCBwZWVycyBhcyBcIm5vbi1leGlzdGVudFwiIGJlY2F1c2UgYG9sZF9hbGlzdGAgaXMsIGluIGVmZmVjdCwgYWx3YXlzIGBOVUxMYCBpbiB0aGF0IHNjZW5hcmlvLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGxvZ2ljIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgdG8gYmVoYXZlIGluY29ycmVjdGx5LCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHdoYXQgd2Ugd2FudC5cblxuSSdsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYGZzL2Fmcy9zZXJ2ZXIuY2Agbm93IHRvIHNlZSB3aGF0IGVsc2UgY291bGQgYmUgaW5mbHVlbmNpbmcgdGhlIHNpdHVhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgYXJvdW5kIGxpbmUgMjQyLiBBaCwgdGhlcmUgaXQgaXMuIExvb2tpbmcgYXQgdGhpcyBibG9jayBvZiBjb2RlLCBJJ20gbm90aWNpbmcgYW4gaW50ZXJlc3RpbmcgY2FsbCB0byBga2ZyZWUoKWAgd2l0aCBhIHBvaW50ZXIgcmVsYXRlZCB0byBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY2xlYW51cCBoYXBwZW5pbmcsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBob3cgdGhlIHNlcnZlciBlbmRwb2ludHMgYXJlIG1hbmFnZWQuIEknbGwgbmVlZCB0byBleGFtaW5lIGhvdyBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYCBpcyBiZWluZyBoYW5kbGVkIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLCB0byBzZWUgaWYgdGhlIG1pc3NpbmcgYXNzaWdubWVudCBpcyBjb25uZWN0ZWQgdG8gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjoxMS44OTkyNjAxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL3NlcnZlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHR1cF93cml0ZShcXHUwMDI2Y2VsbC1cXHUwMDNlZnNfbG9jayk7XFxuIDIyMTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2VydmVyLVxcdTAwM2V0aW1lcik7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdC8qIElmIHdlIGdldCB0byBjcmVhdGUgdGhlIHNlcnZlciwgd2UgbG9vayB1cCB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuXFxuIDIyNDpcXHRcXHQgKiBpbW1lZGlhdGVseSBkaXNwYXRjaCBhbiBhc3luY2hyb25vdXMgcHJvYmUgdG8gZWFjaCBpbnRlcmZhY2Ugb24gdGhlXFxuIDIyNTpcXHRcXHQgKiBmaWxlc2VydmVyLiAgVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgcmVwZWF0LXByb2Jpbmcgc2VydmljZSBpc1xcbiAyMjY6XFx0XFx0ICogc3RhcnRlZC5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKGNyZWF0aW5nKSB7XFxuIDIyOTpcXHRcXHRcXHRhbGlzdCA9IGFmc192bF9sb29rdXBfYWRkcnMoc2VydmVyLCBrZXkpO1xcbiAyMzA6XFx0XFx0XFx0aWYgKElTX0VSUihhbGlzdCkpIHtcXG4gMjMxOlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoYWxpc3QpO1xcbiAyMzI6XFx0XFx0XFx0XFx0Z290byBjcmVhdGVfZmFpbGVkO1xcbiAyMzM6XFx0XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRcXHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVxcdTAwM2VuZXQsIHNlcnZlciwgYWxpc3QsIGtleSk7XFxuIDIzNjpcXHRcXHRcXHRpZiAocmV0KVxcbiAyMzc6XFx0XFx0XFx0XFx0Z290byBjcmVhdGVfZmFpbGVkO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoQUZTX1NFUlZFUl9GTF9DUkVBVElORywgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpO1xcbiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRvdXQ6XFxuIDI0MzpcXHRcXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xcbiAyNDQ6XFx0XFx0aWYgKGNhbmRpZGF0ZSkge1xcbiAyNDU6XFx0XFx0XFx0a2ZyZWUoY2FuZGlkYXRlKTtcXG4gMjQ2OlxcdFxcdFxcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVxcdTAwM2VuZXQpO1xcbiAyNDc6XFx0XFx0fVxcbiAyNDg6XFx0XFx0cmV0dXJuIHNlcnZlciA/OiBFUlJfUFRSKHJldCk7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdHdhaXRfZm9yX2NyZWF0aW9uOlxcbiAyNTE6XFx0XFx0YWZzX3NlZV9zZXJ2ZXIoc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3dhaXRfY3JlYXRlKTtcXG4gMjUyOlxcdFxcdHdhaXRfb25fYml0KFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzLCBBRlNfU0VSVkVSX0ZMX0NSRUFUSU5HLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuIDI1MzpcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX1VOQ1JFQVRFRCwgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpKSB7XFxuIDI1NDpcXHRcXHRcXHQvKiBCYXJyaWVyOiByZWFkIGZsYWcgYmVmb3JlIGVycm9yICovXFxuIDI1NTpcXHRcXHRcXHRyZXQgPSBSRUFEX09OQ0Uoc2VydmVyLVxcdTAwM2VjcmVhdGVfZXJyb3IpO1xcbiAyNTY6XFx0XFx0XFx0YWZzX3B1dF9zZXJ2ZXIoY2VsbC1cXHUwMDNlbmV0LCBzZXJ2ZXIsIGFmc19zZXJ2ZXJfdHJhY2VfdW51c2VfY3JlYXRlX2ZhaWwpO1xcbiAyNTc6XFx0XFx0XFx0c2VydmVyID0gTlVMTDtcXG4gMjU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjoxMS44OTk0MDU0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE2ODAwMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUZTIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGZzL2Fmcy9zZXJ2ZXIuY2AsIEkgaWRlbnRpZmllZCBhbmQgcmVtb3ZlZCBhIG5hc3R5IGBrZnJlZWAgY2FsbCBvbiBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYCBkdXJpbmcgdGhlIGNsZWFudXAgcGF0aCBvZiBgYWZzX2xvb2t1cF9zZXJ2ZXJgLiBUaGF0IHdhcyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIGJlY2F1c2UgdGhhdCBwYXJ0aWN1bGFyIHBvaW50ZXIgc2hvdWxkbid0IGhhdmUgYmVlbiBmcmVlZCB0aGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uZGl0aW9ucyB3aGVyZSB0aGUgY2FuZGlkYXRlIHNlcnZlciB3YXNuJ3QgZXZlbiBiZWluZyB1c2VkIG9yIGNvdWxkIGhhdmUgYmVlbiBhbm90aGVyIHNlcnZlci4gQSBjcml0aWNhbCBvdmVyc2lnaHQsIHRoYW5rZnVsbHkgY2F1Z2h0LlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzOlxuXG4xLiAgKipgZnMvYWZzL2FkZHJfbGlzdC5jYCoqOiBGaXhlZCBhbiBpbmZpbml0ZSBsb29wIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpYCBieSBjb3JyZWN0bHkgaW5jcmVtZW50aW5nIHRoZSBsb29wIGluZGljZXMgKGBuYCBhbmQgYG9gKSB3aGVuIHRoZSBwZWVyIHBvaW50ZXJzIChgcG5gIGFuZCBgcG9gKSBtYXRjaC4gU2ltcGxlIGJ1dCBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHNvZnRsb2Nrcy5cbjIuICAqKmBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGZzL2Fmcy9pbnRlcm5hbC5oYCoqOiBTdHJlYW1saW5lZCB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKWAgY2FsbCBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGBhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpYC4gVGhpcyBhdm9pZHMgaW1wcm9wZXIgdW5tYXBwaW5nL25lc3Rpbmcgb2YgdGhlIGxvY2FsIGttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3RhYmlsaXR5IHByb2JsZW1zLiBHb29kIGZvciBjb2RlIGh5Z2llbmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuMy4gICoqYGZzL2Fmcy9mc19wcm9iZS5jYCoqOiBDb3JyZWN0ZWQgdGhlIGFzc2lnbm1lbnQgYG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXNgIHRvIGVuc3VyZSBwcm9wZXIgdHJhY2tpbmcgb2YgcGVlciBhcHBkYXRhIGNoYW5nZXMuIFRoaXMgd2FzIGZpeGluZyBhIGxvZ2ljIGJ1ZzsgaXQgZW5zdXJlcyBwcm9wZXIgdHJhY2tpbmcgb2YgdGhlIGBvbGQtXHUwMDNlYWRkcmVzc2VzYCBzdHJ1Y3QgZm9yIGZ1dHVyZSB1c2UuXG40LiAgKipgZnMvYWZzL3NlcnZlci5jYCoqOiBUaGUgY3JpdGljYWwgcmVtb3ZhbCBJIG1lbnRpb25lZCBlYXJsaWVyOiB0aGUgZXJyb25lb3VzIGBrZnJlZWAuIFRoYXQgb25lLCBpZiBub3QgY2F1Z2h0LCB3b3VsZCBoYXZlIGNhdXNlZCBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBBcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UgYmVpbmcgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXM/IExldCdzIHNlZTpcblxuKiAgICoqYGFmc19zZXRfcGVlcl9hcHBkYXRhYCoqOiBObywgdGhpcyBpcyBmaXhpbmcgbG9vcCBpdGVyYXRpb24gbG9naWMsIGRvZXNuJ3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgKipgYWZzX2Rpcl9lbmRfaXRlcmAqKjogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHNhZmVseSB1bm1hcHBpbmcgZGlyZWN0b3J5IGl0ZXJhdG9yIHBhZ2UgYnVmZmVyczsgaXQncyBhIGNsZWFudXAsIG5vdCBpbnRyb2R1Y3Rpb24gb2YgbmV3IHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG4qICAgKipgb2xkX2FsaXN0YCoqOiBObywgdGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBmaXggdG8gYW4gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGBvbGQtXHUwMDNlYWRkcmVzc2VzYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgKipga2ZyZWVgIHJlbW92YWwqKjogVGhpcyBpcyBmaXhpbmcgYW4gaW5jb3JyZWN0IGZyZWU7IGl0IHByZXZlbnRzIG1lbW9yeSBjb3JydXB0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBhY2Nlc3MgaXMgZXhwb3NlZCwgaW4gZmFjdCwgaXQgcHJvdGVjdHMgbWVtb3J5IGZyb20gYmVpbmcgaW1wcm9wZXJseSBmcmVlZC5cblxuRG9lcyBhbnkgcGFydCBvZiB0aGUgZGlmZiBoYW5kbGUgYGNvcHlfdG9fdXNlcmAsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zPyBObywgbm9uZSBvZiB0aGVzZSBhcmVhcyB3ZXJlIHRvdWNoZWQuXG5cbkJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQ6XG5cbiogICBJbmZpbml0ZSBsb29wcy9zb2Z0bG9ja3MgLSBZRVMsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYSBsb29wXG4qICAgUHJvcGVyIHVubWFwcGluZyBvZiBsb2NhbCBrbWFwcyAtIFlFUywgd2l0aCBgYWZzX2Rpcl9lbmRfaXRlcmBcbiogICBMb2dpYyBidWcgd2hlcmUgYG9sZF9hbGlzdGAgd2Fzbid0IHRyYWNrZWQgLSBZRVMsIGZpeGVkIGluIGBmc19wcm9iZS5jYFxuKiAgIEVycm9uZW91cyBkb3VibGUtZnJlZS91c2UtYWZ0ZXItZnJlZSAtIFlFUywgdGhlIGtleSBmaXggaW4gYHNlcnZlci5jYFxuXG5BbGwgdGhlIGJ1Z3MgSSBzZWUgYXJlIGxvZ2ljIGJ1Z3MsIHNvZnRsb2NrcywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgKFVBRiAvIGRvdWJsZSBmcmVlKS4gVGhlc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGRvIGEgZmluYWwgZG91YmxlLWNoZWNrLCBidXQgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLiBUaW1lIHRvIHNldCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTMyLCJPdXRwdXRUb2tlbnMiOjMwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA2OjIyLjA2NzQwODYwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 07:21:05 +0000 UTC FinishedAt: 2026-09-03 08:06:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "87d66a91-d13e-485e-b271-d156a1ad1a91" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_dir_find_block", "afs_dir_search_bucket", "afs_edit_dir_remove", "afs_fs_probe_fileserver", "afs_lookup_server", "afs_set_peer_appdata" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwX3NlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGluIHRoZSBBRlMgc3Vic3lzdGVtOlxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxuMi4gZnMvYWZzL2Rpcl9lZGl0LmMsIGZzL2Fmcy9kaXJfc2VhcmNoLmMsIGZzL2Fmcy9pbnRlcm5hbC5oOiBDb25zb2xpZGF0ZXMgbG9jYWwga21hcCB1bm1hcHBpbmcgbG9naWMgdXNpbmcgYWZzX2Rpcl9lbmRfaXRlcigpIGhlbHBlciB0byBlbnN1cmUgY2xlYW4gYW5kIGNvcnJlY3QgdW5tYXAgb3BlcmF0aW9ucyBkdXJpbmcgZGlyZWN0b3J5IGVkaXRzL3NlYXJjaGVzLlxuMy4gZnMvYWZzL2ZzX3Byb2JlLmM6IEluaXRpYWxpemVzIG9sZF9hbGlzdCBmcm9tIG9sZC1cdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cbjQuIGZzL2Fmcy9zZXJ2ZXIuYzogUmVtb3ZlcyBhbiBlcnJvbmVvdXMga2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpIGluIGFmc19sb29rdXBfc2VydmVyIGVycm9yIGNsZWFudXAsIHByZXZlbnRpbmcgaW52YWxpZC9wcmVtYXR1cmUgZnJlZSBvZiBlbmRwb2ludCBzdGF0ZS5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrcy4gUG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGhlcmUgKHN1Y2ggYXMgZG91YmxlIGZyZWUgLyB1c2UtYWZ0ZXItZnJlZSBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MpIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyB0b29saW5nLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2YzY2ZiMWY5ZGVjZTRlNzA1MWFjZWMyNWQ2NDI4YTRmMjc4YjVmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXG5pbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2FkZHJfbGlzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvYWRkcl9saXN0LmNcbkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRcdHN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC1cdTAwM2VhZGRyc1tuXS5wZWVyO1xuIFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG8gPSBvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlcjtcbiBcbi1cdFx0aWYgKHBuID09IHBvKVxuJiM0MztcdFx0aWYgKHBuID09IHBvKSB7XG4mIzQzO1x0XHRcdG4mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRvJiM0MzsmIzQzOztcbiBcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiBcdFx0aWYgKHBuIFx1MDAzYyBwbykge1xuIFx0XHRcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcbiBcdFx0XHRuJiM0MzsmIzQzOztcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbi1cdFx0Z290byBlcnJvcl91bm1hcDtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4gXG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiBcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuQEAgLTQ1OCw3ICYjNDM7NDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbkBAIC00ODUsNyAmIzQzOzQ4NCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4tXHRcdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiBcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiBcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG5AQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuIFx0XHRwZGUtXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xuLVx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdH1cbiBcbiBcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XVwmIzM0OywgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiBcbiBvdXRfdW5tYXA6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIFx0cmV0dXJuO1xuIFxuIGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiBcdGdvdG8gb3V0X3VubWFwO1xuIFxuLWVycm9yX3VubWFwOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBlcnJvcjpcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5AQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCYjMzQ7JXp4LCVkXCYjMzQ7LCBibG9jaywgc2xvdCk7XG4gXG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4mIzQzO1x0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiBcdGlmIChyZXQgPT0gLUVTVEFMRSlcbiBcdFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXHUwMDNlZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7XG4gXHRfbGVhdmUoXCYjMzQ7ID0gJWRcJiMzNDssIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4gXHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzZXJ2ZXItXHUwMDNlZnNfbG9jaykpO1xuIFx0aWYgKG9sZCkge1xuIFx0XHRlc3RhdGUtXHUwMDNlcmVzcG9uc2l2ZV9zZXQgPSBvbGQtXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XG4mIzQzO1x0XHRvbGRfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0XHRpZiAoIW5ld19hbGlzdClcbiBcdFx0XHRuZXdfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZXJ2ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL3NlcnZlci5jXG5AQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4gb3V0OlxuIFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTtcbiBcdGlmIChjYW5kaWRhdGUpIHtcbi1cdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpO1xuIFx0XHRrZnJlZShjYW5kaWRhdGUpO1xuIFx0XHRhZnNfZGVjX3NlcnZlcnNfb3V0c3RhbmRpbmcoY2VsbC1cdTAwM2VuZXQpO1xuIFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OywKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfbG9va3VwX3NlcnZlciYjMzQ7LAogICAgJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbXVsdGlwbGUgZnVuY3Rpb25hbCBidWcgZml4ZXMgaW4gdGhlIEFGUyBmaWxlc3lzdGVtIGNsaWVudDogZml4aW5nIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSB3aGVuIG1hdGNoaW5nIHBlZXJzIGFyZSBmb3VuZCwgY29ycmVjdGluZyBrdW5tYXBfbG9jYWwgaGFuZGxpbmcgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcyB2aWEgYWZzX2Rpcl9lbmRfaXRlcigpLCBlbnN1cmluZyBvbGRfYWxpc3QgaXMgcHJvcGVybHkgYXNzaWduZWQgaW4gYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoKSwgYW5kIHJlbW92aW5nIGFuIGludmFsaWQga2ZyZWUgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIoKS4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSBBRlMgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwODowNDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9hZGRyX2xpc3QuYyBiL2ZzL2Fmcy9hZGRyX2xpc3QuYwppbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NAotLS0gYS9mcy9hZnMvYWRkcl9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2FkZHJfbGlzdC5jCkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCXN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC0mZ3Q7YWRkcnNbbl0ucGVlcjsKIAkJc3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LSZndDthZGRyc1tvXS5wZWVyOwogCi0JCWlmIChwbiA9PSBwbykKJiM0MzsJCWlmIChwbiA9PSBwbykgewomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwkJCW8mIzQzOyYjNDM7OwogCQkJY29udGludWU7CiYjNDM7CQl9CiAJCWlmIChwbiAmbHQ7IHBvKSB7CiAJCQlyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7CiAJCQluJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfZWRpdC5jIGIvZnMvYWZzL2Rpcl9lZGl0LmMKaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCS8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovCiAJZGUgPSAmYW1wO2Jsb2NrLSZndDtkaXJlbnRzW3Nsb3RdOwogCWlmIChkZS0mZ3Q7dS52YWxpZCAhPSAxKQotCQlnb3RvIGVycm9yX3VubWFwOwomIzQzOwkJZ290byBlcnJvcjsKIAogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LAogCQkJICAgbnRvaGwoZGUtJmd0O3Uudm5vZGUpLCBudG9obChkZS0mZ3Q7dS51bmlxdWUpLApAQCAtNDU4LDcgJiM0Mzs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovCiAJbmV4dCA9IGRlLSZndDt1Lmhhc2hfbmV4dDsKIAltZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAogCS8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci0mZ3Q7cHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWQKIAkgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS4KQEAgLTQ4NSw3ICYjNDM7NDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCQlwZGUgPSAmYW1wO3BibG9jay0mZ3Q7ZGlyZW50c1twc107CiAJCXByZXZfbmV4dCA9IHBkZS0mZ3Q7dS5oYXNoX25leHQ7CiAJCWlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7Ci0JCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAkJCXByX3dhcm4oJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqcyYjMzQ7LAogCQkJCXZub2RlLSZndDtmaWQudmlkLCB2bm9kZS0mZ3Q7ZmlkLnZub2RlLCB2bm9kZS0mZ3Q7ZmlkLnVuaXF1ZSwKIAkJCQlpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LApAQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXBkZS0mZ3Q7dS5oYXNoX25leHQgPSBuZXh0OwotCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAl9CiAKIAluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSk7CkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCV9kZWJ1ZygmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XSYjMzQ7LCBuYW1lLSZndDtuYW1lLCBiLCBzbG90KTsKIAogb3V0X3VubWFwOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcik7CiAJa3VubWFwX2xvY2FsKG1ldGEpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIAlyZXR1cm47CiAKIGFscmVhZHlfaW52YWxpZGF0ZWQ6Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwogCWdvdG8gb3V0X3VubWFwOwogCi1lcnJvcl91bm1hcDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogZXJyb3I6CiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsCiAJCQkgICAwLCAwLCAwLCAwLCBuYW1lLSZndDtuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guYwpAQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsCiAKIAlfZW50ZXIoJiMzNDslengsJWQmIzM0OywgYmxvY2ssIHNsb3QpOwogCi0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAKIAlpZiAoZHZub2RlLSZndDtkaXJlY3Rvcnlfc2l6ZSAmbHQ7IGJsZW5kKQogCQlnb3RvIGZhaWw7CkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJcmV0ID0gLUVOT0VOVDsKIGZvdW5kOgotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQotCiBiYWQ6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAJaWYgKHJldCA9PSAtRVNUQUxFKQogCQlhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci0mZ3Q7ZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO3NlcnZlci0mZ3Q7ZnNfbG9jaykpOwogCWlmIChvbGQpIHsKIAkJZXN0YXRlLSZndDtyZXNwb25zaXZlX3NldCA9IG9sZC0mZ3Q7cmVzcG9uc2l2ZV9zZXQ7CiYjNDM7CQlvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAkJaWYgKCFuZXdfYWxpc3QpCiAJCQluZXdfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAl9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CWlmIChpdGVyLSZndDtibG9jaykgewomIzQzOwkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKJiM0MzsJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJfc2lsbHkuYwogICovCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlcnZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuYwpAQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksCiBvdXQ6CiAJYWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTsKIAlpZiAoY2FuZGlkYXRlKSB7Ci0JCWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItJmd0O2VuZHBvaW50X3N0YXRlKSk7CiAJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCWFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLSZndDtuZXQpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBRlMgUGF0Y2ggU2VyaWVzIEFuYWx5c2lzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGNoYW5nZXMgYXJlIGV2ZW4gd29ydGggZnV6emluZyDigJMgYXJlIHRoZXJlIHBvdGVudGlhbCBjb2RlIHBhdGhzIHRoYXQgY291bGQgZXhwb3NlIHZ1bG5lcmFiaWxpdGllcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgYXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZvciBmdXp6aW5nLiBUaGVuIEkmIzM5O2xsIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuCgpMb29raW5nIGF0IHRoZSBmaWxlcyBtb2RpZmllZCwgaXQgc2VlbXMgbGlrZSB0aGVyZSBhcmUgc2V2ZXJhbCBmaXhlcyByZWxhdGVkIHRvIHRoZSBBRlMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5OgoKKiAgIGBmcy9hZnMvYWRkcl9saXN0LmNgOiBUaGUgZml4IGZvciB0aGUgaW5maW5pdGUgbG9vcCBpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGlzIGludHJpZ3VpbmcuIFRoYXQga2luZCBvZiBidWcgY2FuIGVhc2lseSBsZWFkIHRvIGRlbmlhbC1vZi1zZXJ2aWNlLCBzbyBJJiMzOTtsbCBmbGFnIHRoYXQgYXMgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCiogICBgZnMvYWZzL2Rpcl9lZGl0LmNgOiBUaGUgZG91YmxlIHVubWFwIGlzc3VlIGluIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBhbm90aGVyIGFyZWEgdGhhdCB3YXJyYW50cyBjbG9zZXIgaW5zcGVjdGlvbi4gTWVtb3J5IG1hbmFnZW1lbnQgZXJyb3JzIGxpa2UgdGhhdCBhcmUgb2Z0ZW4gZnJ1aXRmdWwgdGFyZ2V0cy4gVGhlIHVzZSBvZiBgYWZzX2Rpcl9lbmRfaXRlcmAgaGVyZSBpcyBhbHNvIHNvbWV0aGluZyB0byBjb25zaWRlciwgYXMgaXQgc2VlbXMgdG8gYmUgaW52b2x2ZWQgaW4gdGhlc2UgZml4ZXMuCiogICBgZnMvYWZzL2Rpcl9zZWFyY2guY2A6IFRoZSByZWZhY3RvcmluZyBpbnZvbHZpbmcgYGt1bm1hcF9sb2NhbGAgYW5kIGBhZnNfZGlyX2VuZF9pdGVyYCBpbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaXRlcmF0aW9uIGxvZ2ljIGlzIGNvbXBsZXgsIGFuZCBjb21wbGV4IGNvZGUgb2Z0ZW4gaGFzIGJ1Z3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYWZzX2Rpcl9lbmRfaXRlcmAgaXMgaW50ZW5kZWQgdG8gd29yay4KKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IFRoZSB1bmluaXRpYWxpemVkIGBvbGRfYWxpc3RgIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHJhaXNlcyBhIHJlZCBmbGFnLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGludmVzdGlnYXRlLgoqICAgYGZzL2Fmcy9pbnRlcm5hbC5oYDogVGhlIGFkZGl0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBhIGdvb2Qgc2lnbnBvc3QuIFRoYXQgaGludHMgYXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZC4KKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBUaGUgYGtmcmVlYCBmaXggaW4gYGFmc19sb29rdXBfc2VydmVyYCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4KCk5leHQsIEkmIzM5O2xsIGNoZWNrIHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIEFGUyBpbiB0aGUga2VybmVsLiBLbm93aW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB3aWxsIGd1aWRlIGhvdyBJIGJ1aWxkIGEgZnV6emVyIHRoYXQgY2FuIGFjdHVhbGx5IHJlYWNoIHRoZSBjb2RlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLiBUaGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgSSYjMzk7dmUgaWRlbnRpZmllZCB0byBzZWUgd2hpY2ggaGF2ZSB0aGUgYmVzdCBvcHBvcnR1bml0eSB0byBleGVyY2lzZSBhbGwgY29kZSBwYXRocyBpbiB0aGlzIHBhdGNoIHNlcmllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9hZnMvS2NvbmZpZzoyOmNvbmZpZyBBRlNfRlNcbmZzL2Fmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBbmRyZXcgRmlsZSBTeXN0ZW0gc3VwcG9ydCAoQUZTKVwmIzM0O1xuLS1cbmZzL2Fmcy9LY29uZmlnPTE3PWNvbmZpZyBBRlNfREVCVUdcbi0tXG5mcy9hZnMvS2NvbmZpZy0yNi1cbmZzL2Fmcy9LY29uZmlnOjI3OmNvbmZpZyBBRlNfRlNDQUNIRVxuZnMvYWZzL0tjb25maWctMjgtXHRib29sIFwmIzM0O1Byb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDQyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCBgZnMvYWZzL0tjb25maWdgLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIGZpbGUgc3lzdGVtczoKCioqRGl2aW5nIGludG8gdGhlIEFGUyBLY29uZmlnKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL2Fmcy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtIGRyaXZlciB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzIG9mIGBjb25maWdgIG9wdGlvbnMsIGxpa2VseSBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnYCBibG9ja3MgdG8gb3JnYW5pemUgcmVsYXRlZCBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyBjbGVhcmx5IGRvY3VtZW50ZWQsIHdpdGggY29uY2lzZSBkZXNjcmlwdGlvbnMgZXhwbGFpbmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICBUaGUgbWFpbiAmIzM0O0VuYWJsZSBBRlMgZmlsZSBzeXN0ZW0mIzM0OyBvcHRpb24gLSB0aGlzIHdpbGwgcHJvYmFibHkgYmUgdGhlIHJvb3QgYW5kIEkgY2FuIGV4cGVjdCBpdCBpcyBhIGRlcGVuZGVuY3kgb24gc29tZSBuZXR3b3JrIHN0YWNrIG9wdGlvbnMgYmVpbmcgdHVybmVkIG9uLCBzdWNoIGFzIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YC4KKiAgIEZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdmFyaW91cyBBRlMgZmVhdHVyZXM6IFNob3VsZCB0aGVyZSBiZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGxpa2UgS2VyYmVyb3M/IFdoYXQgYWJvdXQgaGFuZGxpbmcgb2Ygdm9sdW1lIG1hbmFnZW1lbnQgb3IgY2FjaGUgc2V0dGluZ3M/CiogICBEZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZHJpdmVyczogSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uIG5ldHdvcmtpbmcgY29tcG9uZW50cywgY3J5cHRvIG1vZHVsZXMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBBRlMgcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8KKiAgIERlZmF1bHQgc2V0dGluZ3M6IEFyZSBzZW5zaWJsZSBkZWZhdWx0cyBwcm92aWRlZCwgb3Igd2lsbCBJIG5lZWQgdG8gbWFudWFsbHkgY29uZmlndXJlIGV2ZXJ5dGhpbmc/IEkgaG9wZSB0aGVyZSBhcmUgcmVhc29uYWJsZSBkZWZhdWx0cyB0aGF0IGEgc3lzYWRtaW4gY2FuIHR3ZWFrLCBhcyBvcHBvc2VkIHRvIHJlcXVpcmluZyBhbGwgcGFyYW1ldGVycyBiZSBleHBsaWNpdGx5IHNldC4KKiAgIEhlbHAgdGV4dDogSG9wZWZ1bGx5LCBlYWNoIG9wdGlvbiBoYXMgZGVzY3JpcHRpdmUgaGVscCB0ZXh0IGV4cGxhaW5pbmcgaXRzIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucywgaW5jbHVkaW5nIGFueSBwZXJmb3JtYW5jZSB0cmFkZW9mZnMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIEFueSB3YXJuaW5ncyByZWdhcmRpbmcgdGhlIGZlYXR1cmUmIzM5O3MgbWF0dXJpdHkgb3Iga25vd24gYnVncyB3b3VsZCBiZSBhcHByZWNpYXRlZC4KKiAgIEFueSBidWlsZC10aW1lIGNoZWNrcyBvciBlcnJvciBtZXNzYWdlczogSSB3YW50IHRvIGJlIHN1cmUgdGhhdCBJJiMzOTtsbCBiZSB3YXJuZWQgaWYgdGhlcmUmIzM5O3MgYW4gb2J2aW91cyBjb25mbGljdCBvciBtaXNjb25maWd1cmF0aW9uLgoKVGhlIHByZXNlbmNlIG9mIGFueSBgc2VsZWN0YCBvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUgaW1wb3J0YW50IGFzIHRoZXkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljLCBzbyB0aGF0IHdpbGwgYmUgYSBwb2ludCB0byBwYXkgYXR0ZW50aW9uIHRvLgpUaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEFGUyYjMzk7cyBjYXBhYmlsaXRpZXMgYXJlLCBpdHMgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRvIGN1c3RvbWl6ZSBpdCBmb3IgZGlmZmVyZW50IHN5c3RlbSByZXF1aXJlbWVudHMuIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEFGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgNTpcdFx0c2VsZWN0IEFGX1JYUlBDXG4gICA2Olx0XHRzZWxlY3QgRE5TX1JFU09MVkVSXG4gICA3Olx0XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT19LUkI1XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBnZXQgYW4gZXhwZXJpbWVudGFsIEFuZHJldyBGaWxlIFN5c3RlbVxuICAxMTpcdFx0ICBkcml2ZXIuIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHVuc2VjdXJlZCByZWFkLW9ubHkgQUZTIGFjY2Vzcy5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBBRlNfREVCVUdcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7QUZTIGR5bmFtaWMgZGVidWdnaW5nXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAyMDpcdFx0aGVscFxuICAyMTpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgcnVudGltZSBjb250cm9sbGFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIGFwcGVhci5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBBRlNfRlNDQUNIRVxuICAyODpcdFx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4gIDI5Olx0XHRkZXBlbmRzIG9uIEFGU19GUz1tIFx1MDAyNlx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFx1MDAyNlx1MDAyNiBGU0NBQ0hFPXlcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2hcbiAgMzI6XHRcdCAgdGhlIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoZSBtYW5hZ2VyXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcbiAgMzU6XHRcdGJvb2wgXCYjMzQ7QUZTIHNlcnZlciBjdXJzb3IgZGVidWdnaW5nXCYjMzQ7XG4gIDM2Olx0XHRkZXBlbmRzIG9uIEFGU19GU1xuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBTYXkgWSBoZXJlIHRvIGNhdXNlIHRoZSBjb250ZW50cyBvZiBhIHNlcnZlciBjdXJzb3IgdG8gYmUgZHVtcGVkIHRvXG4gIDM5Olx0XHQgIHRoZSBkbWVzZyBsb2cgaWYgdGhlIHNlcnZlciByb3RhdGlvbiBhbGdvcml0aG0gZmFpbHMgdG8gc3VjY2Vzc2Z1bGx5XG4gIDQwOlx0XHQgIGNvbnRhY3QgYSBzZXJ2ZXIuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgNDM6XHRcbiAgNDQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBDaGVja3BvaW50OiBEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBMYW5kc2NhcGUqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJiMzOTtzIGxpa2VseSBmaWxlc3lzdGVtLXJlbGF0ZWQsIHNvIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2Fmcy9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIEFGUy1zcGVjaWZpYyBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEFGUyBpcyBiZWluZyBidWlsdCwgbGlua2VkLCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwuIFRoaXMgYE1ha2VmaWxlYCB3aWxsIHJldmVhbCB0aGUga2V5IGNvbXBvbmVudHM6IG9iamVjdCBmaWxlcywgbGlicmFyaWVzLCBpbmNsdWRlIHBhdGhzLCBhbnkgc3BlY2lhbCBmbGFncyBvciBkZWZpbmVzIHNwZWNpZmljIHRvIHRoZSBBRlMgaW1wbGVtZW50YXRpb24uIEtub3dpbmcgdGhlc2Ugd2lsbCBnZXQgbWUgb25lIHN0ZXAgY2xvc2VyIHRvIGlzb2xhdGluZyB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBidWlsZCBzdHJhdGVneS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG1pc2NvbmZpZ3VyYXRpb25zLCBtaXNzaW5nIGRlcGVuZGVuY2llcywgb3IgY29uZmxpY3RpbmcgZmxhZ3MgdGhhdCBtaWdodCBiZSBjb250cmlidXRpbmcgdG8gdGhlIHByb2JsZW0gSSYjMzk7bSB0cnlpbmcgdG8gc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0a2Fmcy15IDo9IFxcXG4gICA3Olx0XHRhZGRyX2xpc3QubyBcXFxuICAgODpcdFx0YWRkcl9wcmVmcy5vIFxcXG4gICA5Olx0XHRjYWxsYmFjay5vIFxcXG4gIDEwOlx0XHRjZWxsLm8gXFxcbiAgMTE6XHRcdGNtX3NlY3VyaXR5Lm8gXFxcbiAgMTI6XHRcdGNtc2VydmljZS5vIFxcXG4gIDEzOlx0XHRkaXIubyBcXFxuICAxNDpcdFx0ZGlyX2VkaXQubyBcXFxuICAxNTpcdFx0ZGlyX3NlYXJjaC5vIFxcXG4gIDE2Olx0XHRkaXJfc2lsbHkubyBcXFxuICAxNzpcdFx0ZHlucm9vdC5vIFxcXG4gIDE4Olx0XHRmaWxlLm8gXFxcbiAgMTk6XHRcdGZsb2NrLm8gXFxcbiAgMjA6XHRcdGZzY2xpZW50Lm8gXFxcbiAgMjE6XHRcdGZzX29wZXJhdGlvbi5vIFxcXG4gIDIyOlx0XHRmc19wcm9iZS5vIFxcXG4gIDIzOlx0XHRpbm9kZS5vIFxcXG4gIDI0Olx0XHRtYWluLm8gXFxcbiAgMjU6XHRcdG1pc2MubyBcXFxuICAyNjpcdFx0bW50cHQubyBcXFxuICAyNzpcdFx0cm90YXRlLm8gXFxcbiAgMjg6XHRcdHJ4cnBjLm8gXFxcbiAgMjk6XHRcdHNlY3VyaXR5Lm8gXFxcbiAgMzA6XHRcdHNlcnZlci5vIFxcXG4gIDMxOlx0XHRzZXJ2ZXJfbGlzdC5vIFxcXG4gIDMyOlx0XHRzdXBlci5vIFxcXG4gIDMzOlx0XHRzeW1saW5rLm8gXFxcbiAgMzQ6XHRcdHZhbGlkYXRpb24ubyBcXFxuICAzNTpcdFx0dmxjbGllbnQubyBcXFxuICAzNjpcdFx0dmxfYWxpYXMubyBcXFxuICAzNzpcdFx0dmxfbGlzdC5vIFxcXG4gIDM4Olx0XHR2bF9wcm9iZS5vIFxcXG4gIDM5Olx0XHR2bF9yb3RhdGUubyBcXFxuICA0MDpcdFx0dm9sdW1lLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFGUyBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGFwcHJvYWNoIGZ1enppbmcgQUZTLCB0aGUgQW5kcmV3IEZpbGUgU3lzdGVtIGNsaWVudCwgd2l0aGluIGEgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIFNpbmNlIGl0JiMzOTtzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBleGlzdHMgKmluLXRyZWUqIGluIExpbnV4LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgSSAqY2FuKiByZWFjaCBhbmQgZnV6eiBpdC4gSXQmIzM5O3MgbW91bnRhYmxlIHVzaW5nIHRoZSBzdGFuZGFyZCBgbW91bnQgLXQgYWZzYCBjb21tYW5kLCBzbyBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHVzaW5nIHJlZ3VsYXIgVkZTIHN5c2NhbGxzLiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgdGFyZ2V0IGZvciBwcm9iaW5nIGFuZCBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBwb3RlbnRpYWxseSBtb2RpZmllZCBmdW5jdGlvbnMuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRvIGludmVzdGlnYXRlOgoKKiAgIGBmcy9hZnMvYWRkcl9saXN0LmNgOiBzcGVjaWZpY2FsbHksIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAKKiAgIGBmcy9hZnMvZGlyX2VkaXQuY2A6IHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gaXMgb24gdGhlIHJhZGFyCiogICBgZnMvYWZzL2Rpcl9zZWFyY2guY2A6IEkmIzM5O2xsIGJlIGNoZWNraW5nIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YAoqICAgYGZzL2Fmcy9mc19wcm9iZS5jYDogYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCBpcyBuZXh0CiogICBgZnMvYWZzL3NlcnZlci5jYDogRmluYWxseSwgYGFmc19sb29rdXBfc2VydmVyYCB3aWxsIGJlIHNjcnV0aW5pemVkCgpUaGUgY29yZSBvZiBteSBhcHByb2FjaCBpcyB0byBkZXRlcm1pbmUgaWYgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjY2Vzc2libGUg4oCTIGFyZSB0aGV5IG5vbi1zdGF0aWMsIGV4cG9ydGVkLCBvciBhY3QgYXMgZW50cnlwb2ludHMgdGhhdCBJIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBsYXJnZXIgQUZTIGFyY2hpdGVjdHVyZSB0byBmb3JtdWxhdGUgZWZmZWN0aXZlIGZ1enppbmcgaW5wdXRzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBmcy9hZnMvYWRkcl9saXN0LmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSAzOTQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRyZXR1cm47XG4gMzgxOlx0XHR9XG4gMzgyOlx0XHRpZiAoIW5ld19hbGlzdCkge1xuIDM4MzpcdFx0XHQvKiBEZWFkIHNlcnZlci4gIEp1c3QgcmVtb3ZlIGFsbC4gKi9cbiAzODQ6XHRcdFx0Zm9yICg7IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRyczsgbyYjNDM7JiM0MzspXG4gMzg1Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xuIDM4NjpcdFx0XHRyZXR1cm47XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXG4gMzkwOlx0XHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXG4gMzkxOlx0XHQgKiByZWNvcmQuXG4gMzkyOlx0XHQgKi9cbiAzOTM6XHRcdHdoaWxlIChuIFx1MDAzYyBuZXdfYWxpc3QtXHUwMDNlbnJfYWRkcnMgXHUwMDI2XHUwMDI2IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRycykge1xuIDM5NDpcdFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiAzOTU6XHRcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gMzk2Olx0XG4gMzk3Olx0XHRcdGlmIChwbiA9PSBwbykge1xuIDM5ODpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDM5OTpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQwMTpcdFx0XHR9XG4gNDAyOlx0XHRcdGlmIChwbiBcdTAwM2MgcG8pIHtcbiA0MDM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7XG4gNDA0Olx0XHRcdFx0biYjNDM7JiM0Mzs7XG4gNDA1Olx0XHRcdH0gZWxzZSB7XG4gNDA2Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG8sIDApO1xuIDQwNzpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwODpcdFx0XHR9XG4gNDA5Olx0XHR9XG4gNDEwOlx0XG4gNDExOlx0XHRpZiAobiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxMjpcdFx0XHRmb3IgKDsgbiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBuJiM0MzsmIzQzOylcbiA0MTM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlciwgZGF0YSk7XG4gNDE0Olx0XHRpZiAobyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxNTpcdFx0XHRmb3IgKDsgbyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBvJiM0MzsmIzQzOylcbiA0MTY6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XG4gNDE3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTEwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgYW5kIEl0cyBDYWxsZXJzKioKCk9rYXksIHNvIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGRvaW5nIGlzIGRpZ2dpbmcgaW50byB0aGlzIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZnVuY3Rpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBpdHMgZXhhY3Qgc2lnbmF0dXJlIOKAkyB0aGUgaW5wdXQgcGFyYW1ldGVycywgdGhlIHJldHVybiB0eXBlLCB0aGUgd2hvbGUgc2hlYmFuZy4gS25vd2luZyB0aGUgc3BlY2lmaWNzIGlzIGNydWNpYWwuIE9uY2UgSSYjMzk7dmUgZ290IHRoYXQgc3RyYWlnaHQsIEkgY2FuIG1vdmUgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscyBpcyBnb2luZyB0byBwcm92aWRlIHRoZSB0cnVlIGluc2lnaHRzIGludG8gdGhpcyBjb2Rl4oCZcyBmdW5jdGlvbmFsaXR5IGFuZCBwdXJwb3NlLiBUaGUgc2lnbmF0dXJlIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwcm9ncmFtIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfc2V0X3BlZXJfYXBwZGF0YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmM9MzI3PWludCBhZnNfbWVyZ2VfZnNfYWRkcjYoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFsaXN0LFxuLS1cbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNjgtICovXG5mcy9hZnMvYWRkcl9saXN0LmM6MzY5OnZvaWQgYWZzX3NldF9wZWVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNzAtXHRcdFx0ICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0LFxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jPTIzOD1pbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy0yNjYtXHRpZiAob2xkX2FsaXN0ICE9IG5ld19hbGlzdClcbmZzL2Fmcy9mc19wcm9iZS5jOjI2NzpcdFx0YWZzX3NldF9wZWVyX2FwcGRhdGEoc2VydmVyLCBvbGRfYWxpc3QsIG5ld19hbGlzdCk7XG5mcy9hZnMvZnNfcHJvYmUuYy0yNjgtXG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTAyMT1leHRlcm4gaW50IGFmc19tZXJnZV9mc19hZGRyNihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqYWRkcixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwMjItXHRcdFx0ICAgICAgX19iZTMyICp4ZHIsIHUxNiBwb3J0KTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwMjM6dm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuZnMvYWZzL2ludGVybmFsLmgtMTAyNC1cdFx0XHQgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QsXG4tLVxuZnMvYWZzL3NlcnZlci5jPTQ2NT1zdGF0aWMgdm9pZCBhZnNfc2VydmVyX2Rlc3Ryb3llcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvYWZzL3NlcnZlci5jLTQ4Ny1cdGlmIChlc3RhdGUpXG5mcy9hZnMvc2VydmVyLmM6NDg4Olx0XHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIGVzdGF0ZS1cdTAwM2VhZGRyZXNzZXMsIE5VTEwpO1xuZnMvYWZzL3NlcnZlci5jLTQ4OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGl0cyBDb250ZXh0KioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0cmFjZSBpdHMgZGVjbGFyYXRpb24gYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb24mIzM5O3Mgc2NvcGUsIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBvdmVyYWxsIGludGVyYWN0aW9uIGlzIGtleS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbGwgdGhlIHBvaW50cyB3aGVyZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgaW52b2tlZCBpbiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBob3cgY2hhbmdlcyBtaWdodCBhZmZlY3QgdGhlIGJyb2FkZXIgc3lzdGVtLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIGFueSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgdGhlIGZ1bmN0aW9uIGFjY2Vzc2VzLCBpbmNsdWRpbmcgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBjb25jdXJyZW5jeSwgYW5kIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUgYmVmb3JlIEkgbWFrZSBhbnkgY2hhbmdlcywgb3IgZXZlbiBqdXN0IGFzc2VzcyB0aGUgaW1wYWN0IG9mIGV4aXN0aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNjg9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4MC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgxOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzgyLVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE2PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI2LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjc6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MjgtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTEzLVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTQ6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTUtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjQtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI1Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyNi1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQUZTIFNlcnZlciBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucywgYGFmc19sb29rdXBfc2VydmVyYCBhbmQgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQUZTIGZpbGVzZXJ2ZXIuIGBhZnNfbG9va3VwX3NlcnZlcmAgY2xlYXJseSBwbGF5cyBhIHJvbGUgaW4gdGhlIGluaXRpYWwgc2VydmVyIGxvb2t1cCBhbmQgY29ubmVjdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWNoaW5nIG9yIGhhbmRsaW5nIGFueSBzb3J0IG9mIHNlcnZlciBkaXNjb3Zlcnk/IFRoZW4sIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgc2VlbXMgbGlrZSBhIHByb2JpbmcgZnVuY3Rpb24g4oCTIHBlcmhhcHMgdXNlZCB0byBjaGVjayBzZXJ2ZXIgaGVhbHRoLCBhdmFpbGFiaWxpdHksIG9yIGZpbGUgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgb3IgYWN0aW9ucyBmbG93IGluIGVhY2ggZnVuY3Rpb24gYW5kIGhvdyB0aGV5IG1pZ2h0IG92ZXJsYXAgb3Igd29yayB0b2dldGhlciB0byBhY2hpZXZlIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIHJvYnVzdG5lc3MuIEkga25vdyB0aGF0IGxvb2tpbmcgaW50byB0aGVzZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIGEgZ3JlYXRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgY2xpZW50IGZpbmRzIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgc2VydmVyLiBJIHdhbnQgdG8ga25vdyBleGFjdGx5IHdoYXQgc3RlcHMgYXJlIHRha2VuIHRvIG1ha2Ugc3VyZSB0aGUgc2VydmVyIGlzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZnNfbG9va3VwX3NlcnZlcnxhZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZnNfcHJvYmUuYz0xMzg9dm9pZCBhZnNfZmlsZXNlcnZlcl9wcm9iZV9yZXN1bHQoc3RydWN0IGFmc19jYWxsICpjYWxsKVxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jLTIzNy0gKi9cbmZzL2Fmcy9mc19wcm9iZS5jOjIzODppbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9mc19wcm9iZS5jLTIzOS1cdFx0XHQgICAgc3RydWN0IGFmc19hZGRyX2xpc3QgKm5ld19hbGlzdCwgc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2Fmcy9mc19wcm9iZS5jPTM4OD1zdGF0aWMgdm9pZCBhZnNfZGlzcGF0Y2hfZnNfcHJvYmUoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcilcbi0tXG5mcy9hZnMvZnNfcHJvYmUuYy00MDAtXG5mcy9hZnMvZnNfcHJvYmUuYzo0MDE6XHRhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihuZXQsIHNlcnZlciwgTlVMTCwga2V5KTtcbmZzL2Fmcy9mc19wcm9iZS5jLTQwMi1cdGFmc19wdXRfc2VydmVyKG5ldCwgc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3B1dF9wcm9iZSk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTI0OT1leHRlcm4gdm9pZCBhZnNfZmlsZXNlcnZlcl9wcm9iZV9yZXN1bHQoc3RydWN0IGFmc19jYWxsICopO1xuZnMvYWZzL2ludGVybmFsLmg6MTI1MDppbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNTEtXHRcdFx0ICAgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpuZXdfYWxpc3QsIHN0cnVjdCBrZXkgKmtleSk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTU0OT1zdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2ZpbmRfc2VydmVyKGNvbnN0IHN0cnVjdCByeHJwY19wZWVyICpwZWVyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NTA6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTE1NTEtZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfZ2V0X3NlcnZlcihzdHJ1Y3QgYWZzX3NlcnZlciAqLCBlbnVtIGFmc19zZXJ2ZXJfdHJhY2UpO1xuLS1cbmZzL2Fmcy9zZXJ2ZXIuYz0xNTI9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfbG9va3VwX2FkZHJzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXG4tLVxuZnMvYWZzL3NlcnZlci5jLTE3Ny0gKi9cbmZzL2Fmcy9zZXJ2ZXIuYzoxNzg6c3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5LFxuZnMvYWZzL3NlcnZlci5jLTE3OS1cdFx0XHRcdCAgICAgY29uc3QgdXVpZF90ICp1dWlkLCB1MzIgYWRkcl92ZXJzaW9uKVxuLS1cbmZzL2Fmcy9zZXJ2ZXIuYy0yMzQtXG5mcy9hZnMvc2VydmVyLmM6MjM1Olx0XHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcbmZzL2Fmcy9zZXJ2ZXIuYy0yMzYtXHRcdGlmIChyZXQpXG4tLVxuZnMvYWZzL3NlcnZlci5jPTU0MT1zdGF0aWMgbm9pbmxpbmUgYm9vbCBhZnNfdXBkYXRlX3NlcnZlcl9yZWNvcmQoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wLFxuLS1cbmZzL2Fmcy9zZXJ2ZXIuYy01NzQtXHRpZiAoc2VydmVyLVx1MDAzZWFkZHJfdmVyc2lvbiAhPSBhbGlzdC1cdTAwM2V2ZXJzaW9uKVxuZnMvYWZzL3NlcnZlci5jOjU3NTpcdFx0YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIob3AtXHUwMDNlbmV0LCBzZXJ2ZXIsIGFsaXN0LCBrZXkpO1xuZnMvYWZzL3NlcnZlci5jLTU3Ni1cbi0tXG5mcy9hZnMvc2VydmVyX2xpc3QuYz0yNz1zdHJ1Y3QgYWZzX3NlcnZlcl9saXN0ICphZnNfYWxsb2Nfc2VydmVyX2xpc3Qoc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSxcbi0tXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04MS1cbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jOjgyOlx0XHRzZXJ2ZXIgPSBhZnNfbG9va3VwX3NlcnZlcih2b2x1bWUtXHUwMDNlY2VsbCwga2V5LCBcdTAwMjZ2bGRiLVx1MDAzZWZzX3NlcnZlcltpXSxcbmZzL2Fmcy9zZXJ2ZXJfbGlzdC5jLTgzLVx0XHRcdFx0XHQgICB2bGRiLVx1MDAzZWFkZHJfdmVyc2lvbltpXSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzA3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRGlyZWN0b3J5IEJsb2NrIERpc2NvdmVyeSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBkaXJlY3RvcnkgYmxvY2sgbG9va3VwIGxvZ2ljLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGFmc19kaXJfZmluZF9ibG9ja2AgYW5kIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB0aGUgbGlrZWx5IGNvcmUgY29tcG9uZW50cyBpbnZvbHZlZCBpbiByZXNvbHZpbmcgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIGRpcmVjdG9yeSBibG9ja3Mgd2l0aGluIHRoZSBBRlMgZmlsZSBzeXN0ZW0uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIG92ZXJhbGwgaGlnaC1sZXZlbCBzZWFyY2ggc3RyYXRlZ3ksIHBvdGVudGlhbGx5IGhhbmRsaW5nIHRoaW5ncyBsaWtlIGNhY2hlIGxvb2t1cHMgb3IgaXRlcmF0aW5nIHRocm91Z2ggdmFyaW91cyBpbmRleCBzdHJ1Y3R1cmVzLiBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCwgc291bmRzIGxpa2UgYSBtb3JlIGdyYW51bGFyIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGluIHRoZSBBRlMgY29kZWJhc2UsIEkmIzM5O20gYmV0dGluZyB0aGF0IGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIHVzZWQgdG8gc2VhcmNoIHNwZWNpZmljIGhhc2ggYnVja2V0cy4gVGhpcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgYWNjZXNzIG9yIHNpbXBseSBhIHdheSB0byBvcmdhbml6ZSBvdXIgZGF0YS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHRoZXkgY2FsbGVkIHNlcXVlbnRpYWxseSwgb3IgaXMgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCByZXBlYXRlZGx5IGludm9rZXMgdW50aWwgdGhlIHRhcmdldCBibG9jayBpcyBsb2NhdGVkPyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCBieSBsb29raW5nIGF0IHRoZWlyIHByb3RvdHlwZXMgYW5kIGNhbGwgZ3JhcGhzIHRvIHNlZSB3aGF0IGRhdGEgdGhleSB3b3JrIHdpdGggYW5kIGhvdyB0aGV5IGludGVyYWN0IHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlaXIgcmVzcG9uc2liaWxpdHkuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBnaXZlbiB0aGUgY29udGV4dCBvZiBBRlMgZGlyZWN0b3J5IGJsb2NrIGRpc2NvdmVyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrfGFmc19kaXJfc2VhcmNoX2J1Y2tldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2FmcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6NDIzOlx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQzNS1cbmZzL2Fmcy9kaXJfZWRpdC5jOjQzNjpcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuZnMvYWZzL2Rpcl9lZGl0LmMtNDM3LVx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX2VkaXQuYy00ODAtXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XHRcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYik7XG5mcy9hZnMvZGlyX2VkaXQuYy00ODItXHRcdGlmICghcGJsb2NrKVxuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9NTc9Ym9vbCBhZnNfZGlyX2luaXRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTY2LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzo2Nzp1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTE5LSAqL1xuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjA6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTIxLVx0XHRcdCAgc3RydWN0IGFmc19maWQgKl9maWQpXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyNzpcdG1ldGEgPSBhZnNfZGlyX2ZpbmRfYmxvY2soaXRlciwgMCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cdGlmICghbWV0YSlcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MTQ5Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE1MC1cdFx0aWYgKCFibG9jaylcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlx0XHRyZXQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cdFx0dXBfcmVhZChcdTAwMjZkdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTEyOT1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTtcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMzA6dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spO1xuZnMvYWZzL2ludGVybmFsLmg6MTEzMTppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMi1cdFx0XHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTYKCQkJCQkJCW91dHB1dDogMTk3CgkJCQkJCQl0aG91Z2h0czogODMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFGUyBGaWxlc3lzdGVtIFBhdGNoIEFuYWx5c2lzOiBXb3J0aHkgb2YgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBBRlMgZmlsZXN5c3RlbSBkcml2ZXIsIGBmcy9hZnNgLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgc2V2ZXJhbCBrZXkgZnVuY3Rpb25hbCBidWdzLiBGaXJzdCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIHRoZSBhZGRyZXNzIGxpc3QgY29tcGFyaXNvbi4gVGhlbiwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGhhcyBiZWVuIHJlZmFjdG9yZWQgdG8gYWRkcmVzcyB1bm1hcHBpbmcgaXNzdWVzLCBjZW50cmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gV2UgYWxzbyBoYXZlIGEgZml4IGluIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgd2hlcmUgYG9sZF9hbGlzdGAgd2FzIG5vdCBhc3NpZ25lZCBjb3JyZWN0bHksIGFuZCBmaW5hbGx5LCBhIHJvZ3VlIGBrZnJlZWAgY2FsbCBoYXMgYmVlbiByZW1vdmVkIGZyb20gYGFmc19sb29rdXBfc2VydmVyYC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gR2l2ZW4gdGhhdCBBRlMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIHN5emthbGxlciBpcyBhIHNvbGlkIGNob2ljZSBoZXJlLiBJdCYjMzk7cyB3ZWxsLWVxdWlwcGVkIHRvIG1vdW50IGFuZCBmdXp6IG5ldHdvcmsgZmlsZXN5c3RlbXMsIGNyZWF0ZSBzb2NrZXRzLCBhbmQgZ2VuZXJhbGx5IHN0cmVzcyB0aGUga2VybmVsJiMzOTtzIGZpbGVzeXN0ZW0gY29tcG9uZW50cy4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgYWxyZWFkeSBoYXMgYSBnb29kIHRyYWNrIHJlY29yZCB3aXRoIHRoaXMga2luZCBvZiB3b3JrIGlzIGEgbWFqb3IgcGx1cy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgQUZTX0ZTYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLCBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbmNsdWRlIGBJTkVUYCwgYEFGX1JYUlBDYCwgYEROU19SRVNPTFZFUmAsIGBORVRGU19TVVBQT1JUYCwgYW5kIGBDUllQVE9fS1JCNWAuIFRoaXMgYWxsIHNlZW1zIGNvcnJlY3QgZm9yIGEgbmV0d29yayBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBBRlNfRlNgIGlzIGVuYWJsZWQuCgpOZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMuIEFmdGVyIGFuYWx5c2lzLCB0aGVzZSBhcmUgYWxsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYW5kIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoaXMgY29uZmlybXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb2N1cyBvbi4KClNvLCBzdW1taW5nIHVwOiBUaGUgcGF0Y2ggZml4ZXMgY3JpdGljYWwgYnVncyBhY3Jvc3MgYSBjb3JlIG5ldHdvcmsgZmlsZXN5c3RlbSwgaXQmIzM5O3MgZWFzaWx5IHJlYWNoYWJsZSBieSBzeXprYWxsZXIgd2hpY2ggdXNlcyBuZXR3b3JrIGZpbGUgc3lzdGVtcyBhbmQgbG9jYWwgZmlsZSBzeXN0ZW1zLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVudHJ5cG9pbnRzIGFyZSBhbGwgcHJvcGVybHkgaWRlbnRpZmllZC4gSSBzaG91bGQgc2V0IHRoZSByZXN1bHRzIHRvOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O0ZpeGVzIHNldmVyYWwgZnVuY3Rpb25hbCBidWdzIChpbmZpbml0ZSBsb29wLCB1bm1hcCBpc3N1ZXMsIGFkZHJlc3MgbGlzdCBhc3NpZ25tZW50LCBrZnJlZSkgaW4gQUZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBtYWtpbmcgaXQgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4mIzM0OwoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrJiMzNDssICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OywgJiMzNDthZnNfZnNfcHJvYmVfZmlsZXNlcnZlciYjMzQ7LCAmIzM0O2Fmc19sb29rdXBfc2VydmVyJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgWyYjMzQ7QUZTX0ZTJiMzNDtdYAoKVGhlbiBJIHdpbGwgaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9zZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX2xvb2t1cF9zZXJ2ZXImIzM0OywKICAgICYjMzQ7YWZzX3NldF9wZWVyX2FwcGRhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwODowNDo0NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9hZGRyX2xpc3QuYyBiL2ZzL2Fmcy9hZGRyX2xpc3QuYwppbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NAotLS0gYS9mcy9hZnMvYWRkcl9saXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2FkZHJfbGlzdC5jCkBAIC0zOTQsOCAmIzQzOzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCXN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC0mZ3Q7YWRkcnNbbl0ucGVlcjsKIAkJc3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LSZndDthZGRyc1tvXS5wZWVyOwogCi0JCWlmIChwbiA9PSBwbykKJiM0MzsJCWlmIChwbiA9PSBwbykgewomIzQzOwkJCW4mIzQzOyYjNDM7OwomIzQzOwkJCW8mIzQzOyYjNDM7OwogCQkJY29udGludWU7CiYjNDM7CQl9CiAJCWlmIChwbiAmbHQ7IHBvKSB7CiAJCQlyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7CiAJCQluJiM0MzsmIzQzOzsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfZWRpdC5jIGIvZnMvYWZzL2Rpcl9lZGl0LmMKaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9lZGl0LmMKQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCS8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovCiAJZGUgPSAmYW1wO2Jsb2NrLSZndDtkaXJlbnRzW3Nsb3RdOwogCWlmIChkZS0mZ3Q7dS52YWxpZCAhPSAxKQotCQlnb3RvIGVycm9yX3VubWFwOwomIzQzOwkJZ290byBlcnJvcjsKIAogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LAogCQkJICAgbnRvaGwoZGUtJmd0O3Uudm5vZGUpLCBudG9obChkZS0mZ3Q7dS51bmlxdWUpLApAQCAtNDU4LDcgJiM0Mzs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovCiAJbmV4dCA9IGRlLSZndDt1Lmhhc2hfbmV4dDsKIAltZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAogCS8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci0mZ3Q7cHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWQKIAkgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS4KQEAgLTQ4NSw3ICYjNDM7NDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCQlwZGUgPSAmYW1wO3BibG9jay0mZ3Q7ZGlyZW50c1twc107CiAJCXByZXZfbmV4dCA9IHBkZS0mZ3Q7dS5oYXNoX25leHQ7CiAJCWlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7Ci0JCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAkJCXByX3dhcm4oJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqcyYjMzQ7LAogCQkJCXZub2RlLSZndDtmaWQudmlkLCB2bm9kZS0mZ3Q7ZmlkLnZub2RlLCB2bm9kZS0mZ3Q7ZmlkLnVuaXF1ZSwKIAkJCQlpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LApAQCAtNDkzLDcgJiM0Mzs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCQlnb3RvIGVycm9yOwogCQl9CiAJCXBkZS0mZ3Q7dS5oYXNoX25leHQgPSBuZXh0OwotCQlrdW5tYXBfbG9jYWwocGJsb2NrKTsKIAl9CiAKIAluZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eSgmYW1wO3Zub2RlLSZndDtuZXRmcy5pbm9kZSk7CkBAIC01MDMsMTggJiM0Mzs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLAogCV9kZWJ1ZygmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XSYjMzQ7LCBuYW1lLSZndDtuYW1lLCBiLCBzbG90KTsKIAogb3V0X3VubWFwOgomIzQzOwlhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcik7CiAJa3VubWFwX2xvY2FsKG1ldGEpOwogCV9sZWF2ZSgmIzM0OyYjMzQ7KTsKIAlyZXR1cm47CiAKIGFscmVhZHlfaW52YWxpZGF0ZWQ6Ci0Ja3VubWFwX2xvY2FsKGJsb2NrKTsKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwogCWdvdG8gb3V0X3VubWFwOwogCi1lcnJvcl91bm1hcDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogZXJyb3I6CiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsCiAJCQkgICAwLCAwLCAwLCAwLCBuYW1lLSZndDtuYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guYwpAQCAtNzUsMTAgJiM0Mzs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsCiAKIAlfZW50ZXIoJiMzNDslengsJWQmIzM0OywgYmxvY2ssIHNsb3QpOwogCi0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAKIAlpZiAoZHZub2RlLSZndDtkaXJlY3Rvcnlfc2l6ZSAmbHQ7IGJsZW5kKQogCQlnb3RvIGZhaWw7CkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogCiAJcmV0ID0gLUVOT0VOVDsKIGZvdW5kOgotCWlmIChpdGVyLSZndDtibG9jaykgewotCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwotCQlpdGVyLSZndDtibG9jayA9IE5VTEw7Ci0JfQotCiBiYWQ6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoaXRlcik7CiAJaWYgKHJldCA9PSAtRVNUQUxFKQogCQlhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci0mZ3Q7ZHZub2RlLCBhZnNfZGlyX2ludmFsaWRfaXRlcl9zdGFsZSk7CiAJX2xlYXZlKCYjMzQ7ID0gJWQmIzM0OywgcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc19wcm9iZS5jIGIvZnMvYWZzL2ZzX3Byb2JlLmMKaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ZzX3Byb2JlLmMKQEAgLTI1OCw2ICYjNDM7MjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsCiAJCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO3NlcnZlci0mZ3Q7ZnNfbG9jaykpOwogCWlmIChvbGQpIHsKIAkJZXN0YXRlLSZndDtyZXNwb25zaXZlX3NldCA9IG9sZC0mZ3Q7cmVzcG9uc2l2ZV9zZXQ7CiYjNDM7CQlvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAkJaWYgKCFuZXdfYWxpc3QpCiAJCQluZXdfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3NlczsKIAl9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pOwogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CWlmIChpdGVyLSZndDtibG9jaykgewomIzQzOwkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKJiM0MzsJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBkaXJfc2lsbHkuYwogICovCmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmMKaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDQKLS0tIGEvZnMvYWZzL3NlcnZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Fmcy9zZXJ2ZXIuYwpAQCAtMjQyLDcgJiM0MzsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksCiBvdXQ6CiAJYWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTsKIAlpZiAoY2FuZGlkYXRlKSB7Ci0JCWtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItJmd0O2VuZHBvaW50X3N0YXRlKSk7CiAJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCWFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLSZndDtuZXQpOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBuZWVkIHRvIGZpcmUgdXAgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgd2lsbCBkbyB0aGUgdHJpY2suIFdlIGhhdmUgYSBjaGFuZ2UgaW4gYGZzL2Fmcy9hZGRyX2xpc3QuY2AgdG8gY29uc2lkZXIsIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgYWRqdXN0bWVudCB0byB0aGUgbG9naWMgd2l0aGluIHRoZSBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIEkmIzM5O2xsIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2Ygc2tpcHBpbmcgdGhlIGl0ZXJhdGlvbiBpbiB0aGUgYGZvcmAgbG9vcCBpZiBgcG5gIGFuZCBgcG9gIGFyZSB0aGUgc2FtZTsgdGhpcyBpcyB0aGUga2V5IHBpZWNlIHRvIHVuZGVyc3RhbmRpbmcgd2hldGhlciB0aGlzIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgYSBtZW1vcnkgc2FmZXR5IGlzc3VlIHRoYXQgS01TQU4gbWlnaHQgcGljayB1cC4gSXQgc2VlbXMgbGlrZSBpdCBwcmV2ZW50cyBzb21lIG9mIHRoZSBpdGVyYXRpb24gaW4gdGhlIGxvb3AgaWYgYHBuYCBhbmQgYHBvYCBhcmUgdGhlIHNhbWUuIE5vdyBJIGhhdmUgdG8gZGV0ZXJtaW5lIHdoYXQgYHBuYCBhbmQgYHBvYCBhcmUgYW5kIGlmIHRoZXkgYXJlIGV2ZXIgTlVMTCwgb3IgaG93IHRoZXkgYXJlIHNldC4gQSBzdGFuZGFyZCBLQVNBTiBjaGVjayBpcyBsaWtlbHkgdG8gZGV0ZWN0IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgcHJlc2VudCwgYnV0IHNpbmNlIHRoZXNlIGxvb2sgbGlrZSBwZWVycywgSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBtYXkgYmUgYW4gb3Bwb3J0dW5pdHkgZm9yIGEgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMgaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvYWRkcl9saXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM4MDpcdFx0XHRyZXR1cm47XG4gMzgxOlx0XHR9XG4gMzgyOlx0XHRpZiAoIW5ld19hbGlzdCkge1xuIDM4MzpcdFx0XHQvKiBEZWFkIHNlcnZlci4gIEp1c3QgcmVtb3ZlIGFsbC4gKi9cbiAzODQ6XHRcdFx0Zm9yICg7IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRyczsgbyYjNDM7JiM0MzspXG4gMzg1Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xuIDM4NjpcdFx0XHRyZXR1cm47XG4gMzg3Olx0XHR9XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXG4gMzkwOlx0XHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXG4gMzkxOlx0XHQgKiByZWNvcmQuXG4gMzkyOlx0XHQgKi9cbiAzOTM6XHRcdHdoaWxlIChuIFx1MDAzYyBuZXdfYWxpc3QtXHUwMDNlbnJfYWRkcnMgXHUwMDI2XHUwMDI2IG8gXHUwMDNjIG9sZF9hbGlzdC1cdTAwM2Vucl9hZGRycykge1xuIDM5NDpcdFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiAzOTU6XHRcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gMzk2Olx0XG4gMzk3Olx0XHRcdGlmIChwbiA9PSBwbykge1xuIDM5ODpcdFx0XHRcdG4mIzQzOyYjNDM7O1xuIDM5OTpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwMDpcdFx0XHRcdGNvbnRpbnVlO1xuIDQwMTpcdFx0XHR9XG4gNDAyOlx0XHRcdGlmIChwbiBcdTAwM2MgcG8pIHtcbiA0MDM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbiwgZGF0YSk7XG4gNDA0Olx0XHRcdFx0biYjNDM7JiM0Mzs7XG4gNDA1Olx0XHRcdH0gZWxzZSB7XG4gNDA2Olx0XHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG8sIDApO1xuIDQwNzpcdFx0XHRcdG8mIzQzOyYjNDM7O1xuIDQwODpcdFx0XHR9XG4gNDA5Olx0XHR9XG4gNDEwOlx0XG4gNDExOlx0XHRpZiAobiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxMjpcdFx0XHRmb3IgKDsgbiBcdTAwM2MgbmV3X2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBuJiM0MzsmIzQzOylcbiA0MTM6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlciwgZGF0YSk7XG4gNDE0Olx0XHRpZiAobyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzKVxuIDQxNTpcdFx0XHRmb3IgKDsgbyBcdTAwM2Mgb2xkX2FsaXN0LVx1MDAzZW5yX2FkZHJzOyBvJiM0MzsmIzQzOylcbiA0MTY6XHRcdFx0XHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XG4gNDE3Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjAzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlYnVnZ2luZyBBRlM6IENhdGNoaW5nIGFuIEluZmluaXRlIExvb3AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIG92ZXIgdGhpcyBBRlMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyBhIGNsYXNzaWM6IGEgbmFzdHkgaW5maW5pdGUgbG9vcCBpbiBgZnMvYWZzL2FkZHJfbGlzdC5jYC4gVGhlIHJvb3QgY2F1c2U/IGBwbmAgYW5kIGBwb2AgZW5kIHVwIGJlaW5nIHRoZSBzYW1lIHZhbHVlLCBidXQgbmVpdGhlciBgbmAgbm9yIGBvYCBhcmUgaW5jcmVtZW50ZWQsIHdoaWNoIG1lYW5zIHRoZSBsb29wIHdpbGwgbmV2ZXIgdGVybWluYXRlLiAgVGhhdCYjMzk7cyBhIGd1YXJhbnRlZWQgaGFuZywgYSB0b3RhbCBzb2Z0bG9ja3VwIOKAkyBjcml0aWNhbCEgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBwcm9wZXJseSBhZGRyZXNzZWQgaW4gdGhlIGZpeC4KCk5vdywgbGV0JiMzOTtzIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNoYW5nZXMuICBXZSBoYXZlIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGRpdmluZyBpbnRvIGBmcy9hZnMvZGlyX2VkaXQuY2AgZmlyc3QgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0XHRcdC8qIERpZG4mIzM5O3QgZmluZCB0aGUgZGlyZW50IHRvIGNsb2JiZXIuICBSZS1kb3dubG9hZC4gKi9cbiA0MjY6XHRcdFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfbm9lbnQsXG4gNDI3Olx0XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQyODpcdFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIodm5vZGUsIGFmc19kaXJfaW52YWxpZF9lZGl0X3JlbV93cm9uZ19uYW1lKTtcbiA0Mjk6XHRcdFx0Z290byBvdXRfdW5tYXA7XG4gNDMwOlx0XHR9XG4gNDMxOlx0XG4gNDMyOlx0XHRlbnRyeSA9IGZvdW5kO1xuIDQzMzpcdFx0YiAgICA9IGVudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDM0Olx0XHRzbG90ID0gZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcbiA0MzU6XHRcbiA0MzY6XHRcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIGIpO1xuIDQzNzpcdFx0aWYgKCFibG9jaylcbiA0Mzg6XHRcdFx0Z290byBlcnJvcjtcbiA0Mzk6XHRcdGlmICghdGVzdF9iaXQoQUZTX1ZOT0RFX0RJUl9WQUxJRCwgXHUwMDI2dm5vZGUtXHUwMDNlZmxhZ3MpKVxuIDQ0MDpcdFx0XHRnb3RvIGFscmVhZHlfaW52YWxpZGF0ZWQ7XG4gNDQxOlx0XG4gNDQyOlx0XHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIDQ0MzpcdFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIDQ0NDpcdFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbiA0NDU6XHRcdFx0Z290byBlcnJvcjtcbiA0NDY6XHRcbiA0NDc6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxuIDQ0ODpcdFx0XHRcdCAgIG50b2hsKGRlLVx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cdTAwM2V1LnVuaXF1ZSksXG4gNDQ5Olx0XHRcdFx0ICAgbmFtZS1cdTAwM2VuYW1lKTtcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIEFkanVzdCB0aGUgYml0bWFwLiAqL1xuIDQ1MjpcdFx0YWZzX2NsZWFyX2NvbnRpZ19iaXRzKGJsb2NrLCBzbG90LCBpdGVyLm5yX3Nsb3RzKTtcbiA0NTM6XHRcbiA0NTQ6XHRcdC8qIEFkanVzdCB0aGUgYWxsb2NhdGlvbiBjb3VudGVyLiAqL1xuIDQ1NTpcdFx0aWYgKGIgXHUwMDNjIEFGU19ESVJfQkxPQ0tTX1dJVEhfQ1RSKVxuIDQ1NjpcdFx0XHRtZXRhLVx1MDAzZW1ldGEuYWxsb2NfY3Ryc1tiXSAmIzQzOz0gaXRlci5ucl9zbG90cztcbiA0NTc6XHRcbiA0NTg6XHRcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIDQ1OTpcdFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIDQ2MDpcdFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuIDQ2MTpcdFxuIDQ2MjpcdFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gNDYzOlx0XHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0JiMzOTtzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbiA0NjQ6XHRcdCAqL1xuIDQ2NTpcdFx0aWYgKCFpdGVyLnByZXZfZW50cnkpIHtcbiA0NjY6XHRcdFx0X19iZTE2IHByZXZfbmV4dCA9IG1ldGEtXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdO1xuIDQ2NzpcdFxuIDQ2ODpcdFx0XHRpZiAodW5saWtlbHkocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkpIHtcbiA0Njk6XHRcdFx0XHRwcl93YXJuKFwmIzM0OyVsbHg6JWxseDoleDogbm90IGhlYWQgb2YgY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCYjMzQ7LFxuIDQ3MDpcdFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIDQ3MTpcdFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbiA0NzI6XHRcdFx0XHRcdG5hbWUtXHUwMDNlbGVuLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQ3MzpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gNDc0Olx0XHRcdH1cbiA0NzU6XHRcdFx0bWV0YS1cdTAwM2VtZXRhLmhhc2h0YWJsZVtpdGVyLmJ1Y2tldF0gPSBuZXh0O1xuIDQ3NjpcdFx0fSBlbHNlIHtcbiA0Nzc6XHRcdFx0dW5zaWduZWQgaW50IHBiID0gaXRlci5wcmV2X2VudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDc4Olx0XHRcdHVuc2lnbmVkIGludCBwcyA9IGl0ZXIucHJldl9lbnRyeSAlIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQ3OTpcdFx0XHRfX2JlMTYgcHJldl9uZXh0O1xuIDQ4MDpcdFxuIDQ4MTpcdFx0XHRwYmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXHUwMDI2aXRlciwgcGIpO1xuIDQ4MjpcdFx0XHRpZiAoIXBibG9jaylcbiA0ODM6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ4NDpcdFx0XHRwZGUgPSBcdTAwMjZwYmxvY2stXHUwMDNlZGlyZW50c1twc107XG4gNDg1Olx0XHRcdHByZXZfbmV4dCA9IHBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiA0ODY6XHRcdFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcbiA0ODc6XHRcdFx0XHRwcl93YXJuKFwmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXCYjMzQ7LFxuIDQ4ODpcdFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIDQ4OTpcdFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbiA0OTA6XHRcdFx0XHRcdG5hbWUtXHUwMDNlbGVuLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDQ5MTpcdFx0XHRcdGdvdG8gZXJyb3I7XG4gNDkyOlx0XHRcdH1cbiA0OTM6XHRcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbiA0OTQ6XHRcdH1cbiA0OTU6XHRcbiA0OTY6XHRcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlKTtcbiA0OTc6XHRcbiA0OTg6XHRcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUsIHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24pO1xuIDQ5OTpcdFx0YWZzX3N0YXRfdih2bm9kZSwgbl9kaXJfcm0pO1xuIDUwMDpcdFx0X2RlYnVnKFwmIzM0O1JlbW92ZSAlcyBmcm9tICV1WyV1XVwmIzM0OywgbmFtZS1cdTAwM2VuYW1lLCBiLCBzbG90KTtcbiA1MDE6XHRcbiA1MDI6XHRvdXRfdW5tYXA6XG4gNTAzOlx0XHRhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpO1xuIDUwNDpcdFx0a3VubWFwX2xvY2FsKG1ldGEpO1xuIDUwNTpcdFx0X2xlYXZlKFwmIzM0O1wmIzM0Oyk7XG4gNTA2Olx0XHRyZXR1cm47XG4gNTA3Olx0XG4gNTA4Olx0YWxyZWFkeV9pbnZhbGlkYXRlZDpcbiA1MDk6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIDUxMDpcdFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gNTExOlx0XHRnb3RvIG91dF91bm1hcDtcbiA1MTI6XHRcbiA1MTM6XHRlcnJvcjpcbiA1MTQ6XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2Vycm9yLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBBRlMgQ29kZTogQmxvY2sgSXRlcmF0aW9uIGFuZCBTZXJ2ZXIgUHJvYmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZnMvYWZzL2Rpcl9lZGl0LmNgLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB3ZSB3ZXJlIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgYGJsb2NrYCBhbmQgYHBibG9ja2AgdXNpbmcgdGhlIGBpdGVyYCBzdHJ1Y3QuIFdlIHVzZWQgdG8gY2FsbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgZGlyZWN0bHksIGJ1dCBpdCB3YXMgcG9zc2libGUgdGhhdCBgaXRlci5ibG9ja2AgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgaW4gYSBiYWQgc3RhdGXigJRlaXRoZXIgc3RpbGwgc2V0IGFmdGVyIHVzZSBvciB1bm1hcHBlZCBhdCB0aGUgd3JvbmcgdGltZSwgb3IgcGVyaGFwcyBldmVuIHVubWFwcGVkIHR3aWNlISBUaGUgaW50cm9kdWN0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcilgIGlzIHNtYXJ0LiBJdCBjZW50cmFsaXplcyB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGwgYW5kIGFsc28gY2xlYXJzIGBpdGVyLSZndDtibG9jayA9IE5VTExgLiBUaGlzIGlzIGEgbXVjaCBjbGVhbmVyIGFwcHJvYWNoLCBlbnN1cmluZyB0aGUgdW5tYXBwaW5nIGFuZCBjbGVhcmluZyBvY2N1ciBjb25zaXN0ZW50bHkgYXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBvciBvbiBlcnJvciB2aWEgdGhlIGBvdXRfdW5tYXBgIGxhYmVsLiBUaGlzIHNob3VsZCBwcmV2ZW50IHRob3NlIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgSSBsaWtlIHRoaXMhCgpOb3csIGxldCBtZSBzaGlmdCBnZWFycyBhbmQgbW92ZSBvdmVyIHRvIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjU4LiBJdCBsb29rcyBsaWtlIGl0IGRlYWxzIHdpdGggYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYG9sZF9hbGlzdGAgdmFyaWFibGUuIEl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbGx5IHJlZHVuZGFudCBhc3NpZ25tZW50LiBMZXQgbWUgZGlnIGludG8gaXQgYW5kIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLiBTZWVtcyB3ZSBhcmUgY29weWluZyBzb21lIHN0YXRlIHRvIGBlc3RhdGVgLiBUaGUgbmV3IGxpbmUgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGBuZXdfYWxpc3RgIGlmIHRoZSBgb2xkYCBzZXJ2ZXIgaXMgbm90IGNoYW5naW5nLiBUaGlzIG9wdGltaXphdGlvbiBtYXkgYmUgbW9yZSBwZXJmb3JtYW50IHRoYW4gYSBjb21wbGV0ZSByZXBsYWNlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFmZmVjdHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSwgYnV0IGl0IGFwcGVhcnMgc291bmQgc28gZmFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9mc19wcm9iZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHR7XG4gMjQxOlx0XHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XG4gMjQyOlx0XHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xuIDI0MzpcdFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcbiAyNDQ6XHRcbiAyNDU6XHRcdF9lbnRlcihcJiMzNDslcFVcJiMzNDssIFx1MDAyNnNlcnZlci1cdTAwM2V1dWlkKTtcbiAyNDY6XHRcbiAyNDc6XHRcdGVzdGF0ZSA9IGt6YWxsb2Nfb2JqKCplc3RhdGUpO1xuIDI0ODpcdFx0aWYgKCFlc3RhdGUpXG4gMjQ5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI1MDpcdFxuIDI1MTpcdFx0cmVmY291bnRfc2V0KFx1MDAyNmVzdGF0ZS1cdTAwM2VyZWYsIDIpO1xuIDI1MjpcdFx0ZXN0YXRlLVx1MDAzZXNlcnZlcl9pZCA9IHNlcnZlci1cdTAwM2VkZWJ1Z19pZDtcbiAyNTM6XHRcdGVzdGF0ZS1cdTAwM2VydHQgPSBVSU5UX01BWDtcbiAyNTQ6XHRcbiAyNTU6XHRcdHdyaXRlX2xvY2soXHUwMDI2c2VydmVyLVx1MDAzZWZzX2xvY2spO1xuIDI1NjpcdFxuIDI1NzpcdFx0b2xkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzZXJ2ZXItXHUwMDNlZW5kcG9pbnRfc3RhdGUsXG4gMjU4Olx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZzZXJ2ZXItXHUwMDNlZnNfbG9jaykpO1xuIDI1OTpcdFx0aWYgKG9sZCkge1xuIDI2MDpcdFx0XHRlc3RhdGUtXHUwMDNlcmVzcG9uc2l2ZV9zZXQgPSBvbGQtXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XG4gMjYxOlx0XHRcdG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXM7XG4gMjYyOlx0XHRcdGlmICghbmV3X2FsaXN0KVxuIDI2MzpcdFx0XHRcdG5ld19hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXM7XG4gMjY0Olx0XHR9XG4gMjY1Olx0XG4gMjY2Olx0XHRpZiAob2xkX2FsaXN0ICE9IG5ld19hbGlzdClcbiAyNjc6XHRcdFx0YWZzX3NldF9wZWVyX2FwcGRhdGEoc2VydmVyLCBvbGRfYWxpc3QsIG5ld19hbGlzdCk7XG4gMjY4Olx0XG4gMjY5Olx0XHRlc3RhdGUtXHUwMDNlYWRkcmVzc2VzID0gYWZzX2dldF9hZGRybGlzdChuZXdfYWxpc3QsIGFmc19hbGlzdF90cmFjZV9nZXRfZXN0YXRlKTtcbiAyNzA6XHRcdGFsaXN0ID0gZXN0YXRlLVx1MDAzZWFkZHJlc3NlcztcbiAyNzE6XHRcdGVzdGF0ZS1cdTAwM2Vwcm9iZV9zZXEgPSAmIzQzOyYjNDM7c2VydmVyLVx1MDAzZXByb2JlX2NvdW50ZXI7XG4gMjcyOlx0XHRhdG9taWNfc2V0KFx1MDAyNmVzdGF0ZS1cdTAwM2Vucl9wcm9iaW5nLCBhbGlzdC1cdTAwM2Vucl9hZGRycyk7XG4gMjczOlx0XG4gMjc0Olx0XHRpZiAobmV3X2FsaXN0KVxuIDI3NTpcdFx0XHRzZXJ2ZXItXHUwMDNlYWRkcl92ZXJzaW9uID0gbmV3X2FsaXN0LVx1MDAzZXZlcnNpb247XG4gMjc2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlLCBlc3RhdGUpO1xuIDI3NzpcdFx0d3JpdGVfdW5sb2NrKFx1MDAyNnNlcnZlci1cdTAwM2Vmc19sb2NrKTtcbiAyNzg6XHRcdGlmIChvbGQpXG4gMjc5Olx0XHRcdHNldF9iaXQoQUZTX0VTVEFURV9TVVBFUlNFREVELCBcdTAwMjZvbGQtXHUwMDNlZmxhZ3MpO1xuIDI4MDpcdFxuIDI4MTpcdFx0dHJhY2VfYWZzX2VzdGF0ZShlc3RhdGUtXHUwMDNlc2VydmVyX2lkLCBlc3RhdGUtXHUwMDNlcHJvYmVfc2VxLCByZWZjb3VudF9yZWFkKFx1MDAyNmVzdGF0ZS1cdTAwM2VyZWYpLFxuIDI4MjpcdFx0XHRcdCBhZnNfZXN0YXRlX3RyYWNlX2FsbG9jX3Byb2JlKTtcbiAyODM6XHRcbiAyODQ6XHRcdGFmc19nZXRfYWRkcmVzc19wcmVmZXJlbmNlcyhuZXQsIG5ld19hbGlzdCk7XG4gMjg1Olx0XG4gMjg2Olx0XHRzZXJ2ZXItXHUwMDNlcHJvYmVkX2F0ID0gamlmZmllcztcbiAyODc6XHRcdHVucHJvYmVkID0gKDFVTCBcdTAwM2NcdTAwM2MgYWxpc3QtXHUwMDNlbnJfYWRkcnMpIC0gMTtcbiAyODg6XHRcdHdoaWxlICh1bnByb2JlZCkge1xuIDI4OTpcdFx0XHR1bnNpZ25lZCBpbnQgaW5kZXggPSAwLCBpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwODowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRlMgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkgaW1tZWRpYXRlbHkgc3BvdCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggaG93IGBvbGRfYWxpc3RgIGlzIGJlaW5nIGhhbmRsZWQuIEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGBOVUxMYCwgd2hpY2ggaXMgZmluZSwgYnV0IHRoZW4gd2l0aGluIHRoZSBgaWYgKG9sZClgIGJsb2NrLCB0aGUgY3J1Y2lhbCBhc3NpZ25tZW50IG9mIGBvbGRfYWxpc3QgPSBvbGQtJmd0O2FkZHJlc3Nlc2Agc2VlbXMgdG8gYmUgbWlzc2luZy4gVGhhdCBtZWFucyBgb2xkX2FsaXN0YCBvbmx5IGdldHMgYSB2YWxpZCBhZGRyZXNzIGxpc3QgaWYgc29tZXRoaW5nIGVsc2Ugc2V0cyBpdCBmaXJzdC4gT3RoZXJ3aXNlLCBpdCBzdGF5cyBgTlVMTGAuIFRoaXMgb3ZlcnNpZ2h0IGhhcyBzb21lIHNlcmlvdXMgaW1wbGljYXRpb25zLgoKTm93LCBiZWNhdXNlIGBvbGRfYWxpc3RgIGNvdWxkIHJlbWFpbiBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBvbGRfYWxpc3QgIT0gbmV3X2FsaXN0YCBpcyB3aGVyZSB0aGluZ3MgYnJlYWsgZG93bi4gVGhlIGNvZGUgdHJlYXRzICphbGwqIG9sZCBwZWVycyBhcyAmIzM0O25vbi1leGlzdGVudCYjMzQ7IGJlY2F1c2UgYG9sZF9hbGlzdGAgaXMsIGluIGVmZmVjdCwgYWx3YXlzIGBOVUxMYCBpbiB0aGF0IHNjZW5hcmlvLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGxvZ2ljIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgdG8gYmVoYXZlIGluY29ycmVjdGx5LCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHdoYXQgd2Ugd2FudC4KCkkmIzM5O2xsIHNoaWZ0IG15IGF0dGVudGlvbiB0byBgZnMvYWZzL3NlcnZlci5jYCBub3cgdG8gc2VlIHdoYXQgZWxzZSBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgc2l0dWF0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gY2hlY2tpbmcgYXJvdW5kIGxpbmUgMjQyLiBBaCwgdGhlcmUgaXQgaXMuIExvb2tpbmcgYXQgdGhpcyBibG9jayBvZiBjb2RlLCBJJiMzOTttIG5vdGljaW5nIGFuIGludGVyZXN0aW5nIGNhbGwgdG8gYGtmcmVlKClgIHdpdGggYSBwb2ludGVyIHJlbGF0ZWQgdG8gYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgY2xlYW51cCBoYXBwZW5pbmcsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBob3cgdGhlIHNlcnZlciBlbmRwb2ludHMgYXJlIG1hbmFnZWQuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBob3cgYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgIGlzIGJlaW5nIGhhbmRsZWQgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0sIHRvIHNlZSBpZiB0aGUgbWlzc2luZyBhc3NpZ25tZW50IGlzIGNvbm5lY3RlZCB0byB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvc2VydmVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0dXBfd3JpdGUoXHUwMDI2Y2VsbC1cdTAwM2Vmc19sb2NrKTtcbiAyMjE6XHRcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNlcnZlci1cdTAwM2V0aW1lcik7XG4gMjIyOlx0XG4gMjIzOlx0XHQvKiBJZiB3ZSBnZXQgdG8gY3JlYXRlIHRoZSBzZXJ2ZXIsIHdlIGxvb2sgdXAgdGhlIGFkZHJlc3NlcyBhbmQgdGhlblxuIDIyNDpcdFx0ICogaW1tZWRpYXRlbHkgZGlzcGF0Y2ggYW4gYXN5bmNocm9ub3VzIHByb2JlIHRvIGVhY2ggaW50ZXJmYWNlIG9uIHRoZVxuIDIyNTpcdFx0ICogZmlsZXNlcnZlci4gIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIHJlcGVhdC1wcm9iaW5nIHNlcnZpY2UgaXNcbiAyMjY6XHRcdCAqIHN0YXJ0ZWQuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmIChjcmVhdGluZykge1xuIDIyOTpcdFx0XHRhbGlzdCA9IGFmc192bF9sb29rdXBfYWRkcnMoc2VydmVyLCBrZXkpO1xuIDIzMDpcdFx0XHRpZiAoSVNfRVJSKGFsaXN0KSkge1xuIDIzMTpcdFx0XHRcdHJldCA9IFBUUl9FUlIoYWxpc3QpO1xuIDIzMjpcdFx0XHRcdGdvdG8gY3JlYXRlX2ZhaWxlZDtcbiAyMzM6XHRcdFx0fVxuIDIzNDpcdFxuIDIzNTpcdFx0XHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcbiAyMzY6XHRcdFx0aWYgKHJldClcbiAyMzc6XHRcdFx0XHRnb3RvIGNyZWF0ZV9mYWlsZWQ7XG4gMjM4Olx0XG4gMjM5Olx0XHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChBRlNfU0VSVkVSX0ZMX0NSRUFUSU5HLCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpO1xuIDI0MDpcdFx0fVxuIDI0MTpcdFxuIDI0MjpcdG91dDpcbiAyNDM6XHRcdGFmc19wdXRfYWRkcmxpc3QoYWxpc3QsIGFmc19hbGlzdF90cmFjZV9wdXRfc2VydmVyX2NyZWF0ZSk7XG4gMjQ0Olx0XHRpZiAoY2FuZGlkYXRlKSB7XG4gMjQ1Olx0XHRcdGtmcmVlKGNhbmRpZGF0ZSk7XG4gMjQ2Olx0XHRcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVx1MDAzZW5ldCk7XG4gMjQ3Olx0XHR9XG4gMjQ4Olx0XHRyZXR1cm4gc2VydmVyID86IEVSUl9QVFIocmV0KTtcbiAyNDk6XHRcbiAyNTA6XHR3YWl0X2Zvcl9jcmVhdGlvbjpcbiAyNTE6XHRcdGFmc19zZWVfc2VydmVyKHNlcnZlciwgYWZzX3NlcnZlcl90cmFjZV93YWl0X2NyZWF0ZSk7XG4gMjUyOlx0XHR3YWl0X29uX2JpdChcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MsIEFGU19TRVJWRVJfRkxfQ1JFQVRJTkcsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiAyNTM6XHRcdGlmICh0ZXN0X2JpdF9hY3F1aXJlKEFGU19TRVJWRVJfRkxfVU5DUkVBVEVELCBcdTAwMjZzZXJ2ZXItXHUwMDNlZmxhZ3MpKSB7XG4gMjU0Olx0XHRcdC8qIEJhcnJpZXI6IHJlYWQgZmxhZyBiZWZvcmUgZXJyb3IgKi9cbiAyNTU6XHRcdFx0cmV0ID0gUkVBRF9PTkNFKHNlcnZlci1cdTAwM2VjcmVhdGVfZXJyb3IpO1xuIDI1NjpcdFx0XHRhZnNfcHV0X3NlcnZlcihjZWxsLVx1MDAzZW5ldCwgc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3VudXNlX2NyZWF0ZV9mYWlsKTtcbiAyNTc6XHRcdFx0c2VydmVyID0gTlVMTDtcbiAyNTg6XHRcdFx0Z290byBvdXQ7XG4gMjU5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA4OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzIKCQkJCQkJCW91dHB1dDogMzA1CgkJCQkJCQl0aG91Z2h0czogNTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRlMgUGF0Y2ggU2VyaWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIGBmcy9hZnMvc2VydmVyLmNgLCBJIGlkZW50aWZpZWQgYW5kIHJlbW92ZWQgYSBuYXN0eSBga2ZyZWVgIGNhbGwgb24gYHNlcnZlci0mZ3Q7ZW5kcG9pbnRfc3RhdGVgIGR1cmluZyB0aGUgY2xlYW51cCBwYXRoIG9mIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoYXQgd2FzIGEgcG90ZW50aWFsIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiwgYmVjYXVzZSB0aGF0IHBhcnRpY3VsYXIgcG9pbnRlciBzaG91bGRuJiMzOTt0IGhhdmUgYmVlbiBmcmVlZCB0aGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uZGl0aW9ucyB3aGVyZSB0aGUgY2FuZGlkYXRlIHNlcnZlciB3YXNuJiMzOTt0IGV2ZW4gYmVpbmcgdXNlZCBvciBjb3VsZCBoYXZlIGJlZW4gYW5vdGhlciBzZXJ2ZXIuIEEgY3JpdGljYWwgb3ZlcnNpZ2h0LCB0aGFua2Z1bGx5IGNhdWdodC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzOgoKMS4gICoqYGZzL2Fmcy9hZGRyX2xpc3QuY2AqKjogRml4ZWQgYW4gaW5maW5pdGUgbG9vcCBpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGEoKWAgYnkgY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgbG9vcCBpbmRpY2VzIChgbmAgYW5kIGBvYCkgd2hlbiB0aGUgcGVlciBwb2ludGVycyAoYHBuYCBhbmQgYHBvYCkgbWF0Y2guIFNpbXBsZSBidXQgY3J1Y2lhbCBmb3IgcHJldmVudGluZyBzb2Z0bG9ja3MuCjIuICAqKmBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGZzL2Fmcy9pbnRlcm5hbC5oYCoqOiBTdHJlYW1saW5lZCB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGwgaW50byBhIGhlbHBlciBmdW5jdGlvbiBgYWZzX2Rpcl9lbmRfaXRlcigmYW1wO2l0ZXIpYC4gVGhpcyBhdm9pZHMgaW1wcm9wZXIgdW5tYXBwaW5nL25lc3Rpbmcgb2YgdGhlIGxvY2FsIGttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3RhYmlsaXR5IHByb2JsZW1zLiBHb29kIGZvciBjb2RlIGh5Z2llbmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LgozLiAgKipgZnMvYWZzL2ZzX3Byb2JlLmNgKio6IENvcnJlY3RlZCB0aGUgYXNzaWdubWVudCBgb2xkX2FsaXN0ID0gb2xkLSZndDthZGRyZXNzZXNgIHRvIGVuc3VyZSBwcm9wZXIgdHJhY2tpbmcgb2YgcGVlciBhcHBkYXRhIGNoYW5nZXMuIFRoaXMgd2FzIGZpeGluZyBhIGxvZ2ljIGJ1ZzsgaXQgZW5zdXJlcyBwcm9wZXIgdHJhY2tpbmcgb2YgdGhlIGBvbGQtJmd0O2FkZHJlc3Nlc2Agc3RydWN0IGZvciBmdXR1cmUgdXNlLgo0LiAgKipgZnMvYWZzL3NlcnZlci5jYCoqOiBUaGUgY3JpdGljYWwgcmVtb3ZhbCBJIG1lbnRpb25lZCBlYXJsaWVyOiB0aGUgZXJyb25lb3VzIGBrZnJlZWAuIFRoYXQgb25lLCBpZiBub3QgY2F1Z2h0LCB3b3VsZCBoYXZlIGNhdXNlZCBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbi4KCk5leHQsIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgS01TQU4gYXBwbGljYWJpbGl0eS4gQXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcyB0byB1c2VyIHNwYWNlIGJlaW5nIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzPyBMZXQmIzM5O3Mgc2VlOgoKKiAgICoqYGFmc19zZXRfcGVlcl9hcHBkYXRhYCoqOiBObywgdGhpcyBpcyBmaXhpbmcgbG9vcCBpdGVyYXRpb24gbG9naWMsIGRvZXNuJiMzOTt0IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipgYWZzX2Rpcl9lbmRfaXRlcmAqKjogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHNhZmVseSB1bm1hcHBpbmcgZGlyZWN0b3J5IGl0ZXJhdG9yIHBhZ2UgYnVmZmVyczsgaXQmIzM5O3MgYSBjbGVhbnVwLCBub3QgaW50cm9kdWN0aW9uIG9mIG5ldyB1bmluaXRpYWxpemVkIHJlYWRzLgoqICAgKipgb2xkX2FsaXN0YCoqOiBObywgdGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBmaXggdG8gYW4gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGBvbGQtJmd0O2FkZHJlc3Nlc2AuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoqICAgKipga2ZyZWVgIHJlbW92YWwqKjogVGhpcyBpcyBmaXhpbmcgYW4gaW5jb3JyZWN0IGZyZWU7IGl0IHByZXZlbnRzIG1lbW9yeSBjb3JydXB0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBhY2Nlc3MgaXMgZXhwb3NlZCwgaW4gZmFjdCwgaXQgcHJvdGVjdHMgbWVtb3J5IGZyb20gYmVpbmcgaW1wcm9wZXJseSBmcmVlZC4KCkRvZXMgYW55IHBhcnQgb2YgdGhlIGRpZmYgaGFuZGxlIGBjb3B5X3RvX3VzZXJgLCBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBhbGxvY2F0aW9ucz8gTm8sIG5vbmUgb2YgdGhlc2UgYXJlYXMgd2VyZSB0b3VjaGVkLgoKQnVncyBhZGRyZXNzZWQgb3IgdG91Y2hlZDoKCiogICBJbmZpbml0ZSBsb29wcy9zb2Z0bG9ja3MgLSBZRVMsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYSBsb29wCiogICBQcm9wZXIgdW5tYXBwaW5nIG9mIGxvY2FsIGttYXBzIC0gWUVTLCB3aXRoIGBhZnNfZGlyX2VuZF9pdGVyYAoqICAgTG9naWMgYnVnIHdoZXJlIGBvbGRfYWxpc3RgIHdhc24mIzM5O3QgdHJhY2tlZCAtIFlFUywgZml4ZWQgaW4gYGZzX3Byb2JlLmNgCiogICBFcnJvbmVvdXMgZG91YmxlLWZyZWUvdXNlLWFmdGVyLWZyZWUgLSBZRVMsIHRoZSBrZXkgZml4IGluIGBzZXJ2ZXIuY2AKCkFsbCB0aGUgYnVncyBJIHNlZSBhcmUgbG9naWMgYnVncywgc29mdGxvY2tzLCBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyAoVUFGIC8gZG91YmxlIGZyZWUpLiBUaGVzZSBhcmUgY292ZXJlZCBieSBLQVNBTi9zdGFuZGFyZCBzYW5pdGl6ZXJzLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIHBhdGNoLiBJJiMzOTtsbCBkbyBhIGZpbmFsIGRvdWJsZS1jaGVjaywgYnV0IHRoZSBhbmFseXNpcyBpcyBzb3VuZC4gVGltZSB0byBzZXQgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDg6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XG4xLiBmcy9hZnMvYWRkcl9saXN0LmM6IEZpeGVzIGFuIGluZmluaXRlIGxvb3AgaW4gYWZzX3NldF9wZWVyX2FwcGRhdGEoKSBieSBpbmNyZW1lbnRpbmcgYm90aCBwb2ludGVycy9pbmRpY2VzIHdoZW4gcG4gPT0gcG8uXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVx1MDAzZWFkZHJlc3NlcyBkdXJpbmcgZmlsZXNlcnZlciBwcm9iaW5nLlxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxuXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OC4yMTMxNzE3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzg1NDI4MDE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgICBcImFmc19sb29rdXBfc2VydmVyXCIsXG4gICAgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OC4yMTMxODAyMDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzU5MjY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZjNjZmIxZjlkZWNlNGU3MDUxYWNlYzI1ZDY0MjhhNGYyNzhiNWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXFxuaW5kZXggNjNiZjA5NmI3MjFhYS4uNzMxOTVkNzZiNDgxYSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvYWRkcl9saXN0LmNcXG4rKysgYi9mcy9hZnMvYWRkcl9saXN0LmNcXG5AQCAtMzk0LDggKzM5NCwxMSBAQCB2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdFxcdHN0cnVjdCByeHJwY19wZWVyICpwbiA9IG5ld19hbGlzdC1cXHUwMDNlYWRkcnNbbl0ucGVlcjtcXG4gXFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyO1xcbiBcXG4tXFx0XFx0aWYgKHBuID09IHBvKVxcbitcXHRcXHRpZiAocG4gPT0gcG8pIHtcXG4rXFx0XFx0XFx0bisrO1xcbitcXHRcXHRcXHRvKys7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcdFxcdGlmIChwbiBcXHUwMDNjIHBvKSB7XFxuIFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcXG4gXFx0XFx0XFx0bisrO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyX2VkaXQuY1xcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXFxuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXFxuIFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiBcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4tXFx0XFx0Z290byBlcnJvcl91bm1hcDtcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuIFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiBcXHRcXHRcXHQgICBudG9obChkZS1cXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVxcdTAwM2V1LnVuaXF1ZSksXFxuQEAgLTQ1OCw3ICs0NTgsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiBcXHRuZXh0ID0gZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIFxcbiBcXHQvKiBBZGp1c3QgdGhlIGhhc2ggY2hhaW46IGlmIGl0ZXItXFx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXFxuIFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdHBkZSA9IFxcdTAwMjZwYmxvY2stXFx1MDAzZWRpcmVudHNbcHNdO1xcbiBcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiBcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbi1cXHRcXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiBcXHRcXHRcXHRcXHR2bm9kZS1cXHUwMDNlZmlkLnZpZCwgdm5vZGUtXFx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXFx1MDAzZWZpZC51bmlxdWUsXFxuIFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuQEAgLTQ5Myw3ICs0OTEsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuIFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiBcXG4gb3V0X3VubWFwOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gXFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiBcXHRfbGVhdmUoXFxcIlxcXCIpO1xcbiBcXHRyZXR1cm47XFxuIFxcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIFxcdGdvdG8gb3V0X3VubWFwO1xcbiBcXG4tZXJyb3JfdW5tYXA6XFxuLVxcdGt1bm1hcF9sb2NhbChibG9jayk7XFxuIGVycm9yOlxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG4gXFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvZGlyX3NlYXJjaC5jXFxuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxcbiBcXG4gXFx0X2VudGVyKFxcXCIlengsJWRcXFwiLCBibG9jaywgc2xvdCk7XFxuIFxcbi1cXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbi1cXHR9XFxuK1xcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuIFxcbiBcXHRpZiAoZHZub2RlLVxcdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcXHUwMDNjIGJsZW5kKVxcbiBcXHRcXHRnb3RvIGZhaWw7XFxuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gXFxuIFxcdHJldCA9IC1FTk9FTlQ7XFxuIGZvdW5kOlxcbi1cXHRpZiAoaXRlci1cXHUwMDNlYmxvY2spIHtcXG4tXFx0XFx0a3VubWFwX2xvY2FsKGl0ZXItXFx1MDAzZWJsb2NrKTtcXG4tXFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBOVUxMO1xcbi1cXHR9XFxuLVxcbiBiYWQ6XFxuK1xcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuIFxcdGlmIChyZXQgPT0gLUVTVEFMRSlcXG4gXFx0XFx0YWZzX2ludmFsaWRhdGVfZGlyKGl0ZXItXFx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xcbiBcXHRfbGVhdmUoXFxcIiA9ICVkXFxcIiwgcmV0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbmluZGV4IGE5MWFkMTkzOGQwNzguLjhjNjIzMzRkYmZlNzIgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xcbkBAIC0yNTgsNiArMjU4LDcgQEAgaW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuIFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2c2VydmVyLVxcdTAwM2Vmc19sb2NrKSk7XFxuIFxcdGlmIChvbGQpIHtcXG4gXFx0XFx0ZXN0YXRlLVxcdTAwM2VyZXNwb25zaXZlX3NldCA9IG9sZC1cXHUwMDNlcmVzcG9uc2l2ZV9zZXQ7XFxuK1xcdFxcdG9sZF9hbGlzdCA9IG9sZC1cXHUwMDNlYWRkcmVzc2VzO1xcbiBcXHRcXHRpZiAoIW5ld19hbGlzdClcXG4gXFx0XFx0XFx0bmV3X2FsaXN0ID0gb2xkLVxcdTAwM2VhZGRyZXNzZXM7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaFxcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcXG4rKysgYi9mcy9hZnMvaW50ZXJuYWwuaFxcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcdFxcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuK1xcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBkaXJfc2lsbHkuY1xcbiAgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL3NlcnZlci5jIGIvZnMvYWZzL3NlcnZlci5jXFxuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcXG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcXG4rKysgYi9mcy9hZnMvc2VydmVyLmNcXG5AQCAtMjQyLDcgKzI0Miw2IEBAIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcXG4gb3V0OlxcbiBcXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xcbiBcXHRpZiAoY2FuZGlkYXRlKSB7XFxuLVxcdFxcdGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSk7XFxuIFxcdFxcdGtmcmVlKGNhbmRpZGF0ZSk7XFxuIFxcdFxcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVxcdTAwM2VuZXQpO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA0OjQ5Ljc5MDAxNjk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2MjUxMzc5MjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICAgIFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICAgIFwiYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgICBcImFmc19sb29rdXBfc2VydmVyXCIsXG4gICAgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtdWx0aXBsZSBmdW5jdGlvbmFsIGJ1ZyBmaXhlcyBpbiB0aGUgQUZTIGZpbGVzeXN0ZW0gY2xpZW50OiBmaXhpbmcgYW4gaW5maW5pdGUgbG9vcCBpbiBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpIHdoZW4gbWF0Y2hpbmcgcGVlcnMgYXJlIGZvdW5kLCBjb3JyZWN0aW5nIGt1bm1hcF9sb2NhbCBoYW5kbGluZyBkdXJpbmcgZGlyZWN0b3J5IGVkaXRzL3NlYXJjaGVzIHZpYSBhZnNfZGlyX2VuZF9pdGVyKCksIGVuc3VyaW5nIG9sZF9hbGlzdCBpcyBwcm9wZXJseSBhc3NpZ25lZCBpbiBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcigpLCBhbmQgcmVtb3ZpbmcgYW4gaW52YWxpZCBrZnJlZSBpbiBhZnNfbG9va3VwX3NlcnZlcigpLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIEFGUyBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2YzY2ZiMWY5ZGVjZTRlNzA1MWFjZWMyNWQ2NDI4YTRmMjc4YjVmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDg6MDQ6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvYWRkcl9saXN0LmMgYi9mcy9hZnMvYWRkcl9saXN0LmNcbmluZGV4IDYzYmYwOTZiNzIxYWEuLjczMTk1ZDc2YjQ4MWEgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvYWRkcl9saXN0LmNcbisrKyBiL2ZzL2Fmcy9hZGRyX2xpc3QuY1xuQEAgLTM5NCw4ICszOTQsMTEgQEAgdm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0XHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXHUwMDNlYWRkcnNbbl0ucGVlcjtcbiBcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVx1MDAzZWFkZHJzW29dLnBlZXI7XG4gXG4tXHRcdGlmIChwbiA9PSBwbylcbitcdFx0aWYgKHBuID09IHBvKSB7XG4rXHRcdFx0bisrO1xuK1x0XHRcdG8rKztcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuIFx0XHRpZiAocG4gXHUwMDNjIHBvKSB7XG4gXHRcdFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG4sIGRhdGEpO1xuIFx0XHRcdG4rKztcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXG4gXHRkZSA9IFx1MDAyNmJsb2NrLVx1MDAzZWRpcmVudHNbc2xvdF07XG4gXHRpZiAoZGUtXHUwMDNldS52YWxpZCAhPSAxKVxuLVx0XHRnb3RvIGVycm9yX3VubWFwO1xuK1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCIlbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wiLFxuIFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXCIsIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuK1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCIlengsJWRcIiwgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4gZm91bmQ6XG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuLVxuIGJhZDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZnNfcHJvYmUuYyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5pbmRleCBhOTFhZDE5MzhkMDc4Li44YzYyMzM0ZGJmZTcyIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ZzX3Byb2JlLmNcbisrKyBiL2ZzL2Fmcy9mc19wcm9iZS5jXG5AQCAtMjU4LDYgKzI1OCw3IEBAIGludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxuIFx0XHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2c2VydmVyLVx1MDAzZWZzX2xvY2spKTtcbiBcdGlmIChvbGQpIHtcbiBcdFx0ZXN0YXRlLVx1MDAzZXJlc3BvbnNpdmVfc2V0ID0gb2xkLVx1MDAzZXJlc3BvbnNpdmVfc2V0O1xuK1x0XHRvbGRfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0XHRpZiAoIW5ld19hbGlzdClcbiBcdFx0XHRuZXdfYWxpc3QgPSBvbGQtXHUwMDNlYWRkcmVzc2VzO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgKzExMzMsMTQgQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBpbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcdFx0ICAgc3RydWN0IGFmc19maWQgKl9maWQsIGFmc19kYXRhdmVyc2lvbl90ICpfZGlyX3ZlcnNpb24pO1xuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpXG4re1xuK1x0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbitcdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuK1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zZXJ2ZXIuYyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuaW5kZXggMGZlMTYyZWEyYTM2ZC4uMTg5MTM4YmQ2ZDcxMiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9zZXJ2ZXIuY1xuKysrIGIvZnMvYWZzL3NlcnZlci5jXG5AQCAtMjQyLDcgKzI0Miw2IEBAIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwsIHN0cnVjdCBrZXkgKmtleSxcbiBvdXQ6XG4gXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xuIFx0aWYgKGNhbmRpZGF0ZSkge1xuLVx0XHRrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlKSk7XG4gXHRcdGtmcmVlKGNhbmRpZGF0ZSk7XG4gXHRcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVx1MDAzZW5ldCk7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo0OS43OTAwMTk0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1NDQwOTQ0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZTIFBhdGNoIFNlcmllcyBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlc2UgY2hhbmdlcyBhcmUgZXZlbiB3b3J0aCBmdXp6aW5nIOKAkyBhcmUgdGhlcmUgcG90ZW50aWFsIGNvZGUgcGF0aHMgdGhhdCBjb3VsZCBleHBvc2UgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGFzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy4gVGhlbiBJJ2xsIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGZpbGVzIG1vZGlmaWVkLCBpdCBzZWVtcyBsaWtlIHRoZXJlIGFyZSBzZXZlcmFsIGZpeGVzIHJlbGF0ZWQgdG8gdGhlIEFGUyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHk6XG5cbiogICBgZnMvYWZzL2FkZHJfbGlzdC5jYDogVGhlIGZpeCBmb3IgdGhlIGluZmluaXRlIGxvb3AgaW4gYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBpcyBpbnRyaWd1aW5nLiBUaGF0IGtpbmQgb2YgYnVnIGNhbiBlYXNpbHkgbGVhZCB0byBkZW5pYWwtb2Ytc2VydmljZSwgc28gSSdsbCBmbGFnIHRoYXQgYXMgYSBkZWZpbml0ZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG4qICAgYGZzL2Fmcy9kaXJfZWRpdC5jYDogVGhlIGRvdWJsZSB1bm1hcCBpc3N1ZSBpbiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgYW5vdGhlciBhcmVhIHRoYXQgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24uIE1lbW9yeSBtYW5hZ2VtZW50IGVycm9ycyBsaWtlIHRoYXQgYXJlIG9mdGVuIGZydWl0ZnVsIHRhcmdldHMuIFRoZSB1c2Ugb2YgYGFmc19kaXJfZW5kX2l0ZXJgIGhlcmUgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29uc2lkZXIsIGFzIGl0IHNlZW1zIHRvIGJlIGludm9sdmVkIGluIHRoZXNlIGZpeGVzLlxuKiAgIGBmcy9hZnMvZGlyX3NlYXJjaC5jYDogVGhlIHJlZmFjdG9yaW5nIGludm9sdmluZyBga3VubWFwX2xvY2FsYCBhbmQgYGFmc19kaXJfZW5kX2l0ZXJgIGluIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCBpcyBwb3RlbnRpYWxseSBzaWduaWZpY2FudC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpdGVyYXRpb24gbG9naWMgaXMgY29tcGxleCwgYW5kIGNvbXBsZXggY29kZSBvZnRlbiBoYXMgYnVncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBpbnRlbmRlZCB0byB3b3JrLlxuKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IFRoZSB1bmluaXRpYWxpemVkIGBvbGRfYWxpc3RgIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHJhaXNlcyBhIHJlZCBmbGFnLiBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBhcmUgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUuXG4qICAgYGZzL2Fmcy9pbnRlcm5hbC5oYDogVGhlIGFkZGl0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyYCBpcyBhIGdvb2Qgc2lnbnBvc3QuIFRoYXQgaGludHMgYXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgcmVmYWN0b3JpbmcsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyB1c2VkLlxuKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBUaGUgYGtmcmVlYCBmaXggaW4gYGFmc19sb29rdXBfc2VydmVyYCBpcyBpbXBvcnRhbnQuIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3IgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy5cblxuTmV4dCwgSSdsbCBjaGVjayB0aGUgYGZzL2Fmcy9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBBRlMgaW4gdGhlIGtlcm5lbC4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgd2lsbCBndWlkZSBob3cgSSBidWlsZCBhIGZ1enplciB0aGF0IGNhbiBhY3R1YWxseSByZWFjaCB0aGUgY29kZSBJJ20gaW50ZXJlc3RlZCBpbiB0ZXN0aW5nLiBUaGVuLCBJIGNhbiBzdGFydCBsb29raW5nIGF0IHRoZSBmdW5jdGlvbnMgSSd2ZSBpZGVudGlmaWVkIHRvIHNlZSB3aGljaCBoYXZlIHRoZSBiZXN0IG9wcG9ydHVuaXR5IHRvIGV4ZXJjaXNlIGFsbCBjb2RlIHBhdGhzIGluIHRoaXMgcGF0Y2ggc2VyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDExLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDQ6NTUuMzM0MTE3MTMyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzUxODg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQUZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDQ6NTUuNDQ3NjQwMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDY3NTExMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIGBmcy9hZnMvS2NvbmZpZ2AsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBjb25maWd1cmF0aW9uIGFuZCBmaWxlIHN5c3RlbXM6XG5cbioqRGl2aW5nIGludG8gdGhlIEFGUyBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgZnMvYWZzL0tjb25maWdgIGZpbGUuIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludCBmb3IgY29uZmlndXJpbmcgdGhlIEFuZHJldyBGaWxlIFN5c3RlbSBkcml2ZXIgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBhbnRpY2lwYXRpbmcgYSB3ZWxsLXN0cnVjdHVyZWQgc2VyaWVzIG9mIGBjb25maWdgIG9wdGlvbnMsIGxpa2VseSBuZXN0ZWQgd2l0aGluIGBtZW51Y29uZmlnYCBibG9ja3MgdG8gb3JnYW5pemUgcmVsYXRlZCBmZWF0dXJlcyBhbmQgZGVwZW5kZW5jaWVzLiBJJ20gaG9waW5nIGl0J3MgY2xlYXJseSBkb2N1bWVudGVkLCB3aXRoIGNvbmNpc2UgZGVzY3JpcHRpb25zIGV4cGxhaW5pbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBlYWNoIG9wdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIFRoZSBtYWluIFwiRW5hYmxlIEFGUyBmaWxlIHN5c3RlbVwiIG9wdGlvbiAtIHRoaXMgd2lsbCBwcm9iYWJseSBiZSB0aGUgcm9vdCBhbmQgSSBjYW4gZXhwZWN0IGl0IGlzIGEgZGVwZW5kZW5jeSBvbiBzb21lIG5ldHdvcmsgc3RhY2sgb3B0aW9ucyBiZWluZyB0dXJuZWQgb24sIHN1Y2ggYXMgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX0lQVjZgLlxuKiAgIEZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgdmFyaW91cyBBRlMgZmVhdHVyZXM6IFNob3VsZCB0aGVyZSBiZSBzdXBwb3J0IGZvciBzcGVjaWZpYyBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGxpa2UgS2VyYmVyb3M/IFdoYXQgYWJvdXQgaGFuZGxpbmcgb2Ygdm9sdW1lIG1hbmFnZW1lbnQgb3IgY2FjaGUgc2V0dGluZ3M/XG4qICAgRGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGRyaXZlcnM6IEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhhcmQgZGVwZW5kZW5jaWVzIG9uIG5ldHdvcmtpbmcgY29tcG9uZW50cywgY3J5cHRvIG1vZHVsZXMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBBRlMgcmVsaWVzIG9uLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz9cbiogICBEZWZhdWx0IHNldHRpbmdzOiBBcmUgc2Vuc2libGUgZGVmYXVsdHMgcHJvdmlkZWQsIG9yIHdpbGwgSSBuZWVkIHRvIG1hbnVhbGx5IGNvbmZpZ3VyZSBldmVyeXRoaW5nPyBJIGhvcGUgdGhlcmUgYXJlIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCBhIHN5c2FkbWluIGNhbiB0d2VhaywgYXMgb3Bwb3NlZCB0byByZXF1aXJpbmcgYWxsIHBhcmFtZXRlcnMgYmUgZXhwbGljaXRseSBzZXQuXG4qICAgSGVscCB0ZXh0OiBIb3BlZnVsbHksIGVhY2ggb3B0aW9uIGhhcyBkZXNjcmlwdGl2ZSBoZWxwIHRleHQgZXhwbGFpbmluZyBpdHMgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zLCBpbmNsdWRpbmcgYW55IHBlcmZvcm1hbmNlIHRyYWRlb2ZmcyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gQW55IHdhcm5pbmdzIHJlZ2FyZGluZyB0aGUgZmVhdHVyZSdzIG1hdHVyaXR5IG9yIGtub3duIGJ1Z3Mgd291bGQgYmUgYXBwcmVjaWF0ZWQuXG4qICAgQW55IGJ1aWxkLXRpbWUgY2hlY2tzIG9yIGVycm9yIG1lc3NhZ2VzOiBJIHdhbnQgdG8gYmUgc3VyZSB0aGF0IEknbGwgYmUgd2FybmVkIGlmIHRoZXJlJ3MgYW4gb2J2aW91cyBjb25mbGljdCBvciBtaXNjb25maWd1cmF0aW9uLlxuXG5UaGUgcHJlc2VuY2Ugb2YgYW55IGBzZWxlY3RgIG9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGFyZSBpbXBvcnRhbnQgYXMgdGhleSBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMsIHNvIHRoYXQgd2lsbCBiZSBhIHBvaW50IHRvIHBheSBhdHRlbnRpb24gdG8uXG5UaGlzIEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IEFGUydzIGNhcGFiaWxpdGllcyBhcmUsIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdG8gY3VzdG9taXplIGl0IGZvciBkaWZmZXJlbnQgc3lzdGVtIHJlcXVpcmVtZW50cy4gSSdtIHJlYWR5IHRvIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA0MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA0OjU4LjkxNTE1MzkyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQUZTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBBRl9SWFJQQ1xcbiAgIDY6XFx0XFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbiAgIDc6XFx0XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG4gICA4OlxcdFxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW1cXG4gIDExOlxcdFxcdCAgZHJpdmVyLiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1bnNlY3VyZWQgcmVhZC1vbmx5IEFGUyBhY2Nlc3MuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFGU19ERUJVR1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiQUZTIGR5bmFtaWMgZGVidWdnaW5nXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlNcXG4gIDIwOlxcdFxcdGhlbHBcXG4gIDIxOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHJ1bnRpbWUgY29udHJvbGxhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyBhcHBlYXIuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgU2VlIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnJzdFxcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEFGU19GU0NBQ0hFXFxuICAyODpcXHRcXHRib29sIFxcXCJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbiAgMjk6XFx0XFx0ZGVwZW5kcyBvbiBBRlNfRlM9bSBcXHUwMDI2XFx1MDAyNiBGU0NBQ0hFIHx8IEFGU19GUz15IFxcdTAwMjZcXHUwMDI2IEZTQ0FDSEU9eVxcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IEFGUyBkYXRhIHRvIGJlIGNhY2hlZCBsb2NhbGx5IG9uIGRpc2sgdGhyb3VnaFxcbiAgMzI6XFx0XFx0ICB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXJcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Y29uZmlnIEFGU19ERUJVR19DVVJTT1JcXG4gIDM1OlxcdFxcdGJvb2wgXFxcIkFGUyBzZXJ2ZXIgY3Vyc29yIGRlYnVnZ2luZ1xcXCJcXG4gIDM2OlxcdFxcdGRlcGVuZHMgb24gQUZTX0ZTXFxuICAzNzpcXHRcXHRoZWxwXFxuICAzODpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY2F1c2UgdGhlIGNvbnRlbnRzIG9mIGEgc2VydmVyIGN1cnNvciB0byBiZSBkdW1wZWQgdG9cXG4gIDM5OlxcdFxcdCAgdGhlIGRtZXNnIGxvZyBpZiB0aGUgc2VydmVyIHJvdGF0aW9uIGFsZ29yaXRobSBmYWlscyB0byBzdWNjZXNzZnVsbHlcXG4gIDQwOlxcdFxcdCAgY29udGFjdCBhIHNlcnZlci5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZnMucnN0XFx1MDAzZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNDo1OC45MTUyNDg5OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzczMzQ4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGV4cHJlc3NlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2Yga2VybmVsIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgQ2hlY2twb2ludDogRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTGFuZHNjYXBlKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRoZSBwcm9ibGVtJ3MgbGlrZWx5IGZpbGVzeXN0ZW0tcmVsYXRlZCwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZnMvYWZzL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBBRlMtc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGxpdmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBBRlMgaXMgYmVpbmcgYnVpbHQsIGxpbmtlZCwgYW5kIGludGVncmF0ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsLiBUaGlzIGBNYWtlZmlsZWAgd2lsbCByZXZlYWwgdGhlIGtleSBjb21wb25lbnRzOiBvYmplY3QgZmlsZXMsIGxpYnJhcmllcywgaW5jbHVkZSBwYXRocywgYW55IHNwZWNpYWwgZmxhZ3Mgb3IgZGVmaW5lcyBzcGVjaWZpYyB0byB0aGUgQUZTIGltcGxlbWVudGF0aW9uLiBLbm93aW5nIHRoZXNlIHdpbGwgZ2V0IG1lIG9uZSBzdGVwIGNsb3NlciB0byBpc29sYXRpbmcgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYnVpbGQgc3RyYXRlZ3kuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBtaXNjb25maWd1cmF0aW9ucywgbWlzc2luZyBkZXBlbmRlbmNpZXMsIG9yIGNvbmZsaWN0aW5nIGZsYWdzIHRoYXQgbWlnaHQgYmUgY29udHJpYnV0aW5nIHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjAyLjY4ODU5OTgyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBSZWQgSGF0IExpbnV4IEFGUyBjbGllbnQuXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGthZnMteSA6PSBcXFxcXFxuICAgNzpcXHRcXHRhZGRyX2xpc3QubyBcXFxcXFxuICAgODpcXHRcXHRhZGRyX3ByZWZzLm8gXFxcXFxcbiAgIDk6XFx0XFx0Y2FsbGJhY2subyBcXFxcXFxuICAxMDpcXHRcXHRjZWxsLm8gXFxcXFxcbiAgMTE6XFx0XFx0Y21fc2VjdXJpdHkubyBcXFxcXFxuICAxMjpcXHRcXHRjbXNlcnZpY2UubyBcXFxcXFxuICAxMzpcXHRcXHRkaXIubyBcXFxcXFxuICAxNDpcXHRcXHRkaXJfZWRpdC5vIFxcXFxcXG4gIDE1OlxcdFxcdGRpcl9zZWFyY2gubyBcXFxcXFxuICAxNjpcXHRcXHRkaXJfc2lsbHkubyBcXFxcXFxuICAxNzpcXHRcXHRkeW5yb290Lm8gXFxcXFxcbiAgMTg6XFx0XFx0ZmlsZS5vIFxcXFxcXG4gIDE5OlxcdFxcdGZsb2NrLm8gXFxcXFxcbiAgMjA6XFx0XFx0ZnNjbGllbnQubyBcXFxcXFxuICAyMTpcXHRcXHRmc19vcGVyYXRpb24ubyBcXFxcXFxuICAyMjpcXHRcXHRmc19wcm9iZS5vIFxcXFxcXG4gIDIzOlxcdFxcdGlub2RlLm8gXFxcXFxcbiAgMjQ6XFx0XFx0bWFpbi5vIFxcXFxcXG4gIDI1OlxcdFxcdG1pc2MubyBcXFxcXFxuICAyNjpcXHRcXHRtbnRwdC5vIFxcXFxcXG4gIDI3OlxcdFxcdHJvdGF0ZS5vIFxcXFxcXG4gIDI4OlxcdFxcdHJ4cnBjLm8gXFxcXFxcbiAgMjk6XFx0XFx0c2VjdXJpdHkubyBcXFxcXFxuICAzMDpcXHRcXHRzZXJ2ZXIubyBcXFxcXFxuICAzMTpcXHRcXHRzZXJ2ZXJfbGlzdC5vIFxcXFxcXG4gIDMyOlxcdFxcdHN1cGVyLm8gXFxcXFxcbiAgMzM6XFx0XFx0c3ltbGluay5vIFxcXFxcXG4gIDM0OlxcdFxcdHZhbGlkYXRpb24ubyBcXFxcXFxuICAzNTpcXHRcXHR2bGNsaWVudC5vIFxcXFxcXG4gIDM2OlxcdFxcdHZsX2FsaWFzLm8gXFxcXFxcbiAgMzc6XFx0XFx0dmxfbGlzdC5vIFxcXFxcXG4gIDM4OlxcdFxcdHZsX3Byb2JlLm8gXFxcXFxcbiAgMzk6XFx0XFx0dmxfcm90YXRlLm8gXFxcXFxcbiAgNDA6XFx0XFx0dm9sdW1lLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTowMi42ODg3MTE3MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDA2NTQzNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFGUyBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIEFGUywgdGhlIEFuZHJldyBGaWxlIFN5c3RlbSBjbGllbnQsIHdpdGhpbiBhIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBTaW5jZSBpdCdzIGEgbmV0d29yayBmaWxlc3lzdGVtLCBhbmQgc3BlY2lmaWNhbGx5LCBvbmUgdGhhdCBleGlzdHMgKmluLXRyZWUqIGluIExpbnV4LCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgSSAqY2FuKiByZWFjaCBhbmQgZnV6eiBpdC4gSXQncyBtb3VudGFibGUgdXNpbmcgdGhlIHN0YW5kYXJkIGBtb3VudCAtdCBhZnNgIGNvbW1hbmQsIHNvIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdXNpbmcgcmVndWxhciBWRlMgc3lzY2FsbHMuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHByb2JpbmcgYW5kIGZ1enppbmcuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcG90ZW50aWFsbHkgbW9kaWZpZWQgZnVuY3Rpb25zLiBJJ3ZlIGlkZW50aWZpZWQgYSBsaXN0IHRvIGludmVzdGlnYXRlOlxuXG4qICAgYGZzL2Fmcy9hZGRyX2xpc3QuY2A6IHNwZWNpZmljYWxseSwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYFxuKiAgIGBmcy9hZnMvZGlyX2VkaXQuY2A6IHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gaXMgb24gdGhlIHJhZGFyXG4qICAgYGZzL2Fmcy9kaXJfc2VhcmNoLmNgOiBJJ2xsIGJlIGNoZWNraW5nIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGFuZCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YFxuKiAgIGBmcy9hZnMvZnNfcHJvYmUuY2A6IGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAgaXMgbmV4dFxuKiAgIGBmcy9hZnMvc2VydmVyLmNgOiBGaW5hbGx5LCBgYWZzX2xvb2t1cF9zZXJ2ZXJgIHdpbGwgYmUgc2NydXRpbml6ZWRcblxuVGhlIGNvcmUgb2YgbXkgYXBwcm9hY2ggaXMgdG8gZGV0ZXJtaW5lIGlmIGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NpYmxlIOKAkyBhcmUgdGhleSBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgYWN0IGFzIGVudHJ5cG9pbnRzIHRoYXQgSSBjYW4gZGlyZWN0bHkgbWFuaXB1bGF0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEFGUyBhcmNoaXRlY3R1cmUgdG8gZm9ybXVsYXRlIGVmZmVjdGl2ZSBmdXp6aW5nIGlucHV0cy4gSSdsbCBzdGFydCB3aXRoIGBmcy9hZnMvYWRkcl9saXN0LmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhcm91bmQgbGluZSAzOTQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjA1LjY5NTI1ODk2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM4MDpcXHRcXHRcXHRyZXR1cm47XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXHRpZiAoIW5ld19hbGlzdCkge1xcbiAzODM6XFx0XFx0XFx0LyogRGVhZCBzZXJ2ZXIuICBKdXN0IHJlbW92ZSBhbGwuICovXFxuIDM4NDpcXHRcXHRcXHRmb3IgKDsgbyBcXHUwMDNjIG9sZF9hbGlzdC1cXHUwMDNlbnJfYWRkcnM7IG8rKylcXG4gMzg1OlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKG9sZF9hbGlzdC1cXHUwMDNlYWRkcnNbb10ucGVlciwgMCk7XFxuIDM4NjpcXHRcXHRcXHRyZXR1cm47XFxuIDM4NzpcXHRcXHR9XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdC8qIFdhbGsgdGhyb3VnaCB0aGUgdHdvIGxpc3RzIHNpbXVsdGFuZW91c2x5LCBzZXR0aW5nIG5ldyBwZWVycyBhbmRcXG4gMzkwOlxcdFxcdCAqIGNsZWFyaW5nIG9sZCBvbmVzLiAgVGhlIHR3byBsaXN0cyBhcmUgb3JkZXJlZCBieSBwb2ludGVyIHRvIHBlZXJcXG4gMzkxOlxcdFxcdCAqIHJlY29yZC5cXG4gMzkyOlxcdFxcdCAqL1xcbiAzOTM6XFx0XFx0d2hpbGUgKG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzIFxcdTAwMjZcXHUwMDI2IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKSB7XFxuIDM5NDpcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcG4gPSBuZXdfYWxpc3QtXFx1MDAzZWFkZHJzW25dLnBlZXI7XFxuIDM5NTpcXHRcXHRcXHRzdHJ1Y3QgcnhycGNfcGVlciAqcG8gPSBvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXI7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdGlmIChwbiA9PSBwbykge1xcbiAzOTg6XFx0XFx0XFx0XFx0bisrO1xcbiAzOTk6XFx0XFx0XFx0XFx0bysrO1xcbiA0MDA6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQwMTpcXHRcXHRcXHR9XFxuIDQwMjpcXHRcXHRcXHRpZiAocG4gXFx1MDAzYyBwbykge1xcbiA0MDM6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEocG4sIGRhdGEpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0bisrO1xcbiA0MDU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNDA2OlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBvLCAwKTtcXG4gNDA3OlxcdFxcdFxcdFxcdG8rKztcXG4gNDA4OlxcdFxcdFxcdH1cXG4gNDA5OlxcdFxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0XFx0aWYgKG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKVxcbiA0MTI6XFx0XFx0XFx0Zm9yICg7IG4gXFx1MDAzYyBuZXdfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBuKyspXFxuIDQxMzpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShuZXdfYWxpc3QtXFx1MDAzZWFkZHJzW25dLnBlZXIsIGRhdGEpO1xcbiA0MTQ6XFx0XFx0aWYgKG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzKVxcbiA0MTU6XFx0XFx0XFx0Zm9yICg7IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBvKyspXFxuIDQxNjpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xcbiA0MTc6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTowNS42OTU0MDUwMDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI0MjA0MzY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgYW5kIEl0cyBDYWxsZXJzKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyBkaWdnaW5nIGludG8gdGhpcyBgYWZzX3NldF9wZWVyX2FwcGRhdGFgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaXRzIGV4YWN0IHNpZ25hdHVyZSDigJMgdGhlIGlucHV0IHBhcmFtZXRlcnMsIHRoZSByZXR1cm4gdHlwZSwgdGhlIHdob2xlIHNoZWJhbmcuIEtub3dpbmcgdGhlIHNwZWNpZmljcyBpcyBjcnVjaWFsLiBPbmNlIEkndmUgZ290IHRoYXQgc3RyYWlnaHQsIEkgY2FuIG1vdmUgb24gdG8gdGhlIG1vcmUgaW50ZXJlc3RpbmcgcGFydDogZmlndXJpbmcgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aG9zZSBjYWxscyBpcyBnb2luZyB0byBwcm92aWRlIHRoZSB0cnVlIGluc2lnaHRzIGludG8gdGhpcyBjb2Rl4oCZcyBmdW5jdGlvbmFsaXR5IGFuZCBwdXJwb3NlLiBUaGUgc2lnbmF0dXJlIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBwcm9ncmFtIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTEwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToxMC45Mzc0NTIwMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzEwMTE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2FkZHJfbGlzdC5jPTMyNz1pbnQgYWZzX21lcmdlX2ZzX2FkZHI2KHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphbGlzdCxcXG4tLVxcbmZzL2Fmcy9hZGRyX2xpc3QuYy0zNjgtICovXFxuZnMvYWZzL2FkZHJfbGlzdC5jOjM2OTp2b2lkIGFmc19zZXRfcGVlcl9hcHBkYXRhKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuZnMvYWZzL2FkZHJfbGlzdC5jLTM3MC1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpvbGRfYWxpc3QsXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYz0yMzg9aW50IGFmc19mc19wcm9iZV9maWxlc2VydmVyKHN0cnVjdCBhZnNfbmV0ICpuZXQsIHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYy0yNjYtXFx0aWYgKG9sZF9hbGlzdCAhPSBuZXdfYWxpc3QpXFxuZnMvYWZzL2ZzX3Byb2JlLmM6MjY3OlxcdFxcdGFmc19zZXRfcGVlcl9hcHBkYXRhKHNlcnZlciwgb2xkX2FsaXN0LCBuZXdfYWxpc3QpO1xcbmZzL2Fmcy9mc19wcm9iZS5jLTI2OC1cXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEwMjE9ZXh0ZXJuIGludCBhZnNfbWVyZ2VfZnNfYWRkcjYoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19hZGRyX2xpc3QgKmFkZHIsXFxuZnMvYWZzL2ludGVybmFsLmgtMTAyMi1cXHRcXHRcXHQgICAgICBfX2JlMzIgKnhkciwgdTE2IHBvcnQpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjEwMjM6dm9pZCBhZnNfc2V0X3BlZXJfYXBwZGF0YShzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEwMjQtXFx0XFx0XFx0ICBzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0LFxcbi0tXFxuZnMvYWZzL3NlcnZlci5jPTQ2NT1zdGF0aWMgdm9pZCBhZnNfc2VydmVyX2Rlc3Ryb3llcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtNDg3LVxcdGlmIChlc3RhdGUpXFxuZnMvYWZzL3NlcnZlci5jOjQ4ODpcXHRcXHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIGVzdGF0ZS1cXHUwMDNlYWRkcmVzc2VzLCBOVUxMKTtcXG5mcy9hZnMvc2VydmVyLmMtNDg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToxMS4wNTQ1NTczNjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA0Njg4ODk0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgYW5kIGl0cyBDb250ZXh0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpdmUgaW50byBgYWZzX2VkaXRfZGlyX3JlbW92ZWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdHJhY2UgaXRzIGRlY2xhcmF0aW9uIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3Mgc2NvcGUsIGlucHV0cywgb3V0cHV0cywgYW5kIHRoZSBvdmVyYWxsIGludGVyYWN0aW9uIGlzIGtleS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIHdoZXJlIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBpbnZva2VkIGluIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGhvdyBjaGFuZ2VzIG1pZ2h0IGFmZmVjdCB0aGUgYnJvYWRlciBzeXN0ZW0uIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGdsb2JhbCB2YXJpYWJsZXMgdGhhdCB0aGUgZnVuY3Rpb24gYWNjZXNzZXMsIGluY2x1ZGluZyBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGNvbmN1cnJlbmN5LCBhbmQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSBiZWZvcmUgSSBtYWtlIGFueSBjaGFuZ2VzLCBvciBldmVuIGp1c3QgYXNzZXNzIHRoZSBpbXBhY3Qgb2YgZXhpc3RpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc5NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjIxLjUyMzQ1MDk5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0MTgyNzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Fmc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyLmM9MTM2OD1zdGF0aWMgdm9pZCBhZnNfcm1kaXJfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpci5jLTEzODAtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpci5jOjEzODE6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvcC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTEzODItXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTE1MTY9c3RhdGljIHZvaWQgYWZzX3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTUyNi1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTUyNzpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTUyOC1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xcbi0tXFxuZnMvYWZzL2Rpci5jPTE4ODg9c3RhdGljIHZvaWQgYWZzX3JlbmFtZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTkxMy1cXHQgICAgb3JpZ19kdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXFx1MDAzZWR2X2JlZm9yZSArIG9yaWdfZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTkxNDpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKG9yaWdfZHZub2RlLCBcXHUwMDI2b2xkX2RlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xOTE1LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JlbmFtZV8wKTtcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xOTI0LVxcdFxcdGlmICghb3AtXFx1MDAzZXJlbmFtZS5uZXdfbmVnYXRpdmUpXFxuZnMvYWZzL2Rpci5jOjE5MjU6XFx0XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShuZXdfZHZub2RlLCBcXHUwMDI2bmV3X2RlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xOTI2LVxcdFxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3JlbmFtZV8xKTtcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYy0zOTItICovXFxuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG5mcy9hZnMvZGlyX2VkaXQuYy0zOTQtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24gd2h5KVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTQxLVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKSB7XFxuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b2xkLVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTQzLVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jPTE3Nj1zdGF0aWMgdm9pZCBhZnNfc2lsbHlfdW5saW5rX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xODQtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpXFxuZnMvYWZzL2Rpcl9zaWxseS5jOjE4NTpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyX3NpbGx5LmMtMTg2LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xMTE4PWV4dGVybiB2b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgYWZzX2ZpZCAqLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXFx0XFx0XFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMjA6ZXh0ZXJuIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbik7XFxuZnMvYWZzL2ludGVybmFsLmgtMTEyMS12b2lkIGFmc19lZGl0X2Rpcl91cGRhdGUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToyNy4yNjUyODMzNTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI1NjM5NDMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEFGUyBTZXJ2ZXIgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGBhZnNfbG9va3VwX3NlcnZlcmAgYW5kIGBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcmAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgYXJlIGludGVyYWN0aW5nIHdpdGggdGhlIEFGUyBmaWxlc2VydmVyLiBgYWZzX2xvb2t1cF9zZXJ2ZXJgIGNsZWFybHkgcGxheXMgYSByb2xlIGluIHRoZSBpbml0aWFsIHNlcnZlciBsb29rdXAgYW5kIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSXMgaXQgY2FjaGluZyBvciBoYW5kbGluZyBhbnkgc29ydCBvZiBzZXJ2ZXIgZGlzY292ZXJ5PyBUaGVuLCBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHNlZW1zIGxpa2UgYSBwcm9iaW5nIGZ1bmN0aW9uIOKAkyBwZXJoYXBzIHVzZWQgdG8gY2hlY2sgc2VydmVyIGhlYWx0aCwgYXZhaWxhYmlsaXR5LCBvciBmaWxlIHN5c3RlbSByZXNwb25zaXZlbmVzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIG9yIGFjdGlvbnMgZmxvdyBpbiBlYWNoIGZ1bmN0aW9uIGFuZCBob3cgdGhleSBtaWdodCBvdmVybGFwIG9yIHdvcmsgdG9nZXRoZXIgdG8gYWNoaWV2ZSBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCByb2J1c3RuZXNzLiBJIGtub3cgdGhhdCBsb29raW5nIGludG8gdGhlc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGdyZWF0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNsaWVudCBmaW5kcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHNlcnZlci4gSSB3YW50IHRvIGtub3cgZXhhY3RseSB3aGF0IHN0ZXBzIGFyZSB0YWtlbiB0byBtYWtlIHN1cmUgdGhlIHNlcnZlciBpcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxMTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNToyOS41MjE2ODEzMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3Mzg2ODA5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2xvb2t1cF9zZXJ2ZXJ8YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9mc19wcm9iZS5jPTEzOD12b2lkIGFmc19maWxlc2VydmVyX3Byb2JlX3Jlc3VsdChzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpXFxuLS1cXG5mcy9hZnMvZnNfcHJvYmUuYy0yMzctICovXFxuZnMvYWZzL2ZzX3Byb2JlLmM6MjM4OmludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9mc19wcm9iZS5jLTIzOS1cXHRcXHRcXHQgICAgc3RydWN0IGFmc19hZGRyX2xpc3QgKm5ld19hbGlzdCwgc3RydWN0IGtleSAqa2V5KVxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmM9Mzg4PXN0YXRpYyB2b2lkIGFmc19kaXNwYXRjaF9mc19wcm9iZShzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyKVxcbi0tXFxuZnMvYWZzL2ZzX3Byb2JlLmMtNDAwLVxcbmZzL2Fmcy9mc19wcm9iZS5jOjQwMTpcXHRhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihuZXQsIHNlcnZlciwgTlVMTCwga2V5KTtcXG5mcy9hZnMvZnNfcHJvYmUuYy00MDItXFx0YWZzX3B1dF9zZXJ2ZXIobmV0LCBzZXJ2ZXIsIGFmc19zZXJ2ZXJfdHJhY2VfcHV0X3Byb2JlKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTEyNDk9ZXh0ZXJuIHZvaWQgYWZzX2ZpbGVzZXJ2ZXJfcHJvYmVfcmVzdWx0KHN0cnVjdCBhZnNfY2FsbCAqKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMjUwOmludCBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihzdHJ1Y3QgYWZzX25ldCAqbmV0LCBzdHJ1Y3QgYWZzX3NlcnZlciAqc2VydmVyLFxcbmZzL2Fmcy9pbnRlcm5hbC5oLTEyNTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBhZnNfYWRkcl9saXN0ICpuZXdfYWxpc3QsIHN0cnVjdCBrZXkgKmtleSk7XFxuLS1cXG5mcy9hZnMvaW50ZXJuYWwuaD0xNTQ5PXN0cnVjdCBhZnNfc2VydmVyICphZnNfZmluZF9zZXJ2ZXIoY29uc3Qgc3RydWN0IHJ4cnBjX3BlZXIgKnBlZXIpO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjE1NTA6ZXh0ZXJuIHN0cnVjdCBhZnNfc2VydmVyICphZnNfbG9va3VwX3NlcnZlcihzdHJ1Y3QgYWZzX2NlbGwgKiwgc3RydWN0IGtleSAqLCBjb25zdCB1dWlkX3QgKiwgdTMyKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xNTUxLWV4dGVybiBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2dldF9zZXJ2ZXIoc3RydWN0IGFmc19zZXJ2ZXIgKiwgZW51bSBhZnNfc2VydmVyX3RyYWNlKTtcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYz0xNTI9c3RhdGljIHN0cnVjdCBhZnNfYWRkcl9saXN0ICphZnNfdmxfbG9va3VwX2FkZHJzKHN0cnVjdCBhZnNfc2VydmVyICpzZXJ2ZXIsXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtMTc3LSAqL1xcbmZzL2Fmcy9zZXJ2ZXIuYzoxNzg6c3RydWN0IGFmc19zZXJ2ZXIgKmFmc19sb29rdXBfc2VydmVyKHN0cnVjdCBhZnNfY2VsbCAqY2VsbCwgc3RydWN0IGtleSAqa2V5LFxcbmZzL2Fmcy9zZXJ2ZXIuYy0xNzktXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1dWlkX3QgKnV1aWQsIHUzMiBhZGRyX3ZlcnNpb24pXFxuLS1cXG5mcy9hZnMvc2VydmVyLmMtMjM0LVxcbmZzL2Fmcy9zZXJ2ZXIuYzoyMzU6XFx0XFx0cmV0ID0gYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoY2VsbC1cXHUwMDNlbmV0LCBzZXJ2ZXIsIGFsaXN0LCBrZXkpO1xcbmZzL2Fmcy9zZXJ2ZXIuYy0yMzYtXFx0XFx0aWYgKHJldClcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYz01NDE9c3RhdGljIG5vaW5saW5lIGJvb2wgYWZzX3VwZGF0ZV9zZXJ2ZXJfcmVjb3JkKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcCxcXG4tLVxcbmZzL2Fmcy9zZXJ2ZXIuYy01NzQtXFx0aWYgKHNlcnZlci1cXHUwMDNlYWRkcl92ZXJzaW9uICE9IGFsaXN0LVxcdTAwM2V2ZXJzaW9uKVxcbmZzL2Fmcy9zZXJ2ZXIuYzo1NzU6XFx0XFx0YWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIob3AtXFx1MDAzZW5ldCwgc2VydmVyLCBhbGlzdCwga2V5KTtcXG5mcy9hZnMvc2VydmVyLmMtNTc2LVxcbi0tXFxuZnMvYWZzL3NlcnZlcl9saXN0LmM9Mjc9c3RydWN0IGFmc19zZXJ2ZXJfbGlzdCAqYWZzX2FsbG9jX3NlcnZlcl9saXN0KHN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUsXFxuLS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04MS1cXG5mcy9hZnMvc2VydmVyX2xpc3QuYzo4MjpcXHRcXHRzZXJ2ZXIgPSBhZnNfbG9va3VwX3NlcnZlcih2b2x1bWUtXFx1MDAzZWNlbGwsIGtleSwgXFx1MDAyNnZsZGItXFx1MDAzZWZzX3NlcnZlcltpXSxcXG5mcy9hZnMvc2VydmVyX2xpc3QuYy04My1cXHRcXHRcXHRcXHRcXHQgICB2bGRiLVxcdTAwM2VhZGRyX3ZlcnNpb25baV0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTozMy4yNjAzNjg3OThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc3Mzc4ODYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRGlyZWN0b3J5IEJsb2NrIERpc2NvdmVyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGRpcmVjdG9yeSBibG9jayBsb29rdXAgbG9naWMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAuIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHRoZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIGludm9sdmVkIGluIHJlc29sdmluZyB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgZGlyZWN0b3J5IGJsb2NrcyB3aXRoaW4gdGhlIEFGUyBmaWxlIHN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIGhpZ2gtbGV2ZWwgc2VhcmNoIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGluZ3MgbGlrZSBjYWNoZSBsb29rdXBzIG9yIGl0ZXJhdGluZyB0aHJvdWdoIHZhcmlvdXMgaW5kZXggc3RydWN0dXJlcy4gYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAsIHNvdW5kcyBsaWtlIGEgbW9yZSBncmFudWxhciBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9ucyBpbiB0aGUgQUZTIGNvZGViYXNlLCBJJ20gYmV0dGluZyB0aGF0IGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIHVzZWQgdG8gc2VhcmNoIHNwZWNpZmljIGhhc2ggYnVja2V0cy4gVGhpcyB3b3VsZCBiZSBob3cgd2UgaGFuZGxlIHBvdGVudGlhbGx5IGNvbmN1cnJlbnQgYWNjZXNzIG9yIHNpbXBseSBhIHdheSB0byBvcmdhbml6ZSBvdXIgZGF0YS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3by4gQXJlIHRoZXkgY2FsbGVkIHNlcXVlbnRpYWxseSwgb3IgaXMgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCByZXBlYXRlZGx5IGludm9rZXMgdW50aWwgdGhlIHRhcmdldCBibG9jayBpcyBsb2NhdGVkPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlaXIgcHJvdG90eXBlcyBhbmQgY2FsbCBncmFwaHMgdG8gc2VlIHdoYXQgZGF0YSB0aGV5IHdvcmsgd2l0aCBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eS4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIEFGUyBkaXJlY3RvcnkgYmxvY2sgZGlzY292ZXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjM5LjAzNDE2MDUxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MjU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2Rpcl9maW5kX2Jsb2NrfGFmc19kaXJfc2VhcmNoX2J1Y2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmM9MzkzPXZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cXHQvKiBGaW5kIHRoZSBlbnRyeSBpbiB0aGUgYmxvYi4gKi9cXG5mcy9hZnMvZGlyX2VkaXQuYzo0MjM6XFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXFx1MDAyNml0ZXIsIG5hbWUsIFxcdTAwMjZmaWQpO1xcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cXHRpZiAoZm91bmQgXFx1MDAzYyAwKSB7XFxuLS1cXG5mcy9hZnMvZGlyX2VkaXQuYy00MzUtXFxuZnMvYWZzL2Rpcl9lZGl0LmM6NDM2OlxcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBiKTtcXG5mcy9hZnMvZGlyX2VkaXQuYy00MzctXFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTQ4MC1cXG5mcy9hZnMvZGlyX2VkaXQuYzo0ODE6XFx0XFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBwYik7XFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDgyLVxcdFxcdGlmICghcGJsb2NrKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYz01Nz1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy02Ni0gKi9cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjY3OnVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsb2NrKVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtNjgte1xcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMTktICovXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjA6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyMS1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKVxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjYtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoxMjc6XFx0bWV0YSA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCAwKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTEyOC1cXHRpZiAoIW1ldGEpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTE0OC1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjE0OTpcXHRcXHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhpdGVyLCBibG51bSk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xNTAtXFx0XFx0aWYgKCFibG9jaylcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM9MTg0PWludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbi0tXFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0yMTEtXFxuZnMvYWZzL2Rpcl9zZWFyY2guYzoyMTI6XFx0XFx0cmV0ID0gYWZzX2Rpcl9zZWFyY2hfYnVja2V0KFxcdTAwMjZpdGVyLCBuYW1lLCBfZmlkKTtcXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cXHRcXHR1cF9yZWFkKFxcdTAwMjZkdm5vZGUtXFx1MDAzZXZhbGlkYXRlX2xvY2spO1xcbi0tXFxuZnMvYWZzL2ludGVybmFsLmg9MTEyOT1ib29sIGFmc19kaXJfaW5pdF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMwOnVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsb2NrKTtcXG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMxOmludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuZnMvYWZzL2ludGVybmFsLmgtMTEzMi1cXHRcXHRcXHQgIHN0cnVjdCBhZnNfZmlkICpfZmlkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6MzkuMTAyNjkyNzE2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMDUyOTE1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFGUyBGaWxlc3lzdGVtIFBhdGNoIEFuYWx5c2lzOiBXb3J0aHkgb2YgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRhcmdldGluZyB0aGUgQUZTIGZpbGVzeXN0ZW0gZHJpdmVyLCBgZnMvYWZzYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIHNldmVyYWwga2V5IGZ1bmN0aW9uYWwgYnVncy4gRmlyc3QsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgYWRkcmVzcyBsaXN0IGNvbXBhcmlzb24uIFRoZW4sIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGFkZHJlc3MgdW5tYXBwaW5nIGlzc3VlcywgY2VudHJhbGl6aW5nIHRoZSBvcGVyYXRpb24uIFdlIGFsc28gaGF2ZSBhIGZpeCBpbiBgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXJgIHdoZXJlIGBvbGRfYWxpc3RgIHdhcyBub3QgYXNzaWduZWQgY29ycmVjdGx5LCBhbmQgZmluYWxseSwgYSByb2d1ZSBga2ZyZWVgIGNhbGwgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGBhZnNfbG9va3VwX3NlcnZlcmAuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gR2l2ZW4gdGhhdCBBRlMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0sIHN5emthbGxlciBpcyBhIHNvbGlkIGNob2ljZSBoZXJlLiBJdCdzIHdlbGwtZXF1aXBwZWQgdG8gbW91bnQgYW5kIGZ1enogbmV0d29yayBmaWxlc3lzdGVtcywgY3JlYXRlIHNvY2tldHMsIGFuZCBnZW5lcmFsbHkgc3RyZXNzIHRoZSBrZXJuZWwncyBmaWxlc3lzdGVtIGNvbXBvbmVudHMuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGFscmVhZHkgaGFzIGEgZ29vZCB0cmFjayByZWNvcmQgd2l0aCB0aGlzIGtpbmQgb2Ygd29yayBpcyBhIG1ham9yIHBsdXMuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBBRlNfRlNgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24sIGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluY2x1ZGUgYElORVRgLCBgQUZfUlhSUENgLCBgRE5TX1JFU09MVkVSYCwgYE5FVEZTX1NVUFBPUlRgLCBhbmQgYENSWVBUT19LUkI1YC4gVGhpcyBhbGwgc2VlbXMgY29ycmVjdCBmb3IgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQUZTX0ZTYCBpcyBlbmFibGVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2ggdG8gZGlyZWN0IHRoZSBmdXp6aW5nIGVmZm9ydHMuIEFmdGVyIGFuYWx5c2lzLCB0aGVzZSBhcmUgYWxsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zOiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCwgYGFmc19mc19wcm9iZV9maWxlc2VydmVyYCwgYW5kIGBhZnNfbG9va3VwX3NlcnZlcmAuIFRoaXMgY29uZmlybXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgd2Ugd2FudCB0byBmb2N1cyBvbi5cblxuU28sIHN1bW1pbmcgdXA6IFRoZSBwYXRjaCBmaXhlcyBjcml0aWNhbCBidWdzIGFjcm9zcyBhIGNvcmUgbmV0d29yayBmaWxlc3lzdGVtLCBpdCdzIGVhc2lseSByZWFjaGFibGUgYnkgc3l6a2FsbGVyIHdoaWNoIHVzZXMgbmV0d29yayBmaWxlIHN5c3RlbXMgYW5kIGxvY2FsIGZpbGUgc3lzdGVtcywgYW5kIHRoZSBjb25maWd1cmF0aW9uIGFuZCBlbnRyeXBvaW50cyBhcmUgYWxsIHByb3Blcmx5IGlkZW50aWZpZWQuIEkgc2hvdWxkIHNldCB0aGUgcmVzdWx0cyB0bzpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogXCJGaXhlcyBzZXZlcmFsIGZ1bmN0aW9uYWwgYnVncyAoaW5maW5pdGUgbG9vcCwgdW5tYXAgaXNzdWVzLCBhZGRyZXNzIGxpc3QgYXNzaWdubWVudCwga2ZyZWUpIGluIEFGUyBmaWxlc3lzdGVtIGRyaXZlciwgbWFraW5nIGl0IGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXCJcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImFmc19lZGl0X2Rpcl9yZW1vdmVcIiwgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIiwgXCJhZnNfZGlyX3NlYXJjaF9idWNrZXRcIiwgXCJhZnNfc2V0X3BlZXJfYXBwZGF0YVwiLCBcImFmc19mc19wcm9iZV9maWxlc2VydmVyXCIsIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiQUZTX0ZTXCJdYFxuXG5UaGVuIEkgd2lsbCBpbnZva2UgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NTYsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA1OjUyLjE1NTYxMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgxOTMyODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCIsXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIixcbiAgICBcImFmc19zZXRfcGVlcl9hcHBkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCIsXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZnNfcHJvYmVfZmlsZXNlcnZlclwiLFxuICAgIFwiYWZzX2xvb2t1cF9zZXJ2ZXJcIixcbiAgICBcImFmc19zZXRfcGVlcl9hcHBkYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIG11bHRpcGxlIGZ1bmN0aW9uYWwgYnVnIGZpeGVzIGluIHRoZSBBRlMgZmlsZXN5c3RlbSBjbGllbnQ6IGZpeGluZyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgd2hlbiBtYXRjaGluZyBwZWVycyBhcmUgZm91bmQsIGNvcnJlY3Rpbmcga3VubWFwX2xvY2FsIGhhbmRsaW5nIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMgdmlhIGFmc19kaXJfZW5kX2l0ZXIoKSwgZW5zdXJpbmcgb2xkX2FsaXN0IGlzIHByb3Blcmx5IGFzc2lnbmVkIGluIGFmc19mc19wcm9iZV9maWxlc2VydmVyKCksIGFuZCByZW1vdmluZyBhbiBpbnZhbGlkIGtmcmVlIGluIGFmc19sb29rdXBfc2VydmVyKCkuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgQUZTIG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNTo1Mi4zMDM4MTM4NzdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzYzNjI4ODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTIuMzA2NjU2Mjc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjk3NjA3ODE4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRyZXNzZXMgc2V2ZXJhbCBsb2dpYyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGluIHRoZSBBRlMgc3Vic3lzdGVtOlxcbjEuIGZzL2Fmcy9hZGRyX2xpc3QuYzogRml4ZXMgYW4gaW5maW5pdGUgbG9vcCBpbiBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpIGJ5IGluY3JlbWVudGluZyBib3RoIHBvaW50ZXJzL2luZGljZXMgd2hlbiBwbiA9PSBwby5cXG4yLiBmcy9hZnMvZGlyX2VkaXQuYywgZnMvYWZzL2Rpcl9zZWFyY2guYywgZnMvYWZzL2ludGVybmFsLmg6IENvbnNvbGlkYXRlcyBsb2NhbCBrbWFwIHVubWFwcGluZyBsb2dpYyB1c2luZyBhZnNfZGlyX2VuZF9pdGVyKCkgaGVscGVyIHRvIGVuc3VyZSBjbGVhbiBhbmQgY29ycmVjdCB1bm1hcCBvcGVyYXRpb25zIGR1cmluZyBkaXJlY3RvcnkgZWRpdHMvc2VhcmNoZXMuXFxuMy4gZnMvYWZzL2ZzX3Byb2JlLmM6IEluaXRpYWxpemVzIG9sZF9hbGlzdCBmcm9tIG9sZC1cXHUwMDNlYWRkcmVzc2VzIGR1cmluZyBmaWxlc2VydmVyIHByb2JpbmcuXFxuNC4gZnMvYWZzL3NlcnZlci5jOiBSZW1vdmVzIGFuIGVycm9uZW91cyBrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSkpIGluIGFmc19sb29rdXBfc2VydmVyIGVycm9yIGNsZWFudXAsIHByZXZlbnRpbmcgaW52YWxpZC9wcmVtYXR1cmUgZnJlZSBvZiBlbmRwb2ludCBzdGF0ZS5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpbmZvLWxlYWtzLiBQb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaGVyZSAoc3VjaCBhcyBkb3VibGUgZnJlZSAvIHVzZS1hZnRlci1mcmVlIG9yIGludmFsaWQgbWVtb3J5IGFjY2VzcykgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIHRvb2xpbmcuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdmM2NmYjFmOWRlY2U0ZTcwNTFhY2VjMjVkNjQyOGE0ZjI3OGI1ZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA4OjA0OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2FkZHJfbGlzdC5jIGIvZnMvYWZzL2FkZHJfbGlzdC5jXG5pbmRleCA2M2JmMDk2YjcyMWFhLi43MzE5NWQ3NmI0ODFhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2FkZHJfbGlzdC5jXG4rKysgYi9mcy9hZnMvYWRkcl9saXN0LmNcbkBAIC0zOTQsOCArMzk0LDExIEBAIHZvaWQgYWZzX3NldF9wZWVyX2FwcGRhdGEoc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBuID0gbmV3X2FsaXN0LVx1MDAzZWFkZHJzW25dLnBlZXI7XG4gXHRcdHN0cnVjdCByeHJwY19wZWVyICpwbyA9IG9sZF9hbGlzdC1cdTAwM2VhZGRyc1tvXS5wZWVyO1xuIFxuLVx0XHRpZiAocG4gPT0gcG8pXG4rXHRcdGlmIChwbiA9PSBwbykge1xuK1x0XHRcdG4rKztcbitcdFx0XHRvKys7XG4gXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcdFx0aWYgKHBuIFx1MDAzYyBwbykge1xuIFx0XHRcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcbiBcdFx0XHRuKys7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXG4rKysgYi9mcy9hZnMvZGlyX2VkaXQuY1xuQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xuIFx0ZGUgPSBcdTAwMjZibG9jay1cdTAwM2VkaXJlbnRzW3Nsb3RdO1xuIFx0aWYgKGRlLVx1MDAzZXUudmFsaWQgIT0gMSlcbi1cdFx0Z290byBlcnJvcl91bm1hcDtcbitcdFx0Z290byBlcnJvcjtcbiBcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxuIFx0XHRcdCAgIG50b2hsKGRlLVx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cdTAwM2V1LnVuaXF1ZSksXG5AQCAtNDU4LDcgKzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCdzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cbkBAIC00ODUsNyArNDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRwZGUgPSBcdTAwMjZwYmxvY2stXHUwMDNlZGlyZW50c1twc107XG4gXHRcdHByZXZfbmV4dCA9IHBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiBcdFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcbi1cdFx0XHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcbiBcdFx0XHRwcl93YXJuKFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcIixcbiBcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiBcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG5AQCAtNDkzLDcgKzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG4gXHRcdHBkZS1cdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XG4tXHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0fVxuIFxuIFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXHUwMDI2dm5vZGUtXHUwMDNlbmV0ZnMuaW5vZGUpO1xuQEAgLTUwMywxOCArNTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVwiLCBuYW1lLVx1MDAzZW5hbWUsIGIsIHNsb3QpO1xuIFxuIG91dF91bm1hcDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCJcIik7XG4gXHRyZXR1cm47XG4gXG4gYWxyZWFkeV9pbnZhbGlkYXRlZDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIFx0Z290byBvdXRfdW5tYXA7XG4gXG4tZXJyb3JfdW5tYXA6XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIGVycm9yOlxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXG4gXHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX3NlYXJjaC5jIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcbkBAIC03NSwxMCArNzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwiJXp4LCVkXCIsIGJsb2NrLCBzbG90KTtcbiBcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXG4gXHRyZXQgPSAtRU5PRU5UO1xuIGZvdW5kOlxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbi1cbiBiYWQ6XG4rXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFx0aWYgKHJldCA9PSAtRVNUQUxFKVxuIFx0XHRhZnNfaW52YWxpZGF0ZV9kaXIoaXRlci1cdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcbiBcdF9sZWF2ZShcIiA9ICVkXCIsIHJldCk7XG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2ZzX3Byb2JlLmMgYi9mcy9hZnMvZnNfcHJvYmUuY1xuaW5kZXggYTkxYWQxOTM4ZDA3OC4uOGM2MjMzNGRiZmU3MiAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9mc19wcm9iZS5jXG4rKysgYi9mcy9hZnMvZnNfcHJvYmUuY1xuQEAgLTI1OCw2ICsyNTgsNyBAQCBpbnQgYWZzX2ZzX3Byb2JlX2ZpbGVzZXJ2ZXIoc3RydWN0IGFmc19uZXQgKm5ldCwgc3RydWN0IGFmc19zZXJ2ZXIgKnNlcnZlcixcbiBcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNnNlcnZlci1cdTAwM2Vmc19sb2NrKSk7XG4gXHRpZiAob2xkKSB7XG4gXHRcdGVzdGF0ZS1cdTAwM2VyZXNwb25zaXZlX3NldCA9IG9sZC1cdTAwM2VyZXNwb25zaXZlX3NldDtcbitcdFx0b2xkX2FsaXN0ID0gb2xkLVx1MDAzZWFkZHJlc3NlcztcbiBcdFx0aWYgKCFuZXdfYWxpc3QpXG4gXHRcdFx0bmV3X2FsaXN0ID0gb2xkLVx1MDAzZWFkZHJlc3NlcztcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxuK3tcbitcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbitcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbmRpZmYgLS1naXQgYS9mcy9hZnMvc2VydmVyLmMgYi9mcy9hZnMvc2VydmVyLmNcbmluZGV4IDBmZTE2MmVhMmEzNmQuLjE4OTEzOGJkNmQ3MTIgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvc2VydmVyLmNcbisrKyBiL2ZzL2Fmcy9zZXJ2ZXIuY1xuQEAgLTI0Miw3ICsyNDIsNiBAQCBzdHJ1Y3QgYWZzX3NlcnZlciAqYWZzX2xvb2t1cF9zZXJ2ZXIoc3RydWN0IGFmc19jZWxsICpjZWxsLCBzdHJ1Y3Qga2V5ICprZXksXG4gb3V0OlxuIFx0YWZzX3B1dF9hZGRybGlzdChhbGlzdCwgYWZzX2FsaXN0X3RyYWNlX3B1dF9zZXJ2ZXJfY3JlYXRlKTtcbiBcdGlmIChjYW5kaWRhdGUpIHtcbi1cdFx0a2ZyZWUocmN1X2FjY2Vzc19wb2ludGVyKHNlcnZlci1cdTAwM2VlbmRwb2ludF9zdGF0ZSkpO1xuIFx0XHRrZnJlZShjYW5kaWRhdGUpO1xuIFx0XHRhZnNfZGVjX3NlcnZlcnNfb3V0c3RhbmRpbmcoY2VsbC1cdTAwM2VuZXQpO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTIuMzA2NjU3ODk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyNDcwMTg5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKipcblxuT2theSwgbGV0J3MgYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbmVlZCB0byBmaXJlIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBvciBpZiBzdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHdpbGwgZG8gdGhlIHRyaWNrLiBXZSBoYXZlIGEgY2hhbmdlIGluIGBmcy9hZnMvYWRkcl9saXN0LmNgIHRvIGNvbnNpZGVyLCBpdCBsb29rcyBsaWtlIGEgc2ltcGxlIGFkanVzdG1lbnQgdG8gdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYGFmc19zZXRfcGVlcl9hcHBkYXRhYCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBkaWcgaW50byB0aGUgZGV0YWlscy4gSSdsbCBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiBgYWZzX3NldF9wZWVyX2FwcGRhdGFgLiBJIHNob3VsZCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBza2lwcGluZyB0aGUgaXRlcmF0aW9uIGluIHRoZSBgZm9yYCBsb29wIGlmIGBwbmAgYW5kIGBwb2AgYXJlIHRoZSBzYW1lOyB0aGlzIGlzIHRoZSBrZXkgcGllY2UgdG8gdW5kZXJzdGFuZGluZyB3aGV0aGVyIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBhIG1lbW9yeSBzYWZldHkgaXNzdWUgdGhhdCBLTVNBTiBtaWdodCBwaWNrIHVwLiBJdCBzZWVtcyBsaWtlIGl0IHByZXZlbnRzIHNvbWUgb2YgdGhlIGl0ZXJhdGlvbiBpbiB0aGUgbG9vcCBpZiBgcG5gIGFuZCBgcG9gIGFyZSB0aGUgc2FtZS4gTm93IEkgaGF2ZSB0byBkZXRlcm1pbmUgd2hhdCBgcG5gIGFuZCBgcG9gIGFyZSBhbmQgaWYgdGhleSBhcmUgZXZlciBOVUxMLCBvciBob3cgdGhleSBhcmUgc2V0LiBBIHN0YW5kYXJkIEtBU0FOIGNoZWNrIGlzIGxpa2VseSB0byBkZXRlY3QgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpZiBwcmVzZW50LCBidXQgc2luY2UgdGhlc2UgbG9vayBsaWtlIHBlZXJzLCBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIG1heSBiZSBhbiBvcHBvcnR1bml0eSBmb3IgYSBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyB3aGF0IEkgbmVlZCB0byB3YXRjaCBvdXQgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTkuNTUzNjc5NTg1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9hZGRyX2xpc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzODA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODE6XFx0XFx0fVxcbiAzODI6XFx0XFx0aWYgKCFuZXdfYWxpc3QpIHtcXG4gMzgzOlxcdFxcdFxcdC8qIERlYWQgc2VydmVyLiAgSnVzdCByZW1vdmUgYWxsLiAqL1xcbiAzODQ6XFx0XFx0XFx0Zm9yICg7IG8gXFx1MDAzYyBvbGRfYWxpc3QtXFx1MDAzZW5yX2FkZHJzOyBvKyspXFxuIDM4NTpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShvbGRfYWxpc3QtXFx1MDAzZWFkZHJzW29dLnBlZXIsIDApO1xcbiAzODY6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODc6XFx0XFx0fVxcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiBXYWxrIHRocm91Z2ggdGhlIHR3byBsaXN0cyBzaW11bHRhbmVvdXNseSwgc2V0dGluZyBuZXcgcGVlcnMgYW5kXFxuIDM5MDpcXHRcXHQgKiBjbGVhcmluZyBvbGQgb25lcy4gIFRoZSB0d28gbGlzdHMgYXJlIG9yZGVyZWQgYnkgcG9pbnRlciB0byBwZWVyXFxuIDM5MTpcXHRcXHQgKiByZWNvcmQuXFxuIDM5MjpcXHRcXHQgKi9cXG4gMzkzOlxcdFxcdHdoaWxlIChuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRycyBcXHUwMDI2XFx1MDAyNiBvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRycykge1xcbiAzOTQ6XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBuID0gbmV3X2FsaXN0LVxcdTAwM2VhZGRyc1tuXS5wZWVyO1xcbiAzOTU6XFx0XFx0XFx0c3RydWN0IHJ4cnBjX3BlZXIgKnBvID0gb2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyO1xcbiAzOTY6XFx0XFxuIDM5NzpcXHRcXHRcXHRpZiAocG4gPT0gcG8pIHtcXG4gMzk4OlxcdFxcdFxcdFxcdG4rKztcXG4gMzk5OlxcdFxcdFxcdFxcdG8rKztcXG4gNDAwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA0MDE6XFx0XFx0XFx0fVxcbiA0MDI6XFx0XFx0XFx0aWYgKHBuIFxcdTAwM2MgcG8pIHtcXG4gNDAzOlxcdFxcdFxcdFxcdHJ4cnBjX2tlcm5lbF9zZXRfcGVlcl9kYXRhKHBuLCBkYXRhKTtcXG4gNDA0OlxcdFxcdFxcdFxcdG4rKztcXG4gNDA1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDQwNjpcXHRcXHRcXHRcXHRyeHJwY19rZXJuZWxfc2V0X3BlZXJfZGF0YShwbywgMCk7XFxuIDQwNzpcXHRcXHRcXHRcXHRvKys7XFxuIDQwODpcXHRcXHRcXHR9XFxuIDQwOTpcXHRcXHR9XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdGlmIChuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRycylcXG4gNDEyOlxcdFxcdFxcdGZvciAoOyBuIFxcdTAwM2MgbmV3X2FsaXN0LVxcdTAwM2Vucl9hZGRyczsgbisrKVxcbiA0MTM6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEobmV3X2FsaXN0LVxcdTAwM2VhZGRyc1tuXS5wZWVyLCBkYXRhKTtcXG4gNDE0OlxcdFxcdGlmIChvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRycylcXG4gNDE1OlxcdFxcdFxcdGZvciAoOyBvIFxcdTAwM2Mgb2xkX2FsaXN0LVxcdTAwM2Vucl9hZGRyczsgbysrKVxcbiA0MTY6XFx0XFx0XFx0XFx0cnhycGNfa2VybmVsX3NldF9wZWVyX2RhdGEob2xkX2FsaXN0LVxcdTAwM2VhZGRyc1tvXS5wZWVyLCAwKTtcXG4gNDE3OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDU6NTkuNTUzNzUwNjc1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MDQ3NTA2OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIEFGUzogQ2F0Y2hpbmcgYW4gSW5maW5pdGUgTG9vcCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIG92ZXIgdGhpcyBBRlMgY29kZSwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyBhIGNsYXNzaWM6IGEgbmFzdHkgaW5maW5pdGUgbG9vcCBpbiBgZnMvYWZzL2FkZHJfbGlzdC5jYC4gVGhlIHJvb3QgY2F1c2U/IGBwbmAgYW5kIGBwb2AgZW5kIHVwIGJlaW5nIHRoZSBzYW1lIHZhbHVlLCBidXQgbmVpdGhlciBgbmAgbm9yIGBvYCBhcmUgaW5jcmVtZW50ZWQsIHdoaWNoIG1lYW5zIHRoZSBsb29wIHdpbGwgbmV2ZXIgdGVybWluYXRlLiAgVGhhdCdzIGEgZ3VhcmFudGVlZCBoYW5nLCBhIHRvdGFsIHNvZnRsb2NrdXAg4oCTIGNyaXRpY2FsISBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IGFkZHJlc3NlZCBpbiB0aGUgZml4LlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gdGhlIG5leHQgc2V0IG9mIGNoYW5nZXMuICBXZSBoYXZlIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEknbGwgc3RhcnQgYnkgZGl2aW5nIGludG8gYGZzL2Fmcy9kaXJfZWRpdC5jYCBmaXJzdCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjAzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDIuMjU4NTA0MTkyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9kaXJfZWRpdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyNTpcXHRcXHRcXHQvKiBEaWRuJ3QgZmluZCB0aGUgZGlyZW50IHRvIGNsb2JiZXIuICBSZS1kb3dubG9hZC4gKi9cXG4gNDI2OlxcdFxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX25vZW50LFxcbiA0Mjc6XFx0XFx0XFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQyODpcXHRcXHRcXHRhZnNfaW52YWxpZGF0ZV9kaXIodm5vZGUsIGFmc19kaXJfaW52YWxpZF9lZGl0X3JlbV93cm9uZ19uYW1lKTtcXG4gNDI5OlxcdFxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiA0MzA6XFx0XFx0fVxcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRlbnRyeSA9IGZvdW5kO1xcbiA0MzM6XFx0XFx0YiAgICA9IGVudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQzNDpcXHRcXHRzbG90ID0gZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDM1OlxcdFxcbiA0MzY6XFx0XFx0YmxvY2sgPSBhZnNfZGlyX2ZpbmRfYmxvY2soXFx1MDAyNml0ZXIsIGIpO1xcbiA0Mzc6XFx0XFx0aWYgKCFibG9jaylcXG4gNDM4OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQzOTpcXHRcXHRpZiAoIXRlc3RfYml0KEFGU19WTk9ERV9ESVJfVkFMSUQsIFxcdTAwMjZ2bm9kZS1cXHUwMDNlZmxhZ3MpKVxcbiA0NDA6XFx0XFx0XFx0Z290byBhbHJlYWR5X2ludmFsaWRhdGVkO1xcbiA0NDE6XFx0XFxuIDQ0MjpcXHRcXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xcbiA0NDM6XFx0XFx0ZGUgPSBcXHUwMDI2YmxvY2stXFx1MDAzZWRpcmVudHNbc2xvdF07XFxuIDQ0NDpcXHRcXHRpZiAoZGUtXFx1MDAzZXUudmFsaWQgIT0gMSlcXG4gNDQ1OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQ0NjpcXHRcXG4gNDQ3OlxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlLCBiLCBzbG90LFxcbiA0NDg6XFx0XFx0XFx0XFx0ICAgbnRvaGwoZGUtXFx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cXHUwMDNldS51bmlxdWUpLFxcbiA0NDk6XFx0XFx0XFx0XFx0ICAgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdC8qIEFkanVzdCB0aGUgYml0bWFwLiAqL1xcbiA0NTI6XFx0XFx0YWZzX2NsZWFyX2NvbnRpZ19iaXRzKGJsb2NrLCBzbG90LCBpdGVyLm5yX3Nsb3RzKTtcXG4gNDUzOlxcdFxcbiA0NTQ6XFx0XFx0LyogQWRqdXN0IHRoZSBhbGxvY2F0aW9uIGNvdW50ZXIuICovXFxuIDQ1NTpcXHRcXHRpZiAoYiBcXHUwMDNjIEFGU19ESVJfQkxPQ0tTX1dJVEhfQ1RSKVxcbiA0NTY6XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWV0YS5hbGxvY19jdHJzW2JdICs9IGl0ZXIubnJfc2xvdHM7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xcbiA0NTk6XFx0XFx0bmV4dCA9IGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gNDYwOlxcdFxcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcXG4gNDYxOlxcdFxcbiA0NjI6XFx0XFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVxcdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxcbiA0NjM6XFx0XFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCdzIHNsb3QgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeS5cXG4gNDY0OlxcdFxcdCAqL1xcbiA0NjU6XFx0XFx0aWYgKCFpdGVyLnByZXZfZW50cnkpIHtcXG4gNDY2OlxcdFxcdFxcdF9fYmUxNiBwcmV2X25leHQgPSBtZXRhLVxcdTAwM2VtZXRhLmhhc2h0YWJsZVtpdGVyLmJ1Y2tldF07XFxuIDQ2NzpcXHRcXG4gNDY4OlxcdFxcdFxcdGlmICh1bmxpa2VseShwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSkge1xcbiA0Njk6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgaGVhZCBvZiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiA0NzA6XFx0XFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiA0NzE6XFx0XFx0XFx0XFx0XFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcXG4gNDcyOlxcdFxcdFxcdFxcdFxcdG5hbWUtXFx1MDAzZWxlbiwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ3MzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NzQ6XFx0XFx0XFx0fVxcbiA0NzU6XFx0XFx0XFx0bWV0YS1cXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdID0gbmV4dDtcXG4gNDc2OlxcdFxcdH0gZWxzZSB7XFxuIDQ3NzpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcGIgPSBpdGVyLnByZXZfZW50cnkgLyBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDc4OlxcdFxcdFxcdHVuc2lnbmVkIGludCBwcyA9IGl0ZXIucHJldl9lbnRyeSAlIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xcbiA0Nzk6XFx0XFx0XFx0X19iZTE2IHByZXZfbmV4dDtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0XFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBwYik7XFxuIDQ4MjpcXHRcXHRcXHRpZiAoIXBibG9jaylcXG4gNDgzOlxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIDQ4NDpcXHRcXHRcXHRwZGUgPSBcXHUwMDI2cGJsb2NrLVxcdTAwM2VkaXJlbnRzW3BzXTtcXG4gNDg1OlxcdFxcdFxcdHByZXZfbmV4dCA9IHBkZS1cXHUwMDNldS5oYXNoX25leHQ7XFxuIDQ4NjpcXHRcXHRcXHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xcbiA0ODc6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcXFwiLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcXG4gNDkwOlxcdFxcdFxcdFxcdFxcdG5hbWUtXFx1MDAzZWxlbiwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDQ5MTpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0OTI6XFx0XFx0XFx0fVxcbiA0OTM6XFx0XFx0XFx0cGRlLVxcdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XFxuIDQ5NDpcXHRcXHR9XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdG5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUpO1xcbiA0OTc6XFx0XFxuIDQ5ODpcXHRcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KFxcdTAwMjZ2bm9kZS1cXHUwMDNlbmV0ZnMuaW5vZGUsIHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uKTtcXG4gNDk5OlxcdFxcdGFmc19zdGF0X3Yodm5vZGUsIG5fZGlyX3JtKTtcXG4gNTAwOlxcdFxcdF9kZWJ1ZyhcXFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXFxcIiwgbmFtZS1cXHUwMDNlbmFtZSwgYiwgc2xvdCk7XFxuIDUwMTpcXHRcXG4gNTAyOlxcdG91dF91bm1hcDpcXG4gNTAzOlxcdFxcdGFmc19kaXJfZW5kX2l0ZXIoXFx1MDAyNml0ZXIpO1xcbiA1MDQ6XFx0XFx0a3VubWFwX2xvY2FsKG1ldGEpO1xcbiA1MDU6XFx0XFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gNTA2OlxcdFxcdHJldHVybjtcXG4gNTA3OlxcdFxcbiA1MDg6XFx0YWxyZWFkeV9pbnZhbGlkYXRlZDpcXG4gNTA5OlxcdFxcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxcbiA1MTA6XFx0XFx0XFx0XFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cXHUwMDNlbmFtZSk7XFxuIDUxMTpcXHRcXHRnb3RvIG91dF91bm1hcDtcXG4gNTEyOlxcdFxcbiA1MTM6XFx0ZXJyb3I6XFxuIDUxNDpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDIuMjU4NjAyMzUyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxMzAxNDg0MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEFGUyBDb2RlOiBCbG9jayBJdGVyYXRpb24gYW5kIFNlcnZlciBQcm9iaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgZnMvYWZzL2Rpcl9lZGl0LmNgLCBpdCBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGhvdyB3ZSB3ZXJlIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgYGJsb2NrYCBhbmQgYHBibG9ja2AgdXNpbmcgdGhlIGBpdGVyYCBzdHJ1Y3QuIFdlIHVzZWQgdG8gY2FsbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgZGlyZWN0bHksIGJ1dCBpdCB3YXMgcG9zc2libGUgdGhhdCBgaXRlci5ibG9ja2AgbWlnaHQgaGF2ZSBiZWVuIGxlZnQgaW4gYSBiYWQgc3RhdGXigJRlaXRoZXIgc3RpbGwgc2V0IGFmdGVyIHVzZSBvciB1bm1hcHBlZCBhdCB0aGUgd3JvbmcgdGltZSwgb3IgcGVyaGFwcyBldmVuIHVubWFwcGVkIHR3aWNlISBUaGUgaW50cm9kdWN0aW9uIG9mIGBhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpYCBpcyBzbWFydC4gSXQgY2VudHJhbGl6ZXMgdGhlIGBrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jaylgIGNhbGwgYW5kIGFsc28gY2xlYXJzIGBpdGVyLVx1MDAzZWJsb2NrID0gTlVMTGAuIFRoaXMgaXMgYSBtdWNoIGNsZWFuZXIgYXBwcm9hY2gsIGVuc3VyaW5nIHRoZSB1bm1hcHBpbmcgYW5kIGNsZWFyaW5nIG9jY3VyIGNvbnNpc3RlbnRseSBhdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIG9yIG9uIGVycm9yIHZpYSB0aGUgYG91dF91bm1hcGAgbGFiZWwuIFRoaXMgc2hvdWxkIHByZXZlbnQgdGhvc2UgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCBJIGxpa2UgdGhpcyFcblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIG1vdmUgb3ZlciB0byBgZnMvYWZzL2ZzX3Byb2JlLmNgLiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMjU4LiBJdCBsb29rcyBsaWtlIGl0IGRlYWxzIHdpdGggYGFmc19mc19wcm9iZV9maWxlc2VydmVyYC4gVGhlIGRpZmYgc2hvd3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYG9sZF9hbGlzdGAgdmFyaWFibGUuIEl0IHNlZW1zIGxpa2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhIHBvdGVudGlhbGx5IHJlZHVuZGFudCBhc3NpZ25tZW50LiBMZXQgbWUgZGlnIGludG8gaXQgYW5kIHNlZSB3aGF0IHRoZSBjb250ZXh0IGlzLiBTZWVtcyB3ZSBhcmUgY29weWluZyBzb21lIHN0YXRlIHRvIGBlc3RhdGVgLiBUaGUgbmV3IGxpbmUgc3VnZ2VzdHMgc29tZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGBuZXdfYWxpc3RgIGlmIHRoZSBgb2xkYCBzZXJ2ZXIgaXMgbm90IGNoYW5naW5nLiBUaGlzIG9wdGltaXphdGlvbiBtYXkgYmUgbW9yZSBwZXJmb3JtYW50IHRoYW4gYSBjb21wbGV0ZSByZXBsYWNlLiBMZXQncyBzZWUgaG93IHRoaXMgYWZmZWN0cyBvdmVyYWxsIHBlcmZvcm1hbmNlLCBidXQgaXQgYXBwZWFycyBzb3VuZCBzbyBmYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxMTksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjowOC4zODg3NTQxMDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2Fmcy9mc19wcm9iZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHR7XFxuIDI0MTpcXHRcXHRzdHJ1Y3QgYWZzX2VuZHBvaW50X3N0YXRlICplc3RhdGUsICpvbGQ7XFxuIDI0MjpcXHRcXHRzdHJ1Y3QgYWZzX2FkZHJfbGlzdCAqb2xkX2FsaXN0ID0gTlVMTCwgKmFsaXN0O1xcbiAyNDM6XFx0XFx0dW5zaWduZWQgbG9uZyB1bnByb2JlZDtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0X2VudGVyKFxcXCIlcFVcXFwiLCBcXHUwMDI2c2VydmVyLVxcdTAwM2V1dWlkKTtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0ZXN0YXRlID0ga3phbGxvY19vYmooKmVzdGF0ZSk7XFxuIDI0ODpcXHRcXHRpZiAoIWVzdGF0ZSlcXG4gMjQ5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmVzdGF0ZS1cXHUwMDNlcmVmLCAyKTtcXG4gMjUyOlxcdFxcdGVzdGF0ZS1cXHUwMDNlc2VydmVyX2lkID0gc2VydmVyLVxcdTAwM2VkZWJ1Z19pZDtcXG4gMjUzOlxcdFxcdGVzdGF0ZS1cXHUwMDNlcnR0ID0gVUlOVF9NQVg7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNnNlcnZlci1cXHUwMDNlZnNfbG9jayk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdG9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc2VydmVyLVxcdTAwM2VlbmRwb2ludF9zdGF0ZSxcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2c2VydmVyLVxcdTAwM2Vmc19sb2NrKSk7XFxuIDI1OTpcXHRcXHRpZiAob2xkKSB7XFxuIDI2MDpcXHRcXHRcXHRlc3RhdGUtXFx1MDAzZXJlc3BvbnNpdmVfc2V0ID0gb2xkLVxcdTAwM2VyZXNwb25zaXZlX3NldDtcXG4gMjYxOlxcdFxcdFxcdG9sZF9hbGlzdCA9IG9sZC1cXHUwMDNlYWRkcmVzc2VzO1xcbiAyNjI6XFx0XFx0XFx0aWYgKCFuZXdfYWxpc3QpXFxuIDI2MzpcXHRcXHRcXHRcXHRuZXdfYWxpc3QgPSBvbGQtXFx1MDAzZWFkZHJlc3NlcztcXG4gMjY0OlxcdFxcdH1cXG4gMjY1OlxcdFxcbiAyNjY6XFx0XFx0aWYgKG9sZF9hbGlzdCAhPSBuZXdfYWxpc3QpXFxuIDI2NzpcXHRcXHRcXHRhZnNfc2V0X3BlZXJfYXBwZGF0YShzZXJ2ZXIsIG9sZF9hbGlzdCwgbmV3X2FsaXN0KTtcXG4gMjY4OlxcdFxcbiAyNjk6XFx0XFx0ZXN0YXRlLVxcdTAwM2VhZGRyZXNzZXMgPSBhZnNfZ2V0X2FkZHJsaXN0KG5ld19hbGlzdCwgYWZzX2FsaXN0X3RyYWNlX2dldF9lc3RhdGUpO1xcbiAyNzA6XFx0XFx0YWxpc3QgPSBlc3RhdGUtXFx1MDAzZWFkZHJlc3NlcztcXG4gMjcxOlxcdFxcdGVzdGF0ZS1cXHUwMDNlcHJvYmVfc2VxID0gKytzZXJ2ZXItXFx1MDAzZXByb2JlX2NvdW50ZXI7XFxuIDI3MjpcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZlc3RhdGUtXFx1MDAzZW5yX3Byb2JpbmcsIGFsaXN0LVxcdTAwM2Vucl9hZGRycyk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdGlmIChuZXdfYWxpc3QpXFxuIDI3NTpcXHRcXHRcXHRzZXJ2ZXItXFx1MDAzZWFkZHJfdmVyc2lvbiA9IG5ld19hbGlzdC1cXHUwMDNldmVyc2lvbjtcXG4gMjc2OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlLCBlc3RhdGUpO1xcbiAyNzc6XFx0XFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZzX2xvY2spO1xcbiAyNzg6XFx0XFx0aWYgKG9sZClcXG4gMjc5OlxcdFxcdFxcdHNldF9iaXQoQUZTX0VTVEFURV9TVVBFUlNFREVELCBcXHUwMDI2b2xkLVxcdTAwM2VmbGFncyk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHRyYWNlX2Fmc19lc3RhdGUoZXN0YXRlLVxcdTAwM2VzZXJ2ZXJfaWQsIGVzdGF0ZS1cXHUwMDNlcHJvYmVfc2VxLCByZWZjb3VudF9yZWFkKFxcdTAwMjZlc3RhdGUtXFx1MDAzZXJlZiksXFxuIDI4MjpcXHRcXHRcXHRcXHQgYWZzX2VzdGF0ZV90cmFjZV9hbGxvY19wcm9iZSk7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdGFmc19nZXRfYWRkcmVzc19wcmVmZXJlbmNlcyhuZXQsIG5ld19hbGlzdCk7XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdHNlcnZlci1cXHUwMDNlcHJvYmVkX2F0ID0gamlmZmllcztcXG4gMjg3OlxcdFxcdHVucHJvYmVkID0gKDFVTCBcXHUwMDNjXFx1MDAzYyBhbGlzdC1cXHUwMDNlbnJfYWRkcnMpIC0gMTtcXG4gMjg4OlxcdFxcdHdoaWxlICh1bnByb2JlZCkge1xcbiAyODk6XFx0XFx0XFx0dW5zaWduZWQgaW50IGluZGV4ID0gMCwgaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDg6MDY6MDguMzg4ODk4MzQ1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MTAzNTkyMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFGUyBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmcy9hZnMvZnNfcHJvYmUuY2AuIEkgaW1tZWRpYXRlbHkgc3BvdCBhIHBvdGVudGlhbCBwcm9ibGVtIHdpdGggaG93IGBvbGRfYWxpc3RgIGlzIGJlaW5nIGhhbmRsZWQuIEkgc2VlIGl0J3MgaW5pdGlhbGl6ZWQgdG8gYE5VTExgLCB3aGljaCBpcyBmaW5lLCBidXQgdGhlbiB3aXRoaW4gdGhlIGBpZiAob2xkKWAgYmxvY2ssIHRoZSBjcnVjaWFsIGFzc2lnbm1lbnQgb2YgYG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXNgIHNlZW1zIHRvIGJlIG1pc3NpbmcuIFRoYXQgbWVhbnMgYG9sZF9hbGlzdGAgb25seSBnZXRzIGEgdmFsaWQgYWRkcmVzcyBsaXN0IGlmIHNvbWV0aGluZyBlbHNlIHNldHMgaXQgZmlyc3QuIE90aGVyd2lzZSwgaXQgc3RheXMgYE5VTExgLiBUaGlzIG92ZXJzaWdodCBoYXMgc29tZSBzZXJpb3VzIGltcGxpY2F0aW9ucy5cblxuTm93LCBiZWNhdXNlIGBvbGRfYWxpc3RgIGNvdWxkIHJlbWFpbiBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBvbGRfYWxpc3QgIT0gbmV3X2FsaXN0YCBpcyB3aGVyZSB0aGluZ3MgYnJlYWsgZG93bi4gVGhlIGNvZGUgdHJlYXRzICphbGwqIG9sZCBwZWVycyBhcyBcIm5vbi1leGlzdGVudFwiIGJlY2F1c2UgYG9sZF9hbGlzdGAgaXMsIGluIGVmZmVjdCwgYWx3YXlzIGBOVUxMYCBpbiB0aGF0IHNjZW5hcmlvLiBUaGlzIHRoZW4gdHJpZ2dlcnMgdGhlIGxvZ2ljIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgdG8gYmVoYXZlIGluY29ycmVjdGx5LCB3aGljaCBpcyBvYnZpb3VzbHkgbm90IHdoYXQgd2Ugd2FudC5cblxuSSdsbCBzaGlmdCBteSBhdHRlbnRpb24gdG8gYGZzL2Fmcy9zZXJ2ZXIuY2Agbm93IHRvIHNlZSB3aGF0IGVsc2UgY291bGQgYmUgaW5mbHVlbmNpbmcgdGhlIHNpdHVhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgYXJvdW5kIGxpbmUgMjQyLiBBaCwgdGhlcmUgaXQgaXMuIExvb2tpbmcgYXQgdGhpcyBibG9jayBvZiBjb2RlLCBJJ20gbm90aWNpbmcgYW4gaW50ZXJlc3RpbmcgY2FsbCB0byBga2ZyZWUoKWAgd2l0aCBhIHBvaW50ZXIgcmVsYXRlZCB0byBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYC4gSXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY2xlYW51cCBoYXBwZW5pbmcsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGlmIHRoaXMgcmVsYXRlcyB0byBob3cgdGhlIHNlcnZlciBlbmRwb2ludHMgYXJlIG1hbmFnZWQuIEknbGwgbmVlZCB0byBleGFtaW5lIGhvdyBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYCBpcyBiZWluZyBoYW5kbGVkIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtLCB0byBzZWUgaWYgdGhlIG1pc3NpbmcgYXNzaWdubWVudCBpcyBjb25uZWN0ZWQgdG8gdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjoxMS44OTkyNjAxOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL3NlcnZlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHR1cF93cml0ZShcXHUwMDI2Y2VsbC1cXHUwMDNlZnNfbG9jayk7XFxuIDIyMTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2c2VydmVyLVxcdTAwM2V0aW1lcik7XFxuIDIyMjpcXHRcXG4gMjIzOlxcdFxcdC8qIElmIHdlIGdldCB0byBjcmVhdGUgdGhlIHNlcnZlciwgd2UgbG9vayB1cCB0aGUgYWRkcmVzc2VzIGFuZCB0aGVuXFxuIDIyNDpcXHRcXHQgKiBpbW1lZGlhdGVseSBkaXNwYXRjaCBhbiBhc3luY2hyb25vdXMgcHJvYmUgdG8gZWFjaCBpbnRlcmZhY2Ugb24gdGhlXFxuIDIyNTpcXHRcXHQgKiBmaWxlc2VydmVyLiAgVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgcmVwZWF0LXByb2Jpbmcgc2VydmljZSBpc1xcbiAyMjY6XFx0XFx0ICogc3RhcnRlZC5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKGNyZWF0aW5nKSB7XFxuIDIyOTpcXHRcXHRcXHRhbGlzdCA9IGFmc192bF9sb29rdXBfYWRkcnMoc2VydmVyLCBrZXkpO1xcbiAyMzA6XFx0XFx0XFx0aWYgKElTX0VSUihhbGlzdCkpIHtcXG4gMjMxOlxcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoYWxpc3QpO1xcbiAyMzI6XFx0XFx0XFx0XFx0Z290byBjcmVhdGVfZmFpbGVkO1xcbiAyMzM6XFx0XFx0XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRcXHRyZXQgPSBhZnNfZnNfcHJvYmVfZmlsZXNlcnZlcihjZWxsLVxcdTAwM2VuZXQsIHNlcnZlciwgYWxpc3QsIGtleSk7XFxuIDIzNjpcXHRcXHRcXHRpZiAocmV0KVxcbiAyMzc6XFx0XFx0XFx0XFx0Z290byBjcmVhdGVfZmFpbGVkO1xcbiAyMzg6XFx0XFxuIDIzOTpcXHRcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoQUZTX1NFUlZFUl9GTF9DUkVBVElORywgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpO1xcbiAyNDA6XFx0XFx0fVxcbiAyNDE6XFx0XFxuIDI0MjpcXHRvdXQ6XFxuIDI0MzpcXHRcXHRhZnNfcHV0X2FkZHJsaXN0KGFsaXN0LCBhZnNfYWxpc3RfdHJhY2VfcHV0X3NlcnZlcl9jcmVhdGUpO1xcbiAyNDQ6XFx0XFx0aWYgKGNhbmRpZGF0ZSkge1xcbiAyNDU6XFx0XFx0XFx0a2ZyZWUoY2FuZGlkYXRlKTtcXG4gMjQ2OlxcdFxcdFxcdGFmc19kZWNfc2VydmVyc19vdXRzdGFuZGluZyhjZWxsLVxcdTAwM2VuZXQpO1xcbiAyNDc6XFx0XFx0fVxcbiAyNDg6XFx0XFx0cmV0dXJuIHNlcnZlciA/OiBFUlJfUFRSKHJldCk7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdHdhaXRfZm9yX2NyZWF0aW9uOlxcbiAyNTE6XFx0XFx0YWZzX3NlZV9zZXJ2ZXIoc2VydmVyLCBhZnNfc2VydmVyX3RyYWNlX3dhaXRfY3JlYXRlKTtcXG4gMjUyOlxcdFxcdHdhaXRfb25fYml0KFxcdTAwMjZzZXJ2ZXItXFx1MDAzZWZsYWdzLCBBRlNfU0VSVkVSX0ZMX0NSRUFUSU5HLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuIDI1MzpcXHRcXHRpZiAodGVzdF9iaXRfYWNxdWlyZShBRlNfU0VSVkVSX0ZMX1VOQ1JFQVRFRCwgXFx1MDAyNnNlcnZlci1cXHUwMDNlZmxhZ3MpKSB7XFxuIDI1NDpcXHRcXHRcXHQvKiBCYXJyaWVyOiByZWFkIGZsYWcgYmVmb3JlIGVycm9yICovXFxuIDI1NTpcXHRcXHRcXHRyZXQgPSBSRUFEX09OQ0Uoc2VydmVyLVxcdTAwM2VjcmVhdGVfZXJyb3IpO1xcbiAyNTY6XFx0XFx0XFx0YWZzX3B1dF9zZXJ2ZXIoY2VsbC1cXHUwMDNlbmV0LCBzZXJ2ZXIsIGFmc19zZXJ2ZXJfdHJhY2VfdW51c2VfY3JlYXRlX2ZhaWwpO1xcbiAyNTc6XFx0XFx0XFx0c2VydmVyID0gTlVMTDtcXG4gMjU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAyNTk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwODowNjoxMS44OTk0MDU0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDE2ODAwMDQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUZTIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGZzL2Fmcy9zZXJ2ZXIuY2AsIEkgaWRlbnRpZmllZCBhbmQgcmVtb3ZlZCBhIG5hc3R5IGBrZnJlZWAgY2FsbCBvbiBgc2VydmVyLVx1MDAzZWVuZHBvaW50X3N0YXRlYCBkdXJpbmcgdGhlIGNsZWFudXAgcGF0aCBvZiBgYWZzX2xvb2t1cF9zZXJ2ZXJgLiBUaGF0IHdhcyBhIHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIGJlY2F1c2UgdGhhdCBwYXJ0aWN1bGFyIHBvaW50ZXIgc2hvdWxkbid0IGhhdmUgYmVlbiBmcmVlZCB0aGVyZSwgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29uZGl0aW9ucyB3aGVyZSB0aGUgY2FuZGlkYXRlIHNlcnZlciB3YXNuJ3QgZXZlbiBiZWluZyB1c2VkIG9yIGNvdWxkIGhhdmUgYmVlbiBhbm90aGVyIHNlcnZlci4gQSBjcml0aWNhbCBvdmVyc2lnaHQsIHRoYW5rZnVsbHkgY2F1Z2h0LlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzOlxuXG4xLiAgKipgZnMvYWZzL2FkZHJfbGlzdC5jYCoqOiBGaXhlZCBhbiBpbmZpbml0ZSBsb29wIGluIGBhZnNfc2V0X3BlZXJfYXBwZGF0YSgpYCBieSBjb3JyZWN0bHkgaW5jcmVtZW50aW5nIHRoZSBsb29wIGluZGljZXMgKGBuYCBhbmQgYG9gKSB3aGVuIHRoZSBwZWVyIHBvaW50ZXJzIChgcG5gIGFuZCBgcG9gKSBtYXRjaC4gU2ltcGxlIGJ1dCBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHNvZnRsb2Nrcy5cbjIuICAqKmBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYGZzL2Fmcy9pbnRlcm5hbC5oYCoqOiBTdHJlYW1saW5lZCB0aGUgYGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKWAgY2FsbCBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uIGBhZnNfZGlyX2VuZF9pdGVyKFx1MDAyNml0ZXIpYC4gVGhpcyBhdm9pZHMgaW1wcm9wZXIgdW5tYXBwaW5nL25lc3Rpbmcgb2YgdGhlIGxvY2FsIGttYXAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3RhYmlsaXR5IHByb2JsZW1zLiBHb29kIGZvciBjb2RlIGh5Z2llbmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LlxuMy4gICoqYGZzL2Fmcy9mc19wcm9iZS5jYCoqOiBDb3JyZWN0ZWQgdGhlIGFzc2lnbm1lbnQgYG9sZF9hbGlzdCA9IG9sZC1cdTAwM2VhZGRyZXNzZXNgIHRvIGVuc3VyZSBwcm9wZXIgdHJhY2tpbmcgb2YgcGVlciBhcHBkYXRhIGNoYW5nZXMuIFRoaXMgd2FzIGZpeGluZyBhIGxvZ2ljIGJ1ZzsgaXQgZW5zdXJlcyBwcm9wZXIgdHJhY2tpbmcgb2YgdGhlIGBvbGQtXHUwMDNlYWRkcmVzc2VzYCBzdHJ1Y3QgZm9yIGZ1dHVyZSB1c2UuXG40LiAgKipgZnMvYWZzL3NlcnZlci5jYCoqOiBUaGUgY3JpdGljYWwgcmVtb3ZhbCBJIG1lbnRpb25lZCBlYXJsaWVyOiB0aGUgZXJyb25lb3VzIGBrZnJlZWAuIFRoYXQgb25lLCBpZiBub3QgY2F1Z2h0LCB3b3VsZCBoYXZlIGNhdXNlZCBzaWduaWZpY2FudCBtZW1vcnkgY29ycnVwdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBLTVNBTiBhcHBsaWNhYmlsaXR5LiBBcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXIgc3BhY2UgYmVpbmcgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXM/IExldCdzIHNlZTpcblxuKiAgICoqYGFmc19zZXRfcGVlcl9hcHBkYXRhYCoqOiBObywgdGhpcyBpcyBmaXhpbmcgbG9vcCBpdGVyYXRpb24gbG9naWMsIGRvZXNuJ3QgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgKipgYWZzX2Rpcl9lbmRfaXRlcmAqKjogTm8sIHRoaXMgaXMgYWxsIGFib3V0IHNhZmVseSB1bm1hcHBpbmcgZGlyZWN0b3J5IGl0ZXJhdG9yIHBhZ2UgYnVmZmVyczsgaXQncyBhIGNsZWFudXAsIG5vdCBpbnRyb2R1Y3Rpb24gb2YgbmV3IHVuaW5pdGlhbGl6ZWQgcmVhZHMuXG4qICAgKipgb2xkX2FsaXN0YCoqOiBObywgdGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBmaXggdG8gYW4gZXhpc3RpbmcgaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGBvbGQtXHUwMDNlYWRkcmVzc2VzYC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkuXG4qICAgKipga2ZyZWVgIHJlbW92YWwqKjogVGhpcyBpcyBmaXhpbmcgYW4gaW5jb3JyZWN0IGZyZWU7IGl0IHByZXZlbnRzIG1lbW9yeSBjb3JydXB0aW9uLiBObyBuZXcgdW5pbml0aWFsaXplZCBhY2Nlc3MgaXMgZXhwb3NlZCwgaW4gZmFjdCwgaXQgcHJvdGVjdHMgbWVtb3J5IGZyb20gYmVpbmcgaW1wcm9wZXJseSBmcmVlZC5cblxuRG9lcyBhbnkgcGFydCBvZiB0aGUgZGlmZiBoYW5kbGUgYGNvcHlfdG9fdXNlcmAsIGluZm8tbGVha3MsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGFsbG9jYXRpb25zPyBObywgbm9uZSBvZiB0aGVzZSBhcmVhcyB3ZXJlIHRvdWNoZWQuXG5cbkJ1Z3MgYWRkcmVzc2VkIG9yIHRvdWNoZWQ6XG5cbiogICBJbmZpbml0ZSBsb29wcy9zb2Z0bG9ja3MgLSBZRVMsIGBhZnNfc2V0X3BlZXJfYXBwZGF0YWAgZml4ZXMgYSBsb29wXG4qICAgUHJvcGVyIHVubWFwcGluZyBvZiBsb2NhbCBrbWFwcyAtIFlFUywgd2l0aCBgYWZzX2Rpcl9lbmRfaXRlcmBcbiogICBMb2dpYyBidWcgd2hlcmUgYG9sZF9hbGlzdGAgd2Fzbid0IHRyYWNrZWQgLSBZRVMsIGZpeGVkIGluIGBmc19wcm9iZS5jYFxuKiAgIEVycm9uZW91cyBkb3VibGUtZnJlZS91c2UtYWZ0ZXItZnJlZSAtIFlFUywgdGhlIGtleSBmaXggaW4gYHNlcnZlci5jYFxuXG5BbGwgdGhlIGJ1Z3MgSSBzZWUgYXJlIGxvZ2ljIGJ1Z3MsIHNvZnRsb2NrcywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3MgKFVBRiAvIGRvdWJsZSBmcmVlKS4gVGhlc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4vc3RhbmRhcmQgc2FuaXRpemVycy4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIGlzIGZhbHNlIGZvciB0aGlzIHBhdGNoLiBJJ2xsIGRvIGEgZmluYWwgZG91YmxlLWNoZWNrLCBidXQgdGhlIGFuYWx5c2lzIGlzIHNvdW5kLiBUaW1lIHRvIHNldCByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTMyLCJPdXRwdXRUb2tlbnMiOjMwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA4OjA2OjIyLjA2NzQwODYwMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHJlc3NlcyBzZXZlcmFsIGxvZ2ljIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW4gdGhlIEFGUyBzdWJzeXN0ZW06XFxuMS4gZnMvYWZzL2FkZHJfbGlzdC5jOiBGaXhlcyBhbiBpbmZpbml0ZSBsb29wIGluIGFmc19zZXRfcGVlcl9hcHBkYXRhKCkgYnkgaW5jcmVtZW50aW5nIGJvdGggcG9pbnRlcnMvaW5kaWNlcyB3aGVuIHBuID09IHBvLlxcbjIuIGZzL2Fmcy9kaXJfZWRpdC5jLCBmcy9hZnMvZGlyX3NlYXJjaC5jLCBmcy9hZnMvaW50ZXJuYWwuaDogQ29uc29saWRhdGVzIGxvY2FsIGttYXAgdW5tYXBwaW5nIGxvZ2ljIHVzaW5nIGFmc19kaXJfZW5kX2l0ZXIoKSBoZWxwZXIgdG8gZW5zdXJlIGNsZWFuIGFuZCBjb3JyZWN0IHVubWFwIG9wZXJhdGlvbnMgZHVyaW5nIGRpcmVjdG9yeSBlZGl0cy9zZWFyY2hlcy5cXG4zLiBmcy9hZnMvZnNfcHJvYmUuYzogSW5pdGlhbGl6ZXMgb2xkX2FsaXN0IGZyb20gb2xkLVxcdTAwM2VhZGRyZXNzZXMgZHVyaW5nIGZpbGVzZXJ2ZXIgcHJvYmluZy5cXG40LiBmcy9hZnMvc2VydmVyLmM6IFJlbW92ZXMgYW4gZXJyb25lb3VzIGtmcmVlKHJjdV9hY2Nlc3NfcG9pbnRlcihzZXJ2ZXItXFx1MDAzZWVuZHBvaW50X3N0YXRlKSkgaW4gYWZzX2xvb2t1cF9zZXJ2ZXIgZXJyb3IgY2xlYW51cCwgcHJldmVudGluZyBpbnZhbGlkL3ByZW1hdHVyZSBmcmVlIG9mIGVuZHBvaW50IHN0YXRlLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHZhbHVlcywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVha3MuIFBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBoZXJlIChzdWNoIGFzIGRvdWJsZSBmcmVlIC8gdXNlLWFmdGVyLWZyZWUgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzKSBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgdG9vbGluZy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[1] Phase: Succeeded StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 08:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 08:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2] Phase: Succeeded StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 08:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 08:06:33 +0000 UTC FinishedAt: 2026-09-03 08:06:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1141829223/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 08:06:43 +0000 UTC FinishedAt: 2026-09-03 08:23:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 08:06:43 +0000 UTC FinishedAt: 2026-09-03 08:23:52 +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:*355ca006-c7d7-4557-ac03-f2a41bf08a2f,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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1141829223/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": "2391b5a7-16da-446a-981e-4a7628e42039", "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-workflowmgrkn/series-workflowmgrkn-build-action-1120527613/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 08:06:43 +0000 UTC FinishedAt: 2026-09-03 08:23:42 +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:*355ca006-c7d7-4557-ac03-f2a41bf08a2f,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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1141829223/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": "2391b5a7-16da-446a-981e-4a7628e42039", "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-workflowmgrkn/series-workflowmgrkn-build-action-1120527613/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 08:23:52 +0000 UTC FinishedAt: 2026-09-03 08:23:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 08:23:52 +0000 UTC FinishedAt: 2026-09-03 08:23:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 08:23:52 +0000 UTC FinishedAt: 2026-09-03 08:24:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 08:23:52 +0000 UTC FinishedAt: 2026-09-03 08:23:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1440753686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 08:24:02 +0000 UTC FinishedAt: 2026-09-03 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 08:24:02 +0000 UTC FinishedAt: 2026-09-03 08:26:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2391b5a7-16da-446a-981e-4a7628e42039,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-workflowmgrkn/series-workflowmgrkn-build-action-1120527613/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-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 08:26:16 +0000 UTC FinishedAt: 2026-09-03 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 08:26:16 +0000 UTC FinishedAt: 2026-09-03 08:26:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 08:26:16 +0000 UTC FinishedAt: 2026-09-03 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 08:26:16 +0000 UTC FinishedAt: 2026-09-03 08:42:17 +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:*355ca006-c7d7-4557-ac03-f2a41bf08a2f,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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1440753686/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": "cf4d5e61-3dbd-4f68-970e-0027ca88bd74", "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-workflowmgrkn/series-workflowmgrkn-build-action-3220105498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 08:26:16 +0000 UTC FinishedAt: 2026-09-03 08:42:07 +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:*355ca006-c7d7-4557-ac03-f2a41bf08a2f,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-workflowmgrkn/series-workflowmgrkn-convert-artifact-1440753686/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": "cf4d5e61-3dbd-4f68-970e-0027ca88bd74", "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-workflowmgrkn/series-workflowmgrkn-build-action-3220105498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 08:42:17 +0000 UTC FinishedAt: 2026-09-03 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 08:42:17 +0000 UTC FinishedAt: 2026-09-03 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 08:42:17 +0000 UTC FinishedAt: 2026-09-03 08:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 08:42:17 +0000 UTC FinishedAt: 2026-09-03 08:44:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf4d5e61-3dbd-4f68-970e-0027ca88bd74,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-workflowmgrkn/series-workflowmgrkn-build-action-3220105498/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-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2391b5a7-16da-446a-981e-4a7628e42039,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf4d5e61-3dbd-4f68-970e-0027ca88bd74,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-workflowmgrkn/series-workflowmgrkn-build-action-1120527613/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-workflowmgrkn/series-workflowmgrkn-build-action-3220105498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 08:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 08:44:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmgrkn/series-workflowmgrkn-convert-artifact-3023450299/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 08:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 08:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 08:44:27 +0000 UTC FinishedAt: 2026-09-03 08:44:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 08:44:37 +0000 UTC FinishedAt: 2026-09-03 11:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgrkn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_dir_find_block","afs_dir_search_bucket","afs_edit_dir_remove","afs_fs_probe_fileserver","afs_lookup_server","afs_set_peer_appdata"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"87d66a91-d13e-485e-b271-d156a1ad1a91","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 08:44:37 +0000 UTC FinishedAt: 2026-09-03 11:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2391b5a7-16da-446a-981e-4a7628e42039,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cf4d5e61-3dbd-4f68-970e-0027ca88bd74,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-workflowmgrkn/series-workflowmgrkn-build-action-1120527613/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-workflowmgrkn/series-workflowmgrkn-build-action-3220105498/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-workflowmgrkn/series-workflowmgrkn-convert-artifact-3023450299/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,}