Name: series-workflow7w2hw Phase: Succeeded StartedAt: 2026-08-12 04:53:47 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[0] Phase: Succeeded StartedAt: 2026-08-12 04:53:47 +0000 UTC FinishedAt: 2026-08-12 05:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 04:53:47 +0000 UTC FinishedAt: 2026-08-12 05:36:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "2c628e67-627e-4614-85c7-763dcf4905ca" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "jbd2_journal_load", "ext4_fc_commit", "ext4_fc_init", "ext4_fc_replay_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtqYmQyX2pvdXJuYWxfbG9hZCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2luaXQmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDI5NGIxYmNjODhlNGU0M2U1ZTNlZGQwNzBhYzczMDQxMzE5N2I3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjM1OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNjA5Niw2ICYjNDM7NjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IHJlYWxseV9yZWFkX29ubHk7XG4gXHRpbnQgam91cm5hbF9kZXZfcm87XG4mIzQzO1x0Ym9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIWV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpKVxuIFx0XHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcbkBAIC02MTUyLDYgJiM0Mzs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdH1cbiBcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDt3cml0ZSBhY2Nlc3Mgd2lsbCBcJiMzNDtcbiBcdFx0XHQgICAgICAgXCYjMzQ7YmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcJiMzNDspO1xuJiM0MztcdFx0XHRlbmFibGVfd3JpdGUgPSB0cnVlO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjE2OCw3ICYjNDM7NjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdGlmIChzYXZlKVxuIFx0XHRcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICYjNDM7XG4gXHRcdFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXNcbiYjNDM7XHRcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxuJiM0MztcdFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XG4mIzQzO1x0XHQgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXlcbiYjNDM7XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxuJiM0MztcdFx0ICogeWV0LCBzbyBub3RoaW5nIGNhbiBvYnNlcnZlIHRoZSB0cmFuc2llbnQgc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChlbmFibGVfd3JpdGUpXG4mIzQzO1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2PSB+U0JfUkRPTkxZO1xuIFx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTtcbiYjNDM7XHRcdGlmIChlbmFibGVfd3JpdGUpXG4mIzQzO1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuIFx0XHRpZiAoc2F2ZSBcdTAwMjZcdTAwMjYgbWVtY21wKCgoY2hhciAqKSBlcykgJiM0MzsgRVhUNF9TX0VSUl9TVEFSVCxcbiBcdFx0XHRcdCAgIHNhdmUsIEVYVDRfU19FUlJfTEVOKSkge1xuIFx0XHRcdG1lbWNweSgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtqYmQyX2pvdXJuYWxfbG9hZCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2luaXQmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IG1vdW50L3JlY292ZXJ5IHBhdGggYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDU6MzU6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNjA5Niw2ICYjNDM7NjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlpbnQgZXJyID0gMDsKIAlpbnQgcmVhbGx5X3JlYWRfb25seTsKIAlpbnQgam91cm5hbF9kZXZfcm87CiYjNDM7CWJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSkKIAkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CkBAIC02MTUyLDYgJiM0Mzs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJfQogCQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgJiMzNDt3cml0ZSBhY2Nlc3Mgd2lsbCAmIzM0OwogCQkJICAgICAgICYjMzQ7YmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnkmIzM0Oyk7CiYjNDM7CQkJZW5hYmxlX3dyaXRlID0gdHJ1ZTsKIAkJfQogCX0KIApAQCAtNjE2OCw3ICYjNDM7NjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCWlmIChzYXZlKQogCQkJbWVtY3B5KHNhdmUsICgoY2hhciAqKSBlcykgJiM0MzsKIAkJCSAgICAgICBFWFQ0X1NfRVJSX1NUQVJULCBFWFQ0X1NfRVJSX0xFTik7CiYjNDM7CQkvKgomIzQzOwkJICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzCiYjNDM7CQkgKiAoc2VlIGV4dDRfZmNfcmVwbGF5KCkpIHdoaWNoIHJlZnVzZSB0byBydW4gb24gYSByZWFkLW9ubHkKJiM0MzsJCSAqIHN1cGVyYmxvY2suICBXZSBwcm9taXNlZCB3cml0ZSBhY2Nlc3MgYWJvdmUsIHNvIG1ha2UgdGhhdAomIzQzOwkJICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5CiYjNDM7CQkgKiBleHQ0X29ycGhhbl9jbGVhbnVwKCkgZG9lcy4gIFRoZSBzdXBlcmJsb2NrIGlzIG5vdCBwdWJsaXNoZWQKJiM0MzsJCSAqIHlldCwgc28gbm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgdHJhbnNpZW50IHN0YXRlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZW5hYmxlX3dyaXRlKQomIzQzOwkJCXNiLSZndDtzX2ZsYWdzICZhbXA7PSB+U0JfUkRPTkxZOwogCQllcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTsKJiM0MzsJCWlmIChlbmFibGVfd3JpdGUpCiYjNDM7CQkJc2ItJmd0O3NfZmxhZ3MgfD0gU0JfUkRPTkxZOwogCQlpZiAoc2F2ZSAmYW1wOyZhbXA7IG1lbWNtcCgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsCiAJCQkJICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7CiAJCQltZW1jcHkoKChjaGFyICopIGVzKSAmIzQzOyBFWFQ0X1NfRVJSX1NUQVJULAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogZXh0NCBKb3VybmFsIExvYWRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2V4dDQvc3VwZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfbG9hZF9qb3VybmFsKClgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgY2xlYXJpbmcgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZnJvbSB0aGUgc3VwZXJibG9jayYjMzk7cyBmbGFncyAoYHNiLSZndDtzX2ZsYWdzYCkgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpYCBhbmQgdGhlbiByZXN0b3JpbmcgaXQuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHRvIGFsbG93IGZhc3QgY29tbWl0IHJlcGxheSB0byB0b3VjaCBtZXRhZGF0YSBldmVuIG9uIHdoYXQmIzM5O3MgZXNzZW50aWFsbHkgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSwgcmlnaHQ/IEludGVyZXN0aW5nLiBUaGlzIHN0cmlrZXMgbWUgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpXaHk/IFdlbGwsIGBleHQ0X2xvYWRfam91cm5hbGAgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEpvdXJuYWwgbG9hZGluZyBpcyBhIGNyaXRpY2FsIHByb2Nlc3MgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBjYW4gZGVmaW5pdGVseSBleGVyY2lzZS4gQW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHRoYXQgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IHdlIHdhbnQgd2hlbiBodW50aW5nIGZvciBvYnNjdXJlIGVkZ2UgY2FzZXMuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjb25maWd1cmUgZXh0NCBmb3IgdGhlIGZ1enppbmcgc2V0dXAuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSB0byBlbmFibGUsIG9mIGNvdXJzZS4gVGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGZsYWdzIGFuZCBjb25kaXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGpvdXJuYWwgbG9hZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2xvYWRfam91cm5hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NjY9c3RhdGljIHN0cnVjdCByYXRlbGltaXRfc3RhdGUgZXh0NF9tb3VudF9tc2dfcmF0ZWxpbWl0O1xuZnMvZXh0NC9zdXBlci5jLTY3LVxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXG5mcy9leHQ0L3N1cGVyLmMtNjktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGpvdXJuYWxfZGV2bnVtKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nj1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5NjItXG5mcy9leHQ0L3N1cGVyLmM6NDk2MzpcdGVyciA9IGV4dDRfbG9hZF9qb3VybmFsKHNiLCBlcywgY3R4LVx1MDAzZWpvdXJuYWxfZGV2bnVtKTtcbmZzL2V4dDQvc3VwZXIuYy00OTY0LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjA1MD1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjA4OC1cbmZzL2V4dDQvc3VwZXIuYzo2MDg5OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy02MDkwLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipUcmFjaW5nIHRoZSBFeHQ0IEpvdXJuYWwgTG9hZGluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIEFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gSG1tLCB0aGF0IGxpbWl0cyBvdXIgYWJpbGl0eSB0byB0cmFjZSBpdCBkaXJlY3RseSBmcm9tIGEgaGlnaGVyIGxldmVsLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgKnBhdGgqIHRvIHRoaXMgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgb3IsIGlkZWFsbHksIGFuICplbnRyeSBwb2ludCogaW50byB0aGUgam91cm5hbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIOKAkyBmcm9tIHdoaWNoIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoZW4gYW5kIGhvdyB0aGUgam91cm5hbCBpcyBhY3R1YWxseSBsb2FkZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0cmFjaW5nIHVwd2FyZHMsIGxvb2tpbmcgZm9yIHRoZSBwbGFjZSB0aGlzIHdob2xlIGpvdXJuYWwgbG9hZGluZyBzZXF1ZW5jZSBpcyBpbml0aWF0ZWQuIEkmIzM5O2xsIGZvY3VzIG9uIGZpbmRpbmcgdGhlIGZpcnN0IHB1YmxpYyBmYWNpbmcgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTQ4OTY9c3RhdGljIGludCBleHQ0X2dyb3VwX2Rlc2NfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTU1LVxuZnMvZXh0NC9zdXBlci5jOjQ5NTY6c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ5NTctXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzMzg9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1MTEtXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSB7XG5mcy9leHQ0L3N1cGVyLmM6NTUxMjpcdFx0ZXJyID0gZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc2IsIGVzLCBjdHgpO1xuZnMvZXh0NC9zdXBlci5jLTU1MTMtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkluaXRpYWwgRW50cnkgUG9pbnQgQW5hbHlzaXM6IGBleHQ0X2ZpbGxfc3VwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZXh0NCBtb3VudGluZyBwcm9jZXNzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbSBtb3VudC4gSXQgbG9va3MgbGlrZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgZXh0NF9maWxsX3N1cGVyYCBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTMzMT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzMzctXG5mcy9leHQ0L3N1cGVyLmM6NTMzODpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MzM5LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc1MT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODA3LVxuZnMvZXh0NC9zdXBlci5jOjU4MDg6c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTU4MDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODI3LVxuZnMvZXh0NC9zdXBlci5jOjU4Mjg6XHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU4MjktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODU4PXN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg1OS17XG5mcy9leHQ0L3N1cGVyLmM6NTg2MDpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBleHQ0X2ZpbGxfc3VwZXIpO1xuZnMvZXh0NC9zdXBlci5jLTU4NjEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gdGhlIEVYVDQgTW91bnQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgRVhUNCB2dWxuZXJhYmlsaXR5IGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy4gKmV4dDRfZmlsbF9zdXBlciogaXMgc3RhdGljLCBobW0sIG5vdCBoZWxwZnVsIGRpcmVjdGx5LiBBbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQsICpleHQ0X2dldF90cmVlKiwgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCBob2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfZ2V0X3RyZWUqIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgZnNfY29udGV4dF9vcGVyYXRpb25zYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLgoKTGV0JiMzOTtzIHNlZS4uLiAqZXh0NF9tb3VudCo/IE5vLCBzdGlsbCBzdGF0aWMuIFJpZ2h0LCBpdCYjMzk7cyAqZXh0NF9nZXRfdHJlZSouIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfbG9hZF9qb3VybmFsKiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQhIEZ1enppbmcgdGhlIG1vdW50IHByb2Nlc3MgaXRzZWxmLCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIGFwcHJvYWNoLiBBIGZ1enppbmcgaGFybmVzcyBmb2N1c2VkIG9uIGZpbGUgc3lzdGVtIG1vdW50aW5nIHNlZW1zIGxpa2UgdGhlIHdheSB0byBnby4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWgsIHRoZSBwYXRjaCBtZW50aW9ucyAqZXh0NF9mY19yZXBsYXkoKSouIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhhdCBmdW5jdGlvbiB0b28uIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgcmVnYXJkbGVzcyBvZiBtb3VudCB0aW1lLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE4NjEtI2VuZGlmXG5mcy9leHQ0L2V4dDQuaDoxODYyOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHNfZmNfcmVwbGF5X3N0YXRlO1xuZnMvZXh0NC9leHQ0LmgtMTg2My19O1xuLS1cbmZzL2V4dDQvZXh0NC5oPTMwNjg9dm9pZCBleHQ0X2ZjX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oOjMwNjk6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xuZnMvZXh0NC9leHQ0Lmg6MzA3MDp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L2V4dDQuaC0zMDcxLWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODA0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX2dldF90bChzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODEzLS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODE0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfdW5saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgxNS1cdFx0XHRcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODIzLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MjQ6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVU5MSU5LLCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODI1LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODUyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NTM6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1NC1cdFx0XHRcdHN0cnVjdCBkZW50cnlfaW5mb19hcmdzICpkYXJnLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4OTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODkwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk2LVx0dGxfdG9fZGFyZyhcdTAwMjZkYXJnLCB0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk3Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0xJTkssIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTgtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkwNjpcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFx1MDAyNmRhcmcsIGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA3LVx0aXB1dChpbm9kZSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTYte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5MTc6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTgtXHRpbnQgaTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk0My0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTQ0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQ1LVx0XHRcdFx0c3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk1OC1cdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk1OTpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2MC1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0OS0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA1MS1cdFx0XHRcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDU5LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNjA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQ1JFQVQsIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNjEtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTItXHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5MzpcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFx1MDAyNmRhcmcsIGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDk0LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTEwLXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTExOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTEyLVx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDctLyogUmVwbGF5IGFkZCByYW5nZSB0YWcgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTQ4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OS17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNjItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE2MzpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19BRERfUkFOR0UsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2NC1cdFx0bGUzMl90b19jcHUoZmNfYWRkX2V4LmZjX2lubyksIGxlMzJfdG9fY3B1KGV4LVx1MDAzZWVlX2Jsb2NrKSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI2Nz1zdGF0aWMgaW50XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI2ODpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjY5LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3OS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjgwOlx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0RFTF9SQU5HRSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgxLVx0XHRsZTMyX3RvX2NwdShscmFuZ2UuZmNfaW5vKSwgY3VyLCByZW1haW5pbmcpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyOS17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMzMDpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMzMS1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODYtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM4Nzpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OC17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OS1cdGludCBpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTA6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzOTEtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0MDQtLyogQ2xlYW51cCBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgcmVwbGF5ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA2LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQxND1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1Ny0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1OS1cdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBvZmYsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjMtXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY0Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDY1LVx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTcyLW91dF9lcnI6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5X3NjYW4oc2IsIHJldCwgb2ZmKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4MC0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODItXHRcdFx0XHRlbnVtIHBhc3N0eXBlIHBhc3MsIGludCBvZmYsIHRpZF90IGV4cGVjdGVkX3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4OC1cdGludCByZXQgPSBKQkQyX0ZDX1JFUExBWV9DT05USU5VRTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg5Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZSA9IFx1MDAyNnNiaS1cdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkwLVx0c3RydWN0IGV4dDRfZmNfdGFpbCB0YWlsO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkzLVx0XHRzdGF0ZS1cdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBQQVNTX1NDQU47XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU5NDpcdFx0cmV0dXJuIGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbCwgYmgsIG9mZiwgZXhwZWN0ZWRfdGlkKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVx0fVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMxLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0xJTks6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMjpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMzLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzQtXHRcdGNhc2UgRVhUNF9GQ19UQUdfVU5MSU5LOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MzU6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfdW5saW5rKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM2LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzctXHRcdGNhc2UgRVhUNF9GQ19UQUdfQUREX1JBTkdFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2Mzg6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHNiLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzktXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MC1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQxOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Mi1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQzLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ0Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzYiwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ1LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDYtXHRcdGNhc2UgRVhUNF9GQ19UQUdfSU5PREU6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NzpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0OC1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ5LVx0XHRjYXNlIEVYVDRfRkNfVEFHX1BBRDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjUwOlx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1MS1cdFx0XHRcdFx0ICAgICB0bC5mY19sZW4sIDApO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVx0XHRjYXNlIEVYVDRfRkNfVEFHX1RBSUw6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY1NDpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVEFJTCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVx0XHRcdFx0XHQgICAgIDAsIHRsLmZjX2xlbiwgMCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjEtXHRcdGRlZmF1bHQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY2MjpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGwuZmNfdGFnLCAwLCB0bC5mY19sZW4sIDApO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjMtXHRcdFx0cmV0ID0gLUVDQU5DRUxFRDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzktXHQgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjgwOlx0am91cm5hbC1cdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODEtXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTEzOT1zdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24ge1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDctICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MTQ4OnN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVx0aW50IGZjX3JlcGxheV9udW1fdGFncztcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MTYyPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTMtXHRcdFx0XHRicmVhaztcbmZzL2V4dDQvbWJhbGxvYy5jOjYxOTQ6XHRcdFx0aWYgKGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHNiLFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5NS1cdFx0XHRcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSAmIzQzO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NjM3LVx0fVxuZnMvZXh0NC9zdXBlci5jOjU2Mzg6XHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcbmZzL2V4dDQvc3VwZXIuYy01NjM5LVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MDg5PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjE3NC1cdFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXG5mcy9leHQ0L3N1cGVyLmM6NjE3NTpcdFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XG5mcy9leHQ0L3N1cGVyLmMtNjE3Ni1cdFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEpvdXJuYWwgTG9hZGluZyBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGFuZCBmYXN0IGNvbW1pdCByZXBsYXksIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBlbnRyeSBwb2ludHMgdGhhdCBtaWdodCBiZSBmcnVpdGZ1bCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb3JlIGZhc3QgY29tbWl0IHJlcGxheSBmdW5jdGlvbiwgYGV4dDRfZmNfcmVwbGF5YCwgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGpvdXJuYWwtJmd0O2pfZmNfcmVwbGF5X2NhbGxiYWNrYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uCgpNeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBqb3VybmFsIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIGBqYmQyX2pvdXJuYWxfbG9hZGAsIHdoaWNoIGNhbGxzIHRoZSByZXBsYXkgY2FsbGJhY2suIE5vdywgbXkgY29uY2VybiB3aXRoIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYGZzL2piZDIvam91cm5hbC5jYCwgYW5kIHNvIGlzIHByb2JhYmx5IG5vdCB3aGF0IEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluLgoKSSB3YXMgb3JpZ2luYWxseSBjaGVja2luZyBmb3IgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdlIGNhbiBmb2N1cyBvbi4gYGV4dDRfbG9hZF9qb3VybmFsYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGFuZCBgZXh0NF9nZXRfdHJlZWAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCB2ZXJ5IGxpa2VseSBlbnRyeSBwb2ludHMuIGBleHQ0X2ZjX2luaXRgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyB1bmxpa2VseSB0byBoYXZlIGEgY2xvc2UgY29ubmVjdGlvbiB0byB0aGUgYG1vdW50YCBwcm9jZXNzLgoKTXkgc3RyYXRlZ3kgbm93IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1vdW50aW5nIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuY292ZXIgYW55IHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgdGhlIGpvdXJuYWwgbG9hZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGV4dDRfLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTE4ND12b2lkIGV4dDRfcmVhZF9iaF9ub3dhaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTUtXG5mcy9leHQ0L3N1cGVyLmM6MTk2OmludCBleHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuZnMvZXh0NC9zdXBlci5jLTE5Ny1cdFx0IGJpb19lbmRfaW9fdCBlbmRfaW8sIGJvb2wgc2ltdV9mYWlsKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMTMtXG5mcy9leHQ0L3N1cGVyLmM6MjE0OmludCBleHQ0X3JlYWRfYmhfbG9jayhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcbmZzL2V4dDQvc3VwZXIuYy0yMTUte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwNDItXG5mcy9leHQ0L3N1cGVyLmM6MjA0MzppbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zMDkxPXN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMwOTUtXG5mcy9leHQ0L3N1cGVyLmM6MzA5NjppbnQgZXh0NF9zZXFfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG5mcy9leHQ0L3N1cGVyLmMtMzA5Ny17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTMxMDc9c3RhdGljIGludCBleHQ0X3NldHVwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzE2NC1cbmZzL2V4dDQvc3VwZXIuYzozMTY1OmludCBleHQ0X2FsbG9jX2ZsZXhfYmdfYXJyYXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IG5ncm91cClcbmZzL2V4dDQvc3VwZXIuYy0zMTY2LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzI0Nj1zdGF0aWMgX19sZTE2IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMjg5LVxuZnMvZXh0NC9zdXBlci5jOjMyOTA6aW50IGV4dDRfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBibG9ja19ncm91cCxcbmZzL2V4dDQvc3VwZXIuYy0zMjkxLVx0XHRcdFx0c3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dDRfZ2V0X3N0cmlwZV9zaXplKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzYyMi0gKi9cbmZzL2V4dDQvc3VwZXIuYzozNjIzOmludCBleHQ0X2ZlYXR1cmVfc2V0X29rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZWFkb25seSlcbmZzL2V4dDQvc3VwZXIuYy0zNjI0LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDAxND1zdGF0aWMgc3RydWN0IGV4dDRfbGlfcmVxdWVzdCAqZXh0NF9saV9yZXF1ZXN0X25ldyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00MDQwLVxuZnMvZXh0NC9zdXBlci5jOjQwNDE6aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQwNDItXHRcdFx0ICAgICBleHQ0X2dyb3VwX3QgZmlyc3Rfbm90X3plcm9lZClcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDE3MD1zdGF0aWMgaW50IGNvdW50X292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncnAsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQyMzItICovXG5mcy9leHQ0L3N1cGVyLmM6NDIzMzppbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MjM0LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjQwMj1zdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjQ0NS0gKi9cbmZzL2V4dDQvc3VwZXIuYzo2NDQ2OmludCBleHQ0X2ZvcmNlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTY0NDcte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz03MjI0PXN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTcyNjQtLyogRW5hYmxlIHVzYWdlIHRyYWNraW5nIGZvciBhbGwgcXVvdGEgdHlwZXMuICovXG5mcy9leHQ0L3N1cGVyLmM6NzI2NTppbnQgZXh0NF9lbmFibGVfcXVvdGFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNzI2Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIEV4dDQgY29kZSBoZXJlLiBJdCBsb29rcyBsaWtlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGV5JiMzOTtyZSB1c2luZyB0byBoYW5kbGUgdGhlIG1vdW50aW5nIGNvbnRleHQuIEludGVyZXN0aW5nIHRoYXQgaXQmIzM5O3Mgbm90IHN0YXRpYy4gSG93ZXZlciwgSSBub3RpY2VkIHRoYXQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQgZnJvbSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhhdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBqb3VybmFsIGlzIGhhbmRsZWQuIEhtbSwgaXMgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCBvciBgZXh0NF9sb2FkX2pvdXJuYWxgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIGRvbiYjMzk7dCAqdGhpbmsqIHNvLCBidXQgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBTaW5jZSB0aGUgam91cm5hbCBpcyBpbXBvcnRhbnQsIHBlcmhhcHMgaXQgaXMgdXNlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUuLi4gbm8sIHRob3NlIGFyZW4mIzM5O3QgZXhwb3J0ZWQuLi4gT2theSwgbGV0IG1lIHBpdm90IG92ZXIgdG8gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUga2lja2luZyBhcm91bmQgaW4gdGhhdCBhcmVhLCBzaW5jZSBpdCBkZWFscyB3aXRoIGpvdXJuYWwgaGFuZGxpbmcgdG9vLiBQZXJoYXBzIHRoZSBhbnN3ZXIgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZXh0NF9mY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU1Mz1zdGF0aWMgdm9pZCBleHQ0X2ZjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc3RhdHVzLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg1LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1ODY6aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg3LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjA1MD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMDg6aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA5LVx0XHRleHQ0X2xibGtfdCBsYmxrLCBleHQ0X2ZzYmxrX3QgcGJsaywgaW50IGxlbiwgaW50IHJlcGxheSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY4Nj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZjX2luZWxpZ2libGVfcmVhc29uc1tdID0ge1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzAxLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI3MDI6aW50IGV4dDRfZmNfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI3MDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbmNlcm5pbmcgRmlsZSBDcmVhdGlvbiBhbmQgRXh0NCYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0X2ZjX2NvbW1pdGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzICpub3QqIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGV4dGVybmFsIHVzZS4gV2hhdCYjMzk7cyBpdCBkb2luZyB0aGF0IGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlPyBJcyBpdCBiZWluZyBjYWxsZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBnZW5lcmFsIGZyYW1ld29yaz8gVGhpcyBpc24mIzM5O3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBkZXNpZ24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBkYXRhIHByb3RlY3Rpb24uCgpUaGVuLCBteSBtaW5kIGRyaWZ0cyB0byBgZXh0NF9mY19pbml0YC4gSXMgKnRoYXQqIGFsc28gbm9uLXN0YXRpYz8gSWYgaXQgaXMsIHRoZW4gdGhlIGltcGxpY2F0aW9ucyBvZiBgZXh0NF9mY19jb21taXRgIGJlaW5nIG5vbi1zdGF0aWMgYXJlIGV2ZW4gZ3JlYXRlci4gSXQgcG9pbnRzIHRvd2FyZCBtb3JlIHNvcGhpc3RpY2F0ZWQgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlczsgaXQgbWF5IGJlIHRoYXQgYm90aCBmdW5jdGlvbnMgd29yayB0b2dldGhlciwgYW5kIG1pZ2h0IHNoYXJlIGRhdGEgdG8gaW5pdGlhbGl6ZSBmaWxlIGNyZWF0aW9uLCBhbmQgcHJlcGFyZSBmb3IgY29tbWl0dGVkIGNoYW5nZXMuIElmIHNvLCB3aHkgaXNuJiMzOTt0IHRoZSBzY29wZSBjb250cm9sbGVkPyBJZiBpdCBpcyBzdGF0aWMsIHRoZW4gaXQgaXMgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZS4gSWYgaXQmIzM5O3Mgbm90LCBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBkZXRlcm1pbmUgd2h5IHRob3NlIGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBtYWRlLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcmVhc29uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb3JyZWN0LCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgRXh0NCBhbmQgaXQmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgZXh0NF9mY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3Jlc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzI6dm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yODc9c3RhdGljIHZvaWQgZXh0NF9mY19zbmFwX3N0YXRzX3VwZGF0ZV9tYXgoYXRvbWljNjRfdCAqc3RhdCwgdTY0IHZhbHVlKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDMtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MzA0OnZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDUte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjctICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MzY4OnZvaWQgZXh0NF9mY19tYXJrX2luZWxpZ2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHJlYXNvbiwgaGFuZGxlX3QgKmhhbmRsZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjkte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz01MTY9dm9pZCBfX2V4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTUyOS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzo1MzA6dm9pZCBleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTMxLXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NTM4PXZvaWQgX19leHQ0X2ZjX3RyYWNrX2xpbmsoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTUxLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU1Mjp2b2lkIGV4dDRfZmNfdHJhY2tfbGluayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1My1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTU1OT12b2lkIF9fZXh0NF9mY190cmFja19jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTcyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU3Mzp2b2lkIGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01NzQte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz01ODI9c3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTkyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU5Mzp2b2lkIGV4dDRfZmNfdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01OTQte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz02Mjk9c3RhdGljIGludCBfX3RyYWNrX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY1Nzp2b2lkIGV4dDRfZmNfdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU4LVx0XHRcdCBleHQ0X2xibGtfdCBlbmQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzODc9Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxrKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA0LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0MDU6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI1ODE9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3Mzp2b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI3NTY9aW50IF9faW5pdCBleHQ0X2ZjX2luaXRfZGVudHJ5X2NhY2hlKHZvaWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI3NzItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Mjc3Mzp2b2lkIGV4dDRfZmNfZGVzdHJveV9kZW50cnlfY2FjaGUodm9pZClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBJc3N1ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcm9ibGVtIHdpdGhpbiBgZXh0NF9sb2FkX2pvdXJuYWxgLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvc3VwZXIuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZhc3QgY29tbWl0IHJlcGxheSBmYWlsaW5nIGJlY2F1c2Ugb2YgYSByZWFkLW9ubHkgc3VwZXJibG9jayBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZ28gYWZ0ZXIgYGV4dDRfZmlsbF9zdXBlcmAgb3IgYGV4dDRfZ2V0X3RyZWVgIHdpdGggZnV6emluZy4gVGhvc2Ugc2VlbSBsaWtlIG9idmlvdXMgdGFyZ2V0cyBnaXZlbiB0aGUgY29udGV4dC4gSG93ZXZlciwgdGhvc2UgYXJlIHN0YXRpYyBhbmQgSSBjYW4mIzM5O3QgcmVhbGx5IGdldCBhdCB0aG9zZS4gSSBuZWVkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQuIEkgY2FuIGhpdCBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBhbmQgYGV4dDRfZmNfY29tbWl0YC4KCldhaXQgYSBtaW51dGUsIHRoZSBpc3N1ZSBpcyBoYXBwZW5pbmcgZHVyaW5nIG1vdW50LCBhbmQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBwYXJ0IG9mIHRoYXQgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBmcy9leHQ0L3N1cGVyLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBtb3VudCBzZXF1ZW5jZS4gVGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmcyBjb250ZXh0IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBtb3VudCwgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyB0aGUgb25lLiBMZXQgbWUgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUsIGFuZCBsb29rIGZvciBgZXh0NF9nZXRfdHJlZWAsIGp1c3QgaW4gY2FzZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG5mcy9leHQ0L3N1cGVyLmM6OTI6c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTEyNi1cdC5wYXJzZV9wYXJhbVx0PSBleHQ0X3BhcnNlX3BhcmFtLFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcdC5nZXRfdHJlZVx0PSBleHQ0X2dldF90cmVlLFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cdC5yZWNvbmZpZ3VyZVx0PSBleHQ0X3JlY29uZmlndXJlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODA4PXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTg1Ny1cbmZzL2V4dDQvc3VwZXIuYzo1ODU4OnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gdGhlIGV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0YCBjb2RlIGFuZCBJIHNlZSB0aGF0IGBleHQ0X2dldF90cmVlYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXQmIzM5O3MgcHJvYmFibHkgb25seSB1c2VkIHdpdGhpbiB0aGUgYGV4dDRgIG1vZHVsZSBpdHNlbGYsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgdHJhY2Ugd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGRhdGEgaXQgcmVsaWVzIHVwb24uCgpOb3csIG15IG1pbmQgd2FuZGVycy4gSWYgYGV4dDRfZ2V0X3RyZWVgIGlzIHN0YXRpYywgd2hhdCYjMzk7cyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIGNvbWUgaW50byBiZWluZywgYW5kIHdoZXJlIGBleHQ0X2dldF90cmVlYCBmaXRzIGludG8gdGhhdCBsYXJnZXIgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBleHQ0X2luaXRfZnNfY29udGV4dGA/IFRoYXQgc291bmRzIGxpa2UgYSBtdWNoIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYmVpbmcgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFydHVwLiBJdCBpcywgYWZ0ZXIgYWxsLCBuYW1lZCAqaW5pdCogYW5kICpmc19jb250ZXh0KiAtIHRoYXQgaGFzIHRvIGJlIHRoZSBwbGFjZSBJIGZvY3VzIG9uIG5leHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqcm9vdCogb2YgdGhlIGZpbGVzeXN0ZW0gdHJlZSBpcyB1bHRpbWF0ZWx5IGNvbnN0cnVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9OTQ9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmM6OTU6c3RhdGljIGludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jLTk2LXN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQyX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzNi1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQyXCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjEzNzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXG5mcy9leHQ0L3N1cGVyLmMtMTM4LVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNTA9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTUyLVx0Lm5hbWVcdFx0XHQ9IFwmIzM0O2V4dDNcJiMzNDssXG5mcy9leHQ0L3N1cGVyLmM6MTUzOlx0LmluaXRfZnNfY29udGV4dFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcbmZzL2V4dDQvc3VwZXIuYy0xNTQtXHQucGFyYW1ldGVyc1x0XHQ9IGV4dDRfcGFyYW1fc3BlY3MsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjA0Mi1cbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtMjA0NC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTc1MTk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRfZnNfdHlwZSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNzUyMS1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQ0XCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjc1MjI6XHQuaW5pdF9mc19jb250ZXh0XHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxuZnMvZXh0NC9zdXBlci5jLTc1MjMtXHQucGFyYW1ldGVyc1x0XHQ9IGV4dDRfcGFyYW1fc3BlY3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IE1vdW50IENvbnRleHQgYW5kIEZhc3QgQ29tbWl0IFJlcGxheSoqCgpPa2F5LCBzbyBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzbiYjMzk7dCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQ6IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNwZWVkaW5nIHVwIGNvbW1pdCByZXBsYXkuIFRoaXMgbWFrZXMgbWUgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGpvdXJuYWwgaGFuZGxpbmcuIE15IG5leHQgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYGZzL2piZDIvam91cm5hbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBqYmQyX2pvdXJuYWxfbG9hZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgam91cm5hbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZHVyaW5nIGEgY29tbWl0IHJlcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7amJkMl9qb3VybmFsX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYz03NT1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMpO1xuZnMvamJkMi9qb3VybmFsLmM6NzY6RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfbG9hZCk7XG5mcy9qYmQyL2pvdXJuYWwuYy03Ny1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9kZXN0cm95KTtcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYz0yMDUwPUVYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3VwZGF0ZV9zYl9lcnJubyk7XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtMjA1Mi0vKipcbmZzL2piZDIvam91cm5hbC5jOjIwNTM6ICogamJkMl9qb3VybmFsX2xvYWQoKSAtIFJlYWQgam91cm5hbCBmcm9tIGRpc2suXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU0LSAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGFjdCBvbi5cbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU5LSAqL1xuZnMvamJkMi9qb3VybmFsLmM6MjA2MDppbnQgamJkMl9qb3VybmFsX2xvYWQoam91cm5hbF90ICpqb3VybmFsKVxuZnMvamJkMi9qb3VybmFsLmMtMjA2MS17XG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MjQwOT1pbnQgamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2piZDIvam91cm5hbC5jLTI0ODUtICogYSB3YXJuaW5nIGlmIHRoZSBqb3VybmFsIGNvbnRhaW5zIGFueSB2YWxpZCByZWNvdmVyeSBpbmZvcm1hdGlvbi5cbmZzL2piZDIvam91cm5hbC5jOjI0ODY6ICogTXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBqb3VybmFsX2luaXRfKigpIGFuZCBqYmQyX2pvdXJuYWxfbG9hZCgpLlxuZnMvamJkMi9qb3VybmFsLmMtMjQ4Ny0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IEpvdXJuYWwgTG9hZGluZyBGaXggYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIGV4dDQmIzM5O3Mgam91cm5hbCBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBmYXN0IGNvbW1pdCByZXBsYXkgZ29lcyBzaWRld2F5cyBiZWNhdXNlIHRoZSBzdXBlcmJsb2NrIGlzLCB1bmRlcnN0YW5kYWJseSwgcmVhZC1vbmx5LiBUaGUgZml4IGludm9sdmVzIGNvbmRpdGlvbmFsbHkgY2xlYXJpbmcgYFNCX1JET05MWWAgZnJvbSBgc2ItJmd0O3NfZmxhZ3NgIGlmIGBlbmFibGVfd3JpdGVgIGlzIHRydWUuIEhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIGNsYXNzaWMgc2NlbmFyaW8gcmlwZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUgd2hlcmUgdGhpbmdzIG1pZ2h0IGdldCBzdWJ0bHkgY29uZnVzZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSYjMzk7bSB0aGlua2luZyB0aGlzIGRlc2VydmVzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24uIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBydW4gdGhpcyB0aHJvdWdoIHRoZSBmdXp6ZXIuIFRoZSBvbmx5IGNvbmZpZyBJIHRoaW5rIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBhbHNvIHRha2UgYSBwZWVrIGF0IGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZmlnIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMDgtXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTIzPXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX29ycGhhbl90cmFja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjE2My0vKlxuZnMvZXh0NC9leHQ0Lmg6MjE2NDogKiBUaGUgcmVhc29uIHdoeSBcJiMzNDtGQVNUX0NPTU1JVFwmIzM0OyBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcbmZzL2V4dDQvZXh0NC5oLTIxNjUtICogaW5jb21wYXRpYmxlIG9ubHkgaWYgZmFzdCBjb21taXQgYmxvY2tzIGFyZSBwcmVzZW50IGluIHRoZSBGUy4gU2luY2Ugd2Vcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTY5LSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjE3MDojZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfRkFTVF9DT01NSVRcdFx0MHgwNDAwXG5mcy9leHQ0L2V4dDQuaC0yMTcxLSNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9TVEFCTEVfSU5PREVTXHQweDA4MDBcbi0tXG5mcy9leHQ0L2V4dDQuaD0yMjc1PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcdFNQQVJTRV9TVVBFUjIpXG5mcy9leHQ0L2V4dDQuaDoyMjc2OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXHRcdEZBU1RfQ09NTUlUKVxuZnMvZXh0NC9leHQ0LmgtMjI3Ny1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXHRTVEFCTEVfSU5PREVTKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NS17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2Olx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0Ny1cdFx0KEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQwOT1zdGF0aWMgaW50IGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUoXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzOS1cdFx0XHRcdChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ0MDpcdFx0XHRcdCBzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ0MS1cdFx0XHRcdFx1MDAyNnNiaS1cdTAwM2VzX2ZjX3FbRkNfUV9TVEFHSU5HXSA6XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1ND1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTAtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0OTE6XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5Mi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZWZjZF9saXN0LFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTg2PWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU5NjpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVx0XHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MzojaWZuZGVmIF9fRkFTVF9DT01NSVRfSF9fXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6NDojZGVmaW5lIF9fRkFTVF9DT01NSVRfSF9fXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTYzPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFnMnN0cihfX3UxNiB0YWcpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE4OC1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxODk6I2VuZGlmIC8qIF9fRkFTVF9DT01NSVRfSF9fICovXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM0NTI9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVx0XHRcdHJldHVybiBmYWxzZTtcbmZzL2V4dDQvaW5vZGUuYzozNDYwOlx0XHRpZiAodGVzdF9vcHQyKGlub2RlLVx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9pbm9kZS5jLTM0NjEtXHRcdFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19saXN0KTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTQwMDctXHRcdFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcbmZzL2V4dDQvbmFtZWkuYzo0MDA4Olx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ni0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYzoxOTQ3Olx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ4LVx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDctXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXG5mcy9leHQ0L3N1cGVyLmM6NDQwODpcdFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTQ0MDktXHQvKiBkb24mIzM5O3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ5NTY9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTc5LVxuZnMvZXh0NC9zdXBlci5jOjQ5ODA6XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvc3VwZXIuYy00OTgxLVx0XHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwsIDAsIDAsXG5mcy9leHQ0L3N1cGVyLmM6NDk4MjpcdFx0XHRcdFx0ICBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVQpKSB7XG5mcy9leHQ0L3N1cGVyLmMtNDk4My1cdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01MDQwPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDQ3LVx0XHRjbGVhcl9vcHQoc2IsIERJT1JFQURfTk9MT0NLKTtcbmZzL2V4dDQvc3VwZXIuYzo1MDQ4Olx0XHRjbGVhcl9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy01MDQ5LVx0XHRpZiAodGVzdF9vcHQyKHNiLCBFWFBMSUNJVF9ERUxBTExPQykpIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUzNi1cdFx0Y2xlYXJfb3B0KHNiLCBEQVRBX0ZMQUdTKTtcbmZzL2V4dDQvc3VwZXIuYzo1NTM3Olx0XHRjbGVhcl9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy01NTM4LVx0XHRzYmktXHUwMDNlc19qb3VybmFsID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRmFzdCBDb21taXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGZhc3QgY29tbWl0IHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24g4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgYEVYVDRfRlNgLiBUaGVyZSYjMzk7cyBubyBzZXBhcmF0ZSBmYXN0IGNvbW1pdCBjb25maWd1cmF0aW9uLCBhcyBJIHJlY2FsbCwgaXQmIzM5O3MgaGFuZGxlZCB2aWEgbW91bnQgb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBleHQ0X2xvYWRfam91cm5hbGAgd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBgZXh0NF9mY19jb21taXRgLCBhbmQgYGV4dDRfZmNfaW5mb19zaG93YCBhcyBrZXkgc3ltYm9scy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGJ1ZyBpcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzIHdoZW4gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQuIFNvLCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSBhbSBsb29raW5nIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvZXh0NC9zdXBlci5jYCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gbW91bnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgc2VlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgaW52b2x2ZWQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBgZnMvZXh0NC9zdXBlci5jYCBmb3IgYGV4dDRfZ2V0X3RyZWVgLiBXYWl0LCBpcyBgamJkMl9qb3VybmFsX2xvYWRgIGNhbGxlZCBmcm9tIGBleHQ0X2xvYWRfam91cm5hbGA/IFllcywgSSBzZWUgaXQmIzM5O3MgZXhwb3J0ZWQuIFRoYXQgbWFrZXMgYGpiZDJfam91cm5hbF9sb2FkYCBhIHZlcnkgcHJvbWlzaW5nIHN5bWJvbCB0byBmb2N1cyBvbi4gQW5kLCBgZXh0NF9mY19yZXBsYXlgIGlzIGEgY2FsbGJhY2ssIGJ1dCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBwcm9iYWJseSBub3QgZGlyZWN0bHkgcmVsZXZhbnQuCgpPa2F5LCBsZXQmIzM5O3Mgbm93IGxvb2sgYXQgYGpiZDJfam91cm5hbF9sb2FkYCBpbiBgZnMvamJkMi9qb3VybmFsLmNgLiBJIHdpbGwgYWRkIGBqYmQyX2pvdXJuYWxfbG9hZGAgYW5kIGBleHQ0X2luaXRfZnNfY29udGV4dGAuIFdhaXQsIGhhbmcgb24uLi4gYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyBqdXN0IGFsbG9jYXRpbmcgdGhlIGNvbnRleHQsIHNvIG5vdCB0aGF0IGludGVyZXN0aW5nIGluIGl0c2VsZi4KCldoYXQgYWJvdXQgYGV4dDRfZmNfY29tbWl0YD8gWWVwLCB0aGF0JiMzOTtzIG5vbi1zdGF0aWMuIExldCYjMzk7cyBsb29rIGF0IGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBOb3csIEkmIzM5O2xsIGFkZCBgamJkMl9qb3VybmFsX2xvYWRgLCBgZXh0NF9mY19jb21taXRgLCBgZXh0NF9mY19pbml0YCwgYW5kIGBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwYCB0byB0aGUgbGlzdC4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGpvdXJuYWwgbG9hZGluZywgc3BlY2lmaWNhbGx5IHdoZW4gcmVwbGF5aW5nIGZhc3QgY29tbWl0cy4gQ3J1Y2lhbGx5LCBpdCBpbnZvbHZlcyB0ZW1wb3JhcmlseSBjbGVhcmluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBkdXJpbmcgdGhlIHJlcGxheSBwcm9jZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGV4dDQgbW91bnQgYW5kIHJlY292ZXJ5IHBhdGgsIGFuZCB0aHVzIHNlZW1zIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBnb2luZyB0byBlbmFibGUgYXJlIGBFWFQ0X0ZTYCBhbmQgYEpCRDJgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYEpCRDJgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSkJEMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXG5mcy9qYmQyL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvamJkMi9LY29uZmlnLTE5LVxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXG5mcy9qYmQyL0tjb25maWctMjEtXHRib29sIFwmIzM0O0pCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVsdmluZyBpbnRvIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYEpCRDJgLiBJdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGNob3NlbiBieSBgRVhUNF9GU2AsIHdoaWNoIGlzIHRoZSBmaWxlc3lzdGVtIGF0IHBsYXkgaGVyZS4gVGhhdCBtZWFucyB0aGUgcmVhbCBjb250cm9sIGxpZXMgd2l0aCBob3cgYEVYVDRfRlNgIGlzIGRlZmluZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIHRoZSBzb3VyY2Ug4oCTIHRoYXQmIzM5O2xsIGJlIGBmcy9leHQ0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSB0aGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NTEKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDQgUGF0Y2ggQW5hbHlzaXM6IE15IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgRVhUNF9GU2AgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZXhwb3NlIGFueSB2dWxuZXJhYmlsaXRpZXMuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBwb2ludC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgdGFrZWF3YXlzIGFuZCBjb25maXJtIHRoaXMgaHlwb3RoZXNpcy4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgb3BlcmF0ZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHJlcGxheSBwcm9jZXNzLiBJdCB0ZW1wb3JhcmlseSBkcm9wcyB0aGUgYFNCX1JET05MWWAgZmxhZy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMmIzM0OyB0byBtZS4gSXTigJlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGV4dDQgbW91bnQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMsIHdoaWNoIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBjaGVja3MgdGhlIGJveCBmb3IgZnV6emluZyBmZWFzaWJpbGl0eS4KClRoZSBtYWluIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGBqYmQyX2pvdXJuYWxfbG9hZGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGBleHQ0X2ZjX2luaXRgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLiBUaGVzZSBhcmUgdGhlIGZvY2FsIHBvaW50cyBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIEkgZXhwZWN0IGFueSBpc3N1ZXMgd291bGQgbWFuaWZlc3QuCgpTbywgaW4gc3VtbWFyeTogSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHByb2NlZWQgd2l0aCBmdXp6aW5nIHRoaXMgdXNpbmcgYEVYVDRfRlNgIGFzIHRoZSBvbmx5IGVuYWJsZWQgY29uZmlnLiBUaGUgcGF0Y2gmIzM5O3Mgc2NvcGUsIHRoZSBmdW5jdGlvbnMgaXQgdGFyZ2V0cywgYW5kIGl0cyByZWFjaGFiaWxpdHkgbWFrZSBpdCBhIHdvcnRod2hpbGUgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2piZDJfam91cm5hbF9sb2FkJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfY29tbWl0JiMzNDssCiAgICAmIzM0O2V4dDRfZmNfaW5pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbW91bnQvcmVjb3ZlcnkgcGF0aCBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2piZDJfam91cm5hbF9sb2FkJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfY29tbWl0JiMzNDssCiAgICAmIzM0O2V4dDRfZmNfaW5pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbW91bnQvcmVjb3ZlcnkgcGF0aCBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQyOTRiMWJjYzg4ZTRlNDNlNWUzZWRkMDcwYWM3MzA0MTMxOTdiN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTozNTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzLi42YzJiMjc1YTljZjMzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC02MDk2LDYgJiM0Mzs2MDk2LDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCWludCBlcnIgPSAwOwogCWludCByZWFsbHlfcmVhZF9vbmx5OwogCWludCBqb3VybmFsX2Rldl9ybzsKJiM0MzsJYm9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIWV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpKQogCQlyZXR1cm4gLUVGU0NPUlJVUFRFRDsKQEAgLTYxNTIsNiAmIzQzOzYxNTMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQl9CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAmIzM0O3dyaXRlIGFjY2VzcyB3aWxsICYjMzQ7CiAJCQkgICAgICAgJiMzNDtiZSBlbmFibGVkIGR1cmluZyByZWNvdmVyeSYjMzQ7KTsKJiM0MzsJCQllbmFibGVfd3JpdGUgPSB0cnVlOwogCQl9CiAJfQogCkBAIC02MTY4LDcgJiM0Mzs2MTcwLDE5IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJaWYgKHNhdmUpCiAJCQltZW1jcHkoc2F2ZSwgKChjaGFyICopIGVzKSAmIzQzOwogCQkJICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXMKJiM0MzsJCSAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seQomIzQzOwkJICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0CiYjNDM7CQkgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXkKJiM0MzsJCSAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZAomIzQzOwkJICogeWV0LCBzbyBub3RoaW5nIGNhbiBvYnNlcnZlIHRoZSB0cmFuc2llbnQgc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChlbmFibGVfd3JpdGUpCiYjNDM7CQkJc2ItJmd0O3NfZmxhZ3MgJmFtcDs9IH5TQl9SRE9OTFk7CiAJCWVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpOwomIzQzOwkJaWYgKGVuYWJsZV93cml0ZSkKJiM0MzsJCQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiAJCWlmIChzYXZlICZhbXA7JmFtcDsgbWVtY21wKCgoY2hhciAqKSBlcykgJiM0MzsgRVhUNF9TX0VSUl9TVEFSVCwKIAkJCQkgICBzYXZlLCBFWFQ0X1NfRVJSX0xFTikpIHsKIAkJCW1lbWNweSgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWQtT25seSBTdXBlcmJsb2NrIEZhc3QgQ29tbWl0IFJlcGxheSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZXh0NF9sb2FkX2pvdXJuYWxgLiBUaGUgY29yZSBpc3N1ZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGlzIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5IGNhbiBmYWlsIG9uIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgYmVjYXVzZSBpdCB0cmllcyB0byBwZXJmb3JtIG1ldGFkYXRhIHVwZGF0ZXMsIHdoaWNoIGFyZSBuYXR1cmFsbHkgYmxvY2tlZCBpbiB0aGF0IG1vZGUuIFRoZSBwYXRjaCYjMzk7cyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiwgYGVuYWJsZV93cml0ZWAsIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIFRoZSBrZXkgbG9naWMgaXMgY29uZGl0aW9uYWwuIElmIHRoZSBzdXBlcmJsb2NrIGlzIHJlYWQtb25seSBidXQgcmVjb3ZlcnkgaXMgbmVlZGVkLCBgZW5hYmxlX3dyaXRlYCBnZXRzIGZsaXBwZWQgdG8gYHRydWVgLiBDcnVjaWFsbHksIGJlZm9yZSBjYWxsaW5nIGBqYmQyX2pvdXJuYWxfbG9hZGAsIGl0ICp0ZW1wb3JhcmlseSogY2xlYXJzIHRoZSBgU0JfUkRPTkxZYCBmbGFnIGZyb20gYHNiLSZndDtzX2ZsYWdzYCBpZiBgZW5hYmxlX3dyaXRlYCBpcyB0cnVlLiBUaGVuLCBhZnRlciB0aGUgam91cm5hbCBsb2FkLCBpdCAqcmUtc2V0cyogYFNCX1JET05MWWAgaWYgdGhlIGZsYWcgd2FzIG1vZGlmaWVkLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IE5vdCBhdCBhbGwuIEl0JiMzOTtzIHNvbGVseSBtYW5pcHVsYXRpbmcgYSBmbGFnIHdpdGhpbiB0aGUgc3VwZXJibG9jayBzdHJ1Y3R1cmUgKGBzYi0mZ3Q7c19mbGFnc2ApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgYGVuYWJsZV93cml0ZWAgaXMgaW5pdGlhbGl6ZWQgZXhwbGljaXRseS4gVGhlIGNvZGUgaXMgb25seSBhbHRlcmluZyBhIGZsYWcuIEkgZG9uJiMzOTt0IHNlZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGNvZGUgc25pcHBldDoKCmBgYGMKCWJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7Ci4uLgoJCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAmIzM0O3dyaXRlIGFjY2VzcyB3aWxsICYjMzQ7CgkJCSAgICAgICAmIzM0O2JlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5JiMzNDspOwomIzQzOwkJCWVuYWJsZV93cml0ZSA9IHRydWU7Ci4uLgomIzQzOwkJaWYgKGVuYWJsZV93cml0ZSkKJiM0MzsJCQlzYi0mZ3Q7c19mbGFncyAmYW1wOz0gflNCX1JET05MWTsKIAkJZXJyID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7CiYjNDM7CQlpZiAoZW5hYmxlX3dyaXRlKQomIzQzOwkJCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKYGBgCgpJdCYjMzk7cyBwdXJlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGNvZGUgY2xlYW5seSBoYW5kbGVzIGEgZmxhZyBtb2RpZmljYXRpb24sIHRlbXBvcmFyaWx5IGRpc2FibGluZyBhIHdyaXRlLXByb3RlY3Rpb24uIE5vIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzIGluIHRoZSBtaXguIENvbnNlcXVlbnRseSwgSSBkb24mIzM5O3QgdGhpbmsgd2UgbmVlZCB0byB0ZXN0IHRoaXMgcGF0Y2ggd2l0aCBLTVNBTi4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDcuNjI4OTg2NDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MTc4MzYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTowNy42Mjg5OTA2MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODU3Mjc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjM1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IDI0NWY2N2QxMGRlZDMuLjZjMmIyNzVhOWNmMzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTYwOTYsNiArNjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCByZWFsbHlfcmVhZF9vbmx5O1xcbiBcXHRpbnQgam91cm5hbF9kZXZfcm87XFxuK1xcdGJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XFxuQEAgLTYxNTIsNiArNjE1Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcXFwid3JpdGUgYWNjZXNzIHdpbGwgXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcImJlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5XFxcIik7XFxuK1xcdFxcdFxcdGVuYWJsZV93cml0ZSA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNjE2OCw3ICs2MTcwLDE5IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0aWYgKHNhdmUpXFxuIFxcdFxcdFxcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICtcXG4gXFx0XFx0XFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXFxuK1xcdFxcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxcbitcXHRcXHQgKiBzdXBlcmJsb2NrLiAgV2UgcHJvbWlzZWQgd3JpdGUgYWNjZXNzIGFib3ZlLCBzbyBtYWtlIHRoYXRcXG4rXFx0XFx0ICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5XFxuK1xcdFxcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxcbitcXHRcXHQgKiB5ZXQsIHNvIG5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIHRyYW5zaWVudCBzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChlbmFibGVfd3JpdGUpXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjY9IH5TQl9SRE9OTFk7XFxuIFxcdFxcdGVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpO1xcbitcXHRcXHRpZiAoZW5hYmxlX3dyaXRlKVxcbitcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuIFxcdFxcdGlmIChzYXZlIFxcdTAwMjZcXHUwMDI2IG1lbWNtcCgoKGNoYXIgKikgZXMpICsgRVhUNF9TX0VSUl9TVEFSVCxcXG4gXFx0XFx0XFx0XFx0ICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7XFxuIFxcdFxcdFxcdG1lbWNweSgoKGNoYXIgKikgZXMpICsgRVhUNF9TX0VSUl9TVEFSVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDguOTE1NDI4MzAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzI0MzgwNTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MzU6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDMuLjZjMmIyNzVhOWNmMzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTYwOTYsNiArNjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IHJlYWxseV9yZWFkX29ubHk7XG4gXHRpbnQgam91cm5hbF9kZXZfcm87XG4rXHRib29sIGVuYWJsZV93cml0ZSA9IGZhbHNlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkpXG4gXHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuQEAgLTYxNTIsNiArNjE1Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHR9XG4gXHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXCJ3cml0ZSBhY2Nlc3Mgd2lsbCBcIlxuIFx0XHRcdCAgICAgICBcImJlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5XCIpO1xuK1x0XHRcdGVuYWJsZV93cml0ZSA9IHRydWU7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02MTY4LDcgKzYxNzAsMTkgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRpZiAoc2F2ZSlcbiBcdFx0XHRtZW1jcHkoc2F2ZSwgKChjaGFyICopIGVzKSArXG4gXHRcdFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcbitcdFx0LypcbitcdFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXG4rXHRcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxuK1x0XHQgKiBzdXBlcmJsb2NrLiAgV2UgcHJvbWlzZWQgd3JpdGUgYWNjZXNzIGFib3ZlLCBzbyBtYWtlIHRoYXRcbitcdFx0ICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5XG4rXHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxuK1x0XHQgKiB5ZXQsIHNvIG5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIHRyYW5zaWVudCBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGlmIChlbmFibGVfd3JpdGUpXG4rXHRcdFx0c2ItXHUwMDNlc19mbGFncyBcdTAwMjY9IH5TQl9SRE9OTFk7XG4gXHRcdGVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpO1xuK1x0XHRpZiAoZW5hYmxlX3dyaXRlKVxuK1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuIFx0XHRpZiAoc2F2ZSBcdTAwMjZcdTAwMjYgbWVtY21wKCgoY2hhciAqKSBlcykgKyBFWFQ0X1NfRVJSX1NUQVJULFxuIFx0XHRcdFx0ICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7XG4gXHRcdFx0bWVtY3B5KCgoY2hhciAqKSBlcykgKyBFWFQ0X1NfRVJSX1NUQVJULFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDguOTE1NDI5NDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4NTE0NTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGV4dDQgSm91cm5hbCBMb2FkaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvZXh0NC9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9sb2FkX2pvdXJuYWwoKWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgcGF0Y2ggaXMgY29uZGl0aW9uYWxseSBjbGVhcmluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBmcm9tIHRoZSBzdXBlcmJsb2NrJ3MgZmxhZ3MgKGBzYi1cdTAwM2VzX2ZsYWdzYCkgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpYCBhbmQgdGhlbiByZXN0b3JpbmcgaXQuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHRvIGFsbG93IGZhc3QgY29tbWl0IHJlcGxheSB0byB0b3VjaCBtZXRhZGF0YSBldmVuIG9uIHdoYXQncyBlc3NlbnRpYWxseSBhIHJlYWQtb25seSBmaWxlc3lzdGVtLCByaWdodD8gSW50ZXJlc3RpbmcuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuV2h5PyBXZWxsLCBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBKb3VybmFsIGxvYWRpbmcgaXMgYSBjcml0aWNhbCBwcm9jZXNzIGFuZCBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZGVmaW5pdGVseSBleGVyY2lzZS4gQW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHRoYXQgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IHdlIHdhbnQgd2hlbiBodW50aW5nIGZvciBvYnNjdXJlIGVkZ2UgY2FzZXMuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSBleHQ0IGZvciB0aGUgZnV6emluZyBzZXR1cC4gTGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSB0byBlbmFibGUsIG9mIGNvdXJzZS4gVGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGZsYWdzIGFuZCBjb25kaXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGpvdXJuYWwgbG9hZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjE0LjEwMDU3NzM3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA2MjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2xvYWRfam91cm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTY2PXN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdDtcXG5mcy9leHQ0L3N1cGVyLmMtNjctXFxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXFxuZnMvZXh0NC9zdXBlci5jLTY5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBqb3VybmFsX2Rldm51bSk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nj1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDk2Mi1cXG5mcy9leHQ0L3N1cGVyLmM6NDk2MzpcXHRlcnIgPSBleHQ0X2xvYWRfam91cm5hbChzYiwgZXMsIGN0eC1cXHUwMDNlam91cm5hbF9kZXZudW0pO1xcbmZzL2V4dDQvc3VwZXIuYy00OTY0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjA1MD1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MDg4LVxcbmZzL2V4dDQvc3VwZXIuYzo2MDg5OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNjA5MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MTQuMTQ0NjQ0OTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzYzMjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqVHJhY2luZyB0aGUgRXh0NCBKb3VybmFsIExvYWRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLiBBbmQgaXQncyBjYWxsZWQgYnkgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gSG1tLCB0aGF0IGxpbWl0cyBvdXIgYWJpbGl0eSB0byB0cmFjZSBpdCBkaXJlY3RseSBmcm9tIGEgaGlnaGVyIGxldmVsLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgKnBhdGgqIHRvIHRoaXMgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgb3IsIGlkZWFsbHksIGFuICplbnRyeSBwb2ludCogaW50byB0aGUgam91cm5hbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIOKAkyBmcm9tIHdoaWNoIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hlbiBhbmQgaG93IHRoZSBqb3VybmFsIGlzIGFjdHVhbGx5IGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRyYWNpbmcgdXB3YXJkcywgbG9va2luZyBmb3IgdGhlIHBsYWNlIHRoaXMgd2hvbGUgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlIGlzIGluaXRpYXRlZC4gSSdsbCBmb2N1cyBvbiBmaW5kaW5nIHRoZSBmaXJzdCBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MTcuNzg4Mjc5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNjQ4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz00ODk2PXN0YXRpYyBpbnQgZXh0NF9ncm91cF9kZXNjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00OTU1LVxcbmZzL2V4dDQvc3VwZXIuYzo0OTU2OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNDk1Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTExLVxcdGlmICghdGVzdF9vcHQoc2IsIE5PTE9BRCkgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NTEyOlxcdFxcdGVyciA9IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHNiLCBlcywgY3R4KTtcXG5mcy9leHQ0L3N1cGVyLmMtNTUxMy1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNToxNy44MzY1NDc0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTkwNTUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgRW50cnkgUG9pbnQgQW5hbHlzaXM6IGBleHQ0X2ZpbGxfc3VwZXJgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGV4dDQgbW91bnRpbmcgcHJvY2Vzcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbSBtb3VudC4gSXQgbG9va3MgbGlrZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBleHQ0X2ZpbGxfc3VwZXJgIGlzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNToyMC42OTU2MDUzOTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTExOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTMzMT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTMzNy1cXG5mcy9leHQ0L3N1cGVyLmM6NTMzODpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNTMzOS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc1MT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MDctXFxuZnMvZXh0NC9zdXBlci5jOjU4MDg6c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODA5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODI3LVxcbmZzL2V4dDQvc3VwZXIuYzo1ODI4OlxcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XFxuZnMvZXh0NC9zdXBlci5jLTU4MjktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTg1OD1zdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODU5LXtcXG5mcy9leHQ0L3N1cGVyLmM6NTg2MDpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgZXh0NF9maWxsX3N1cGVyKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTg2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjIwLjc0MTgwMzI1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Mzc0MDg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gdGhlIEVYVDQgTW91bnQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEVYVDQgdnVsbmVyYWJpbGl0eSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXR0YWNrIHN1cmZhY2UgZm9yIGZ1enppbmcuICpleHQ0X2ZpbGxfc3VwZXIqIGlzIHN0YXRpYywgaG1tLCBub3QgaGVscGZ1bCBkaXJlY3RseS4gQW5kIHRoZSByZWFsIGVudHJ5IHBvaW50LCAqZXh0NF9nZXRfdHJlZSosIGlzIGFsc28gZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCBob2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfZ2V0X3RyZWUqIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgZnNfY29udGV4dF9vcGVyYXRpb25zYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLlxuXG5MZXQncyBzZWUuLi4gKmV4dDRfbW91bnQqPyBObywgc3RpbGwgc3RhdGljLiBSaWdodCwgaXQncyAqZXh0NF9nZXRfdHJlZSouIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfbG9hZF9qb3VybmFsKiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQhIEZ1enppbmcgdGhlIG1vdW50IHByb2Nlc3MgaXRzZWxmLCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIGFwcHJvYWNoLiBBIGZ1enppbmcgaGFybmVzcyBmb2N1c2VkIG9uIGZpbGUgc3lzdGVtIG1vdW50aW5nIHNlZW1zIGxpa2UgdGhlIHdheSB0byBnby5cblxuTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBBaCwgdGhlIHBhdGNoIG1lbnRpb25zICpleHQ0X2ZjX3JlcGxheSgpKi4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IGZ1bmN0aW9uIHRvby4gSXQncyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHJlZ2FyZGxlc3Mgb2YgbW91bnQgdGltZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MjYuNTc5MjE3MTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE4MTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZjX3JlcGxheVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTg2MS0jZW5kaWZcXG5mcy9leHQ0L2V4dDQuaDoxODYyOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSBzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2V4dDQuaC0xODYzLX07XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zMDY4PXZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6MzA2OTpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayk7XFxuZnMvZXh0NC9leHQ0Lmg6MzA3MDp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9leHQ0LmgtMzA3MS1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODA0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX2dldF90bChzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTMtLyogVW5saW5rIHJlcGxheSBmdW5jdGlvbiAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODE0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfdW5saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgyMy1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgyNDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVU5MSU5LLCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgyNS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODUyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODUzOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODU0LVxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnlfaW5mb19hcmdzICpkYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4ODgtLyogTGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4OTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk2LVxcdHRsX3RvX2RhcmcoXFx1MDAyNmRhcmcsIHRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk3OlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19MSU5LLCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5OC1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTA2OlxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFxcdTAwMjZkYXJnLCBpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDctXFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTYte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTE3OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTgtXFx0aW50IGk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk0My0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk0NDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDUtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTU4LVxcdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NTk6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2MC1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ5LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTEtXFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA1OS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA2MDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQ1JFQVQsIGRhcmcuaW5vLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDYxLVxcdFxcdFxcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTItXFx0fVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDkzOlxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFxcdTAwMjZkYXJnLCBpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTA4PWludCBleHQ0X2ZjX3JlY29yZF9yZWdpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8sXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjExMC17XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMTE6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjExMi1cXHRzdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24gKnJlZ2lvbjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ3LS8qIFJlcGxheSBhZGQgcmFuZ2UgdGFnICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE2MzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQUREX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTY0LVxcdFxcdGxlMzJfdG9fY3B1KGZjX2FkZF9leC5mY19pbm8pLCBsZTMyX3RvX2NwdShleC1cXHUwMDNlZWVfYmxvY2spLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyNjc9c3RhdGljIGludFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjY4OmV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjY5LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjc5LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjgwOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19ERUxfUkFOR0UsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyODEtXFx0XFx0bGUzMl90b19jcHUobHJhbmdlLmZjX2lubyksIGN1ciwgcmVtYWluaW5nKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjkte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzMwOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMzEtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg2LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzg3OmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsaylcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OC17XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODktXFx0aW50IGk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTA6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5MS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA0LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDA1OnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA2LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE0PXN0YXRpYyBib29sIGV4dDRfZmNfdmFsdWVfbGVuX2lzdmFsaWQoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTctICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NTg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWxfdCAqam91cm5hbCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgb2ZmLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjMtXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjQ6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2NS1cXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU3Mi1vdXRfZXJyOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5X3NjYW4oc2IsIHJldCwgb2ZmKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODE6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODItXFx0XFx0XFx0XFx0ZW51bSBwYXNzdHlwZSBwYXNzLCBpbnQgb2ZmLCB0aWRfdCBleHBlY3RlZF90aWQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4OC1cXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODk6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZSA9IFxcdTAwMjZzYmktXFx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkwLVxcdHN0cnVjdCBleHQ0X2ZjX3RhaWwgdGFpbDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkzLVxcdFxcdHN0YXRlLVxcdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBQQVNTX1NDQU47XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTQ6XFx0XFx0cmV0dXJuIGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbCwgYmgsIG9mZiwgZXhwZWN0ZWRfdGlkKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5NS1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzMS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0xJTks6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MzI6XFx0XFx0XFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGluayhzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMzLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM0LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfVU5MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjM1OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X3VubGluayhzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM2LVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM3LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfQUREX1JBTkdFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjM4OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzYiwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzOS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MC1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0NSRUFUOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQxOlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQyLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQzLVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfREVMX1JBTkdFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ0OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzYiwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0NS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ni1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0lOT0RFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ3OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2lub2RlKHNiLCBcXHUwMDI2dGwsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDgtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDktXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19QQUQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTA6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1BBRCwgMCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1MS1cXHRcXHRcXHRcXHRcXHQgICAgIHRsLmZjX2xlbiwgMCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1My1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1RBSUw6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1RBSUwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTUtXFx0XFx0XFx0XFx0XFx0ICAgICAwLCB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjEtXFx0XFx0ZGVmYXVsdDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY2MjpcXHRcXHRcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGwuZmNfdGFnLCAwLCB0bC5mY19sZW4sIDApO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjYzLVxcdFxcdFxcdHJldCA9IC1FQ0FOQ0VMRUQ7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3OS1cXHQgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MDpcXHRqb3VybmFsLVxcdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgxLVxcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xMzk9c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uIHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDctICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE0ODpzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDktXFx0aW50IGZjX3JlcGxheV9udW1fdGFncztcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYxNjI9ZXh0NF9tYl9uZXdfYmxvY2tzX3NpbXBsZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgKmFyLCBpbnQgKmVycnApXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MTkzLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYxOTQ6XFx0XFx0XFx0aWYgKGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHNiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTUtXFx0XFx0XFx0XFx0ZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApICtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU2MzctXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NjM4OlxcdGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01NjM5LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYwODk9c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTYxNzQtXFx0XFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXFxuZnMvZXh0NC9zdXBlci5jOjYxNzU6XFx0XFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XFxuZnMvZXh0NC9zdXBlci5jLTYxNzYtXFx0XFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjI2LjY1NzQwMzkwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgzMzUzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBKb3VybmFsIExvYWRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgYW5kIGZhc3QgY29tbWl0IHJlcGxheSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGZydWl0ZnVsIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbSBzZWVpbmcgdGhhdCB0aGUgY29yZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb24sIGBleHQ0X2ZjX3JlcGxheWAsIGlzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2tgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLlxuXG5NeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBqb3VybmFsIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIGBqYmQyX2pvdXJuYWxfbG9hZGAsIHdoaWNoIGNhbGxzIHRoZSByZXBsYXkgY2FsbGJhY2suIE5vdywgbXkgY29uY2VybiB3aXRoIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgdGhhdCBpdCdzIHdpdGhpbiBgZnMvamJkMi9qb3VybmFsLmNgLCBhbmQgc28gaXMgcHJvYmFibHkgbm90IHdoYXQgSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4uXG5cbkkgd2FzIG9yaWdpbmFsbHkgY2hlY2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3ZSBjYW4gZm9jdXMgb24uIGBleHQ0X2xvYWRfam91cm5hbGAsIGBleHQ0X2ZpbGxfc3VwZXJgLCBhbmQgYGV4dDRfZ2V0X3RyZWVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5IGFyZSBub3QgdmVyeSBsaWtlbHkgZW50cnkgcG9pbnRzLiBgZXh0NF9mY19pbml0YCBpcyBub24tc3RhdGljLCBidXQgaXQgaXMgdW5saWtlbHkgdG8gaGF2ZSBhIGNsb3NlIGNvbm5lY3Rpb24gdG8gdGhlIGBtb3VudGAgcHJvY2Vzcy5cblxuTXkgc3RyYXRlZ3kgbm93IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1vdW50aW5nIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuY292ZXIgYW55IHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgdGhlIGpvdXJuYWwgbG9hZGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjMxLjU0MDc2MTYwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzQyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZXh0NF8uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTg0PXZvaWQgZXh0NF9yZWFkX2JoX25vd2FpdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk1LVxcbmZzL2V4dDQvc3VwZXIuYzoxOTY6aW50IGV4dDRfcmVhZF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuZnMvZXh0NC9zdXBlci5jLTE5Ny1cXHRcXHQgYmlvX2VuZF9pb190IGVuZF9pbywgYm9vbCBzaW11X2ZhaWwpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjEzLVxcbmZzL2V4dDQvc3VwZXIuYzoyMTQ6aW50IGV4dDRfcmVhZF9iaF9sb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncywgYm9vbCB3YWl0KVxcbmZzL2V4dDQvc3VwZXIuYy0yMTUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMwOTE9c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMDk1LVxcbmZzL2V4dDQvc3VwZXIuYzozMDk2OmludCBleHQ0X3NlcV9vcHRpb25zX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldClcXG5mcy9leHQ0L3N1cGVyLmMtMzA5Ny17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzEwNz1zdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTMxNjQtXFxuZnMvZXh0NC9zdXBlci5jOjMxNjU6aW50IGV4dDRfYWxsb2NfZmxleF9iZ19hcnJheShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3Qgbmdyb3VwKVxcbmZzL2V4dDQvc3VwZXIuYy0zMTY2LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zMjQ2PXN0YXRpYyBfX2xlMTYgZXh0NF9ncm91cF9kZXNjX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzI4OS1cXG5mcy9leHQ0L3N1cGVyLmM6MzI5MDppbnQgZXh0NF9ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxcbmZzL2V4dDQvc3VwZXIuYy0zMjkxLVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dDRfZ2V0X3N0cmlwZV9zaXplKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNjIyLSAqL1xcbmZzL2V4dDQvc3VwZXIuYzozNjIzOmludCBleHQ0X2ZlYXR1cmVfc2V0X29rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZWFkb25seSlcXG5mcy9leHQ0L3N1cGVyLmMtMzYyNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDAxND1zdGF0aWMgc3RydWN0IGV4dDRfbGlfcmVxdWVzdCAqZXh0NF9saV9yZXF1ZXN0X25ldyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwNDAtXFxuZnMvZXh0NC9zdXBlci5jOjQwNDE6aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00MDQyLVxcdFxcdFxcdCAgICAgZXh0NF9ncm91cF90IGZpcnN0X25vdF96ZXJvZWQpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDE3MD1zdGF0aWMgaW50IGNvdW50X292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncnAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDIzMi0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NDIzMzppbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDIzNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjQwMj1zdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NDQ1LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo2NDQ2OmludCBleHQ0X2ZvcmNlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy02NDQ3LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03MjI0PXN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzI2NC0vKiBFbmFibGUgdXNhZ2UgdHJhY2tpbmcgZm9yIGFsbCBxdW90YSB0eXBlcy4gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NzI2NTppbnQgZXh0NF9lbmFibGVfcXVvdGFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTcyNjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTozMS42NTMxMDg3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI2NTkyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgRXh0NCBjb2RlIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyB0aGUga2V5IGVudHJ5IHBvaW50LCB0aGUgb25lIHRoZXkncmUgdXNpbmcgdG8gaGFuZGxlIHRoZSBtb3VudGluZyBjb250ZXh0LiBJbnRlcmVzdGluZyB0aGF0IGl0J3Mgbm90IHN0YXRpYy4gSG93ZXZlciwgSSBub3RpY2VkIHRoYXQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQgZnJvbSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhhdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIGpvdXJuYWwgaXMgaGFuZGxlZC4gSG1tLCBpcyBgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWxgIG9yIGBleHQ0X2xvYWRfam91cm5hbGAgYWN0dWFsbHkgZXhwb3J0ZWQ/IEkgZG9uJ3QgKnRoaW5rKiBzbywgYnV0IGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBTaW5jZSB0aGUgam91cm5hbCBpcyBpbXBvcnRhbnQsIHBlcmhhcHMgaXQgaXMgdXNlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIExldCdzIHNlZS4uLiBubywgdGhvc2UgYXJlbid0IGV4cG9ydGVkLi4uIE9rYXksIGxldCBtZSBwaXZvdCBvdmVyIHRvIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBJIG5lZWQgdG8gc2VlIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGtpY2tpbmcgYXJvdW5kIGluIHRoYXQgYXJlYSwgc2luY2UgaXQgZGVhbHMgd2l0aCBqb3VybmFsIGhhbmRsaW5nIHRvby4gUGVyaGFwcyB0aGUgYW5zd2VyIGlzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjM1Ljg3OTcwNDYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzE5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBleHQ0X2ZjXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTUzPXN0YXRpYyB2b2lkIGV4dDRfZmNfdXBkYXRlX3N0YXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzdGF0dXMsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU4NS0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU4NjppbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg3LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMDUwPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEwNy0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjEwODppbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA5LVxcdFxcdGV4dDRfbGJsa190IGxibGssIGV4dDRfZnNibGtfdCBwYmxrLCBpbnQgbGVuLCBpbnQgcmVwbGF5KVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2ODY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmY19pbmVsaWdpYmxlX3JlYXNvbnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzAxLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNzAyOmludCBleHQ0X2ZjX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjcwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjM1Ljk2Mzc0MTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjAxMTY4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbmNlcm5pbmcgRmlsZSBDcmVhdGlvbiBhbmQgRXh0NCdzIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBleHQ0X2ZjX2NvbW1pdGAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgdXNlLiBXaGF0J3MgaXQgZG9pbmcgdGhhdCBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIG1vZHVsZT8gSXMgaXQgYmVpbmcgY2FsbGVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIGNvZGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgZ2VuZXJhbCBmcmFtZXdvcms/IFRoaXMgaXNuJ3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBkZXNpZ24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBkYXRhIHByb3RlY3Rpb24uXG5cblRoZW4sIG15IG1pbmQgZHJpZnRzIHRvIGBleHQ0X2ZjX2luaXRgLiBJcyAqdGhhdCogYWxzbyBub24tc3RhdGljPyBJZiBpdCBpcywgdGhlbiB0aGUgaW1wbGljYXRpb25zIG9mIGBleHQ0X2ZjX2NvbW1pdGAgYmVpbmcgbm9uLXN0YXRpYyBhcmUgZXZlbiBncmVhdGVyLiBJdCBwb2ludHMgdG93YXJkIG1vcmUgc29waGlzdGljYXRlZCBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzOyBpdCBtYXkgYmUgdGhhdCBib3RoIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBhbmQgbWlnaHQgc2hhcmUgZGF0YSB0byBpbml0aWFsaXplIGZpbGUgY3JlYXRpb24sIGFuZCBwcmVwYXJlIGZvciBjb21taXR0ZWQgY2hhbmdlcy4gSWYgc28sIHdoeSBpc24ndCB0aGUgc2NvcGUgY29udHJvbGxlZD8gSWYgaXQgaXMgc3RhdGljLCB0aGVuIGl0IGlzIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIElmIGl0J3Mgbm90LCBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIGRldGVybWluZSB3aHkgdGhvc2UgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIG1hZGUuIFRoZXJlJ3MgcHJvYmFibHkgYSBnb29kIHJlYXNvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY29ycmVjdCwgY29uc2lkZXJpbmcgdGhlIG92ZXJhbGwgZGVzaWduIG9mIEV4dDQgYW5kIGl0J3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTozOS42MjM4NjIxNzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzY2MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGV4dDRfZmNfLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyND1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyOnZvaWQgZXh0NF9mY19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMy17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9Mjg3PXN0YXRpYyB2b2lkIGV4dDRfZmNfc25hcF9zdGF0c191cGRhdGVfbWF4KGF0b21pYzY0X3QgKnN0YXQsIHU2NCB2YWx1ZSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDMtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjMwNDp2b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTMwNS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMzY3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzozNjg6dm9pZCBleHQ0X2ZjX21hcmtfaW5lbGlnaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVhc29uLCBoYW5kbGVfdCAqaGFuZGxlKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjkte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTUxNj12b2lkIF9fZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01MjktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjUzMDp2b2lkIGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTMxLXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz01Mzg9dm9pZCBfX2V4dDRfZmNfdHJhY2tfbGluayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1MS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTUyOnZvaWQgZXh0NF9mY190cmFja19saW5rKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1My1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NTU5PXZvaWQgX19leHQ0X2ZjX3RyYWNrX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU3Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTczOnZvaWQgZXh0NF9mY190cmFja19jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01NzQte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTU4Mj1zdGF0aWMgaW50IF9fdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU5Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTkzOnZvaWQgZXh0NF9mY190cmFja19pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01OTQte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTYyOT1zdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY1Ni1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NjU3OnZvaWQgZXh0NF9mY190cmFja19yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU4LVxcdFxcdFxcdCBleHQ0X2xibGtfdCBlbmQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjM4Nz1ib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjczOnZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9Mjc1Nj1pbnQgX19pbml0IGV4dDRfZmNfaW5pdF9kZW50cnlfY2FjaGUodm9pZClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzcyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNzczOnZvaWQgZXh0NF9mY19kZXN0cm95X2RlbnRyeV9jYWNoZSh2b2lkKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MzkuNzAzMjMzNDc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5Nzc2MjY5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBJc3N1ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByb2JsZW0gd2l0aGluIGBleHQ0X2xvYWRfam91cm5hbGAsIHNwZWNpZmljYWxseSBpbiBgZnMvZXh0NC9zdXBlci5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmYXN0IGNvbW1pdCByZXBsYXkgZmFpbGluZyBiZWNhdXNlIG9mIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBleHQ0X2ZpbGxfc3VwZXJgIG9yIGBleHQ0X2dldF90cmVlYCB3aXRoIGZ1enppbmcuIFRob3NlIHNlZW0gbGlrZSBvYnZpb3VzIHRhcmdldHMgZ2l2ZW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIHRob3NlIGFyZSBzdGF0aWMgYW5kIEkgY2FuJ3QgcmVhbGx5IGdldCBhdCB0aG9zZS4gSSBuZWVkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQuIEkgY2FuIGhpdCBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBhbmQgYGV4dDRfZmNfY29tbWl0YC5cblxuV2FpdCBhIG1pbnV0ZSwgdGhlIGlzc3VlIGlzIGhhcHBlbmluZyBkdXJpbmcgbW91bnQsIGFuZCBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIHBhcnQgb2YgdGhhdCBwcm9jZXNzLiBTbyBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gdGhlIG1vdW50IHNlcXVlbmNlLiBUaGlua2luZyBhYm91dCBob3cgdGhlIGZzIGNvbnRleHQgZ2V0cyBpbml0aWFsaXplZCBkdXJpbmcgdGhlIG1vdW50LCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzIHRoZSBvbmUuIExldCBtZSBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgYW5kIGxvb2sgZm9yIGBleHQ0X2dldF90cmVlYCwganVzdCBpbiBjYXNlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjQ2LjY4MDg2MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTY1MTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2dldF90cmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9OTE9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbmZzL2V4dDQvc3VwZXIuYzo5MjpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTEyNi1cXHQucGFyc2VfcGFyYW1cXHQ9IGV4dDRfcGFyc2VfcGFyYW0sXFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcXHQuZ2V0X3RyZWVcXHQ9IGV4dDRfZ2V0X3RyZWUsXFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cXHQucmVjb25maWd1cmVcXHQ9IGV4dDRfcmVjb25maWd1cmUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTgwOD1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg1Ny1cXG5mcy9leHQ0L3N1cGVyLmM6NTg1ODpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NDcuNDY2NTIwOTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzY3MDMxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBleHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGV4dDRgIGNvZGUgYW5kIEkgc2VlIHRoYXQgYGV4dDRfZ2V0X3RyZWVgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0J3MgcHJvYmFibHkgb25seSB1c2VkIHdpdGhpbiB0aGUgYGV4dDRgIG1vZHVsZSBpdHNlbGYsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXMgSSB0cmFjZSB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBkYXRhIGl0IHJlbGllcyB1cG9uLlxuXG5Ob3csIG15IG1pbmQgd2FuZGVycy4gSWYgYGV4dDRfZ2V0X3RyZWVgIGlzIHN0YXRpYywgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgY29tZSBpbnRvIGJlaW5nLCBhbmQgd2hlcmUgYGV4dDRfZ2V0X3RyZWVgIGZpdHMgaW50byB0aGF0IGxhcmdlciBwaWN0dXJlLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgPyBUaGF0IHNvdW5kcyBsaWtlIGEgbXVjaCBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGJlaW5nIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhcnR1cC4gSXQgaXMsIGFmdGVyIGFsbCwgbmFtZWQgKmluaXQqIGFuZCAqZnNfY29udGV4dCogLSB0aGF0IGhhcyB0byBiZSB0aGUgcGxhY2UgSSBmb2N1cyBvbiBuZXh0LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0J3Mgd2hlcmUgdGhlICpyb290KiBvZiB0aGUgZmlsZXN5c3RlbSB0cmVlIGlzIHVsdGltYXRlbHkgY29uc3RydWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTEuNTQzMjI2NTM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU3NzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTk0PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYzo5NTpzdGF0aWMgaW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jLTk2LXN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMzQ9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzYtXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQyXFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6MTM3OlxcdC5pbml0X2ZzX2NvbnRleHRcXHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxcbmZzL2V4dDQvc3VwZXIuYy0xMzgtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQzX2ZzX3R5cGUgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTUyLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZXh0M1xcXCIsXFxuZnMvZXh0NC9zdXBlci5jOjE1MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcXG5mcy9leHQ0L3N1cGVyLmMtMTU0LVxcdC5wYXJhbWV0ZXJzXFx0XFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTc1MTk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy03NTIxLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZXh0NFxcXCIsXFxuZnMvZXh0NC9zdXBlci5jOjc1MjI6XFx0LmluaXRfZnNfY29udGV4dFxcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXh0NC9zdXBlci5jLTc1MjMtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjUxLjYzNjgwOTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk3OTQ1MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBNb3VudCBDb250ZXh0IGFuZCBGYXN0IENvbW1pdCBSZXBsYXkqKlxuXG5Pa2F5LCBzbyBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzbid0IHN0YXRpYywgbWVhbmluZyBpdCdzIHRoZSBnYXRld2F5IGZvciBoYW5kbGluZyBtb3VudCBvcHRpb25zLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQ6IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNwZWVkaW5nIHVwIGNvbW1pdCByZXBsYXkuIFRoaXMgbWFrZXMgbWUgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGpvdXJuYWwgaGFuZGxpbmcuIE15IG5leHQgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYGZzL2piZDIvam91cm5hbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBqYmQyX2pvdXJuYWxfbG9hZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgam91cm5hbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZHVyaW5nIGEgY29tbWl0IHJlcGxheS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTUuNDM0NzU3ODE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjMxNTIxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiamJkMl9qb3VybmFsX2xvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9qb3VybmFsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamJkMi9qb3VybmFsLmM9NzU9RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKTtcXG5mcy9qYmQyL2pvdXJuYWwuYzo3NjpFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9sb2FkKTtcXG5mcy9qYmQyL2pvdXJuYWwuYy03Ny1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9kZXN0cm95KTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTIwNTA9RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfdXBkYXRlX3NiX2Vycm5vKTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTIwNTItLyoqXFxuZnMvamJkMi9qb3VybmFsLmM6MjA1MzogKiBqYmQyX2pvdXJuYWxfbG9hZCgpIC0gUmVhZCBqb3VybmFsIGZyb20gZGlzay5cXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU0LSAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGFjdCBvbi5cXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTIwNTktICovXFxuZnMvamJkMi9qb3VybmFsLmM6MjA2MDppbnQgamJkMl9qb3VybmFsX2xvYWQoam91cm5hbF90ICpqb3VybmFsKVxcbmZzL2piZDIvam91cm5hbC5jLTIwNjEte1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MjQwOT1pbnQgamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMjQ4NS0gKiBhIHdhcm5pbmcgaWYgdGhlIGpvdXJuYWwgY29udGFpbnMgYW55IHZhbGlkIHJlY292ZXJ5IGluZm9ybWF0aW9uLlxcbmZzL2piZDIvam91cm5hbC5jOjI0ODY6ICogTXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBqb3VybmFsX2luaXRfKigpIGFuZCBqYmQyX2pvdXJuYWxfbG9hZCgpLlxcbmZzL2piZDIvam91cm5hbC5jLTI0ODctICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTUuOTk3OTE3NzIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDEwNTI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBKb3VybmFsIExvYWRpbmcgRml4IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gZXh0NCdzIGpvdXJuYWwgbG9hZGluZywgc3BlY2lmaWNhbGx5IHdoZW4gZmFzdCBjb21taXQgcmVwbGF5IGdvZXMgc2lkZXdheXMgYmVjYXVzZSB0aGUgc3VwZXJibG9jayBpcywgdW5kZXJzdGFuZGFibHksIHJlYWQtb25seS4gVGhlIGZpeCBpbnZvbHZlcyBjb25kaXRpb25hbGx5IGNsZWFyaW5nIGBTQl9SRE9OTFlgIGZyb20gYHNiLVx1MDAzZXNfZmxhZ3NgIGlmIGBlbmFibGVfd3JpdGVgIGlzIHRydWUuIEhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIGNsYXNzaWMgc2NlbmFyaW8gcmlwZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUgd2hlcmUgdGhpbmdzIG1pZ2h0IGdldCBzdWJ0bHkgY29uZnVzZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSdtIHRoaW5raW5nIHRoaXMgZGVzZXJ2ZXMgc29tZSBzZXJpb3VzIGF0dGVudGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIHJ1biB0aGlzIHRocm91Z2ggdGhlIGZ1enplci4gVGhlIG9ubHkgY29uZmlnIEkgdGhpbmsgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGlzIGBFWFQ0X0ZTYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNvbmZpZyByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjU5Ljk5ODk3MzQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NzAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMDgtXFxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyMz1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE2My0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxNjQ6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTY1LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTY5LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxNzA6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE3MS0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjI3NT1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMjc2OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjI3Ny1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDUte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDctXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MDk9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzOS1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDQwOlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NDEtXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1ND1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5MC1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDkxOlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTItXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU4Nj1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1OTY6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDUyPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ2MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDA4OlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMDktXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ni0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk0NzpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ4LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwNy1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MDg6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDA5LVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NTY9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5NzktXFxuZnMvZXh0NC9zdXBlci5jOjQ5ODA6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk4MS1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTgyOlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00OTgzLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDQwPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDctXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNDg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNDktXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTM2LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1Mzc6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1MzgtXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjowMC4wNjU5NTAyNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2MTI2MTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGZhc3QgY29tbWl0IHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24g4oCTIGl0J3MgZGVmaW5pdGVseSBgRVhUNF9GU2AuIFRoZXJlJ3Mgbm8gc2VwYXJhdGUgZmFzdCBjb21taXQgY29uZmlndXJhdGlvbiwgYXMgSSByZWNhbGwsIGl0J3MgaGFuZGxlZCB2aWEgbW91bnQgb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBleHQ0X2xvYWRfam91cm5hbGAgd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBleHQ0X2ZjX2luaXRgLCBgZXh0NF9mY19yZXBsYXlfY2xlYW51cGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGFuZCBgZXh0NF9mY19pbmZvX3Nob3dgIGFzIGtleSBzeW1ib2xzLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgYnVnIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3Mgd2hlbiBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIGNhbGxlZC4gU28sIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJIGFtIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiBtb3VudC5cblxuTGV0J3Mgc2Vl4oCmIEkgc2VlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgaW52b2x2ZWQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBgZnMvZXh0NC9zdXBlci5jYCBmb3IgYGV4dDRfZ2V0X3RyZWVgLiBXYWl0LCBpcyBgamJkMl9qb3VybmFsX2xvYWRgIGNhbGxlZCBmcm9tIGBleHQ0X2xvYWRfam91cm5hbGA/IFllcywgSSBzZWUgaXQncyBleHBvcnRlZC4gVGhhdCBtYWtlcyBgamJkMl9qb3VybmFsX2xvYWRgIGEgdmVyeSBwcm9taXNpbmcgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbmQsIGBleHQ0X2ZjX3JlcGxheWAgaXMgYSBjYWxsYmFjaywgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gcHJvYmFibHkgbm90IGRpcmVjdGx5IHJlbGV2YW50LlxuXG5Pa2F5LCBsZXQncyBub3cgbG9vayBhdCBgamJkMl9qb3VybmFsX2xvYWRgIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AuIEkgd2lsbCBhZGQgYGpiZDJfam91cm5hbF9sb2FkYCBhbmQgYGV4dDRfaW5pdF9mc19jb250ZXh0YC4gV2FpdCwgaGFuZyBvbi4uLiBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzIGp1c3QgYWxsb2NhdGluZyB0aGUgY29udGV4dCwgc28gbm90IHRoYXQgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLlxuXG5XaGF0IGFib3V0IGBleHQ0X2ZjX2NvbW1pdGA/IFllcCwgdGhhdCdzIG5vbi1zdGF0aWMuIExldCdzIGxvb2sgYXQgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIE5vdywgSSdsbCBhZGQgYGpiZDJfam91cm5hbF9sb2FkYCwgYGV4dDRfZmNfY29tbWl0YCwgYGV4dDRfZmNfaW5pdGAsIGFuZCBgZXh0NF9mY19yZXBsYXlfY2xlYW51cGAgdG8gdGhlIGxpc3QuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBleHQ0J3Mgam91cm5hbCBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiByZXBsYXlpbmcgZmFzdCBjb21taXRzLiBDcnVjaWFsbHksIGl0IGludm9sdmVzIHRlbXBvcmFyaWx5IGNsZWFyaW5nIHRoZSBgU0JfUkRPTkxZYCBmbGFnIGR1cmluZyB0aGUgcmVwbGF5IHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgZXh0NCBtb3VudCBhbmQgcmVjb3ZlcnkgcGF0aCwgYW5kIHRodXMgc2VlbXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb25maWd1cmF0aW9ucyBJJ20gZ29pbmcgdG8gZW5hYmxlIGFyZSBgRVhUNF9GU2AgYW5kIGBKQkQyYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBKQkQyYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MDguNjI3MjE0NjQ2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDgxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEpCRDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXFxuZnMvamJkMi9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmZzL2piZDIvS2NvbmZpZy0xOS1cXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcXG5mcy9qYmQyL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjA4Ljc0NjQyNjkzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM1MzUyNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZWx2aW5nIGludG8gRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBKQkQyYC4gSXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBpdCdzIHVsdGltYXRlbHkgY2hvc2VuIGJ5IGBFWFQ0X0ZTYCwgd2hpY2ggaXMgdGhlIGZpbGVzeXN0ZW0gYXQgcGxheSBoZXJlLiBUaGF0IG1lYW5zIHRoZSByZWFsIGNvbnRyb2wgbGllcyB3aXRoIGhvdyBgRVhUNF9GU2AgaXMgZGVmaW5lZC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQ7IEknbGwgbmVlZCB0byBnbyB0byB0aGUgc291cmNlIOKAkyB0aGF0J2xsIGJlIGBmcy9leHQ0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjE2LjI4MTc4MjgxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NTkzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjE2LjM2MjI0ODM0NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUyNDkwNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVYVDQgUGF0Y2ggQW5hbHlzaXM6IE15IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGV4cG9zZSBhbnkgdnVsbmVyYWJpbGl0aWVzLiBXZSBkb24ndCBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBwb2ludC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHRha2Vhd2F5cyBhbmQgY29uZmlybSB0aGlzIGh5cG90aGVzaXMuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIG9wZXJhdGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgcHJvY2Vzcy4gSXQgdGVtcG9yYXJpbHkgZHJvcHMgdGhlIGBTQl9SRE9OTFlgIGZsYWcuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgZGF0YSBjb3JydXB0aW9uIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzXCIgdG8gbWUuIEl04oCZcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBleHQ0IG1vdW50IGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgY2hlY2tzIHRoZSBib3ggZm9yIGZ1enppbmcgZmVhc2liaWxpdHkuXG5cblRoZSBtYWluIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGBqYmQyX2pvdXJuYWxfbG9hZGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGBleHQ0X2ZjX2luaXRgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLiBUaGVzZSBhcmUgdGhlIGZvY2FsIHBvaW50cyBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIEkgZXhwZWN0IGFueSBpc3N1ZXMgd291bGQgbWFuaWZlc3QuXG5cblNvLCBpbiBzdW1tYXJ5OiBJJ20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHVzaW5nIGBFWFQ0X0ZTYCBhcyB0aGUgb25seSBlbmFibGVkIGNvbmZpZy4gVGhlIHBhdGNoJ3Mgc2NvcGUsIHRoZSBmdW5jdGlvbnMgaXQgdGFyZ2V0cywgYW5kIGl0cyByZWFjaGFiaWxpdHkgbWFrZSBpdCBhIHdvcnRod2hpbGUgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1MSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MjEuMjE0NzQxOTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzM1NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiamJkMl9qb3VybmFsX2xvYWRcIixcbiAgICBcImV4dDRfZmNfY29tbWl0XCIsXG4gICAgXCJleHQ0X2ZjX2luaXRcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IG1vdW50L3JlY292ZXJ5IHBhdGggYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTM0ODQwNjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTMzMjkyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTQxMDU4MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODk5MjcwMzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyBwdXJlbHkgYSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBzdGF0ZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQyOTRiMWJjYzg4ZTRlNDNlNWUzZWRkMDcwYWM3MzA0MTMxOTdiN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTozNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNjA5Niw2ICs2MDk2LDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0aW50IGVyciA9IDA7XG4gXHRpbnQgcmVhbGx5X3JlYWRfb25seTtcbiBcdGludCBqb3VybmFsX2Rldl9ybztcbitcdGJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSlcbiBcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG5AQCAtNjE1Miw2ICs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdH1cbiBcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcIndyaXRlIGFjY2VzcyB3aWxsIFwiXG4gXHRcdFx0ICAgICAgIFwiYmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcIik7XG4rXHRcdFx0ZW5hYmxlX3dyaXRlID0gdHJ1ZTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTYxNjgsNyArNjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdGlmIChzYXZlKVxuIFx0XHRcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICtcbiBcdFx0XHQgICAgICAgRVhUNF9TX0VSUl9TVEFSVCwgRVhUNF9TX0VSUl9MRU4pO1xuK1x0XHQvKlxuK1x0XHQgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXNcbitcdFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XG4rXHRcdCAqIHN1cGVyYmxvY2suICBXZSBwcm9taXNlZCB3cml0ZSBhY2Nlc3MgYWJvdmUsIHNvIG1ha2UgdGhhdFxuK1x0XHQgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXlcbitcdFx0ICogZXh0NF9vcnBoYW5fY2xlYW51cCgpIGRvZXMuICBUaGUgc3VwZXJibG9jayBpcyBub3QgcHVibGlzaGVkXG4rXHRcdCAqIHlldCwgc28gbm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgdHJhbnNpZW50IHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aWYgKGVuYWJsZV93cml0ZSlcbitcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX1JET05MWTtcbiBcdFx0ZXJyID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7XG4rXHRcdGlmIChlbmFibGVfd3JpdGUpXG4rXHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4gXHRcdGlmIChzYXZlIFx1MDAyNlx1MDAyNiBtZW1jbXAoKChjaGFyICopIGVzKSArIEVYVDRfU19FUlJfU1RBUlQsXG4gXHRcdFx0XHQgICBzYXZlLCBFWFQ0X1NfRVJSX0xFTikpIHtcbiBcdFx0XHRtZW1jcHkoKChjaGFyICopIGVzKSArIEVYVDRfU19FUlJfU1RBUlQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTQxMDY5NTdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5MjY4NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWQtT25seSBTdXBlcmJsb2NrIEZhc3QgQ29tbWl0IFJlcGxheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGV4dDRfbG9hZF9qb3VybmFsYC4gVGhlIGNvcmUgaXNzdWUgaXQncyBhZGRyZXNzaW5nIGlzIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5IGNhbiBmYWlsIG9uIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgYmVjYXVzZSBpdCB0cmllcyB0byBwZXJmb3JtIG1ldGFkYXRhIHVwZGF0ZXMsIHdoaWNoIGFyZSBuYXR1cmFsbHkgYmxvY2tlZCBpbiB0aGF0IG1vZGUuIFRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBib29sZWFuLCBgZW5hYmxlX3dyaXRlYCwgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gVGhlIGtleSBsb2dpYyBpcyBjb25kaXRpb25hbC4gSWYgdGhlIHN1cGVyYmxvY2sgaXMgcmVhZC1vbmx5IGJ1dCByZWNvdmVyeSBpcyBuZWVkZWQsIGBlbmFibGVfd3JpdGVgIGdldHMgZmxpcHBlZCB0byBgdHJ1ZWAuIENydWNpYWxseSwgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkYCwgaXQgKnRlbXBvcmFyaWx5KiBjbGVhcnMgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZnJvbSBgc2ItXHUwMDNlc19mbGFnc2AgaWYgYGVuYWJsZV93cml0ZWAgaXMgdHJ1ZS4gVGhlbiwgYWZ0ZXIgdGhlIGpvdXJuYWwgbG9hZCwgaXQgKnJlLXNldHMqIGBTQl9SRE9OTFlgIGlmIHRoZSBmbGFnIHdhcyBtb2RpZmllZC5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IE5vdCBhdCBhbGwuIEl0J3Mgc29sZWx5IG1hbmlwdWxhdGluZyBhIGZsYWcgd2l0aGluIHRoZSBzdXBlcmJsb2NrIHN0cnVjdHVyZSAoYHNiLVx1MDAzZXNfZmxhZ3NgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGBlbmFibGVfd3JpdGVgIGlzIGluaXRpYWxpemVkIGV4cGxpY2l0bHkuIFRoZSBjb2RlIGlzIG9ubHkgYWx0ZXJpbmcgYSBmbGFnLiBJIGRvbid0IHNlZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGFjdHVhbCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0Ym9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTtcbi4uLlxuXHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXCJ3cml0ZSBhY2Nlc3Mgd2lsbCBcIlxuXHRcdFx0ICAgICAgIFwiYmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcIik7XG4rXHRcdFx0ZW5hYmxlX3dyaXRlID0gdHJ1ZTtcbi4uLlxuK1x0XHRpZiAoZW5hYmxlX3dyaXRlKVxuK1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2PSB+U0JfUkRPTkxZO1xuIFx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTtcbitcdFx0aWYgKGVuYWJsZV93cml0ZSlcbitcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmBgYFxuXG5JdCdzIHB1cmUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiBUaGUgY29kZSBjbGVhbmx5IGhhbmRsZXMgYSBmbGFnIG1vZGlmaWNhdGlvbiwgdGVtcG9yYXJpbHkgZGlzYWJsaW5nIGEgd3JpdGUtcHJvdGVjdGlvbi4gTm8gZHluYW1pYyBtZW1vcnkgbWFuYWdlbWVudCBvciB1bmluaXRpYWxpemVkIGRhdGEgaXMgaW4gdGhlIG1peC4gQ29uc2VxdWVudGx5LCBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gdGVzdCB0aGlzIHBhdGNoIHdpdGggS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MzAuMzQ2Nzk0MjUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyBwdXJlbHkgYSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBzdGF0ZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 04:53:47 +0000 UTC FinishedAt: 2026-08-12 05:36:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "f5bbbfec59b4e2fb7520a91de3df8a6174325d6a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "2c628e67-627e-4614-85c7-763dcf4905ca" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "jbd2_journal_load", "ext4_fc_commit", "ext4_fc_init", "ext4_fc_replay_cleanup" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtqYmQyX2pvdXJuYWxfbG9hZCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2luaXQmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDI5NGIxYmNjODhlNGU0M2U1ZTNlZGQwNzBhYzczMDQxMzE5N2I3YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjM1OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNjA5Niw2ICYjNDM7NjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IHJlYWxseV9yZWFkX29ubHk7XG4gXHRpbnQgam91cm5hbF9kZXZfcm87XG4mIzQzO1x0Ym9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIWV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpKVxuIFx0XHRyZXR1cm4gLUVGU0NPUlJVUFRFRDtcbkBAIC02MTUyLDYgJiM0Mzs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdH1cbiBcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcJiMzNDt3cml0ZSBhY2Nlc3Mgd2lsbCBcJiMzNDtcbiBcdFx0XHQgICAgICAgXCYjMzQ7YmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcJiMzNDspO1xuJiM0MztcdFx0XHRlbmFibGVfd3JpdGUgPSB0cnVlO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjE2OCw3ICYjNDM7NjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdGlmIChzYXZlKVxuIFx0XHRcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICYjNDM7XG4gXHRcdFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXNcbiYjNDM7XHRcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxuJiM0MztcdFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XG4mIzQzO1x0XHQgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXlcbiYjNDM7XHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxuJiM0MztcdFx0ICogeWV0LCBzbyBub3RoaW5nIGNhbiBvYnNlcnZlIHRoZSB0cmFuc2llbnQgc3RhdGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChlbmFibGVfd3JpdGUpXG4mIzQzO1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2PSB+U0JfUkRPTkxZO1xuIFx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTtcbiYjNDM7XHRcdGlmIChlbmFibGVfd3JpdGUpXG4mIzQzO1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuIFx0XHRpZiAoc2F2ZSBcdTAwMjZcdTAwMjYgbWVtY21wKCgoY2hhciAqKSBlcykgJiM0MzsgRVhUNF9TX0VSUl9TVEFSVCxcbiBcdFx0XHRcdCAgIHNhdmUsIEVYVDRfU19FUlJfTEVOKSkge1xuIFx0XHRcdG1lbWNweSgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtqYmQyX2pvdXJuYWxfbG9hZCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX2luaXQmIzM0OywKICAgICYjMzQ7ZXh0NF9mY19yZXBsYXlfY2xlYW51cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IG1vdW50L3JlY292ZXJ5IHBhdGggYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDU6MzU6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtNjA5Niw2ICYjNDM7NjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAlpbnQgZXJyID0gMDsKIAlpbnQgcmVhbGx5X3JlYWRfb25seTsKIAlpbnQgam91cm5hbF9kZXZfcm87CiYjNDM7CWJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7CiAKIAlpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSkKIAkJcmV0dXJuIC1FRlNDT1JSVVBURUQ7CkBAIC02MTUyLDYgJiM0Mzs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJfQogCQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgJiMzNDt3cml0ZSBhY2Nlc3Mgd2lsbCAmIzM0OwogCQkJICAgICAgICYjMzQ7YmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnkmIzM0Oyk7CiYjNDM7CQkJZW5hYmxlX3dyaXRlID0gdHJ1ZTsKIAkJfQogCX0KIApAQCAtNjE2OCw3ICYjNDM7NjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCWlmIChzYXZlKQogCQkJbWVtY3B5KHNhdmUsICgoY2hhciAqKSBlcykgJiM0MzsKIAkJCSAgICAgICBFWFQ0X1NfRVJSX1NUQVJULCBFWFQ0X1NfRVJSX0xFTik7CiYjNDM7CQkvKgomIzQzOwkJICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzCiYjNDM7CQkgKiAoc2VlIGV4dDRfZmNfcmVwbGF5KCkpIHdoaWNoIHJlZnVzZSB0byBydW4gb24gYSByZWFkLW9ubHkKJiM0MzsJCSAqIHN1cGVyYmxvY2suICBXZSBwcm9taXNlZCB3cml0ZSBhY2Nlc3MgYWJvdmUsIHNvIG1ha2UgdGhhdAomIzQzOwkJICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5CiYjNDM7CQkgKiBleHQ0X29ycGhhbl9jbGVhbnVwKCkgZG9lcy4gIFRoZSBzdXBlcmJsb2NrIGlzIG5vdCBwdWJsaXNoZWQKJiM0MzsJCSAqIHlldCwgc28gbm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgdHJhbnNpZW50IHN0YXRlLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZW5hYmxlX3dyaXRlKQomIzQzOwkJCXNiLSZndDtzX2ZsYWdzICZhbXA7PSB+U0JfUkRPTkxZOwogCQllcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTsKJiM0MzsJCWlmIChlbmFibGVfd3JpdGUpCiYjNDM7CQkJc2ItJmd0O3NfZmxhZ3MgfD0gU0JfUkRPTkxZOwogCQlpZiAoc2F2ZSAmYW1wOyZhbXA7IG1lbWNtcCgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsCiAJCQkJICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7CiAJCQltZW1jcHkoKChjaGFyICopIGVzKSAmIzQzOyBFWFQ0X1NfRVJSX1NUQVJULAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldDogZXh0NCBKb3VybmFsIExvYWRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGZzL2V4dDQvc3VwZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGV4dDRfbG9hZF9qb3VybmFsKClgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGlzIHBhdGNoIGlzIGNvbmRpdGlvbmFsbHkgY2xlYXJpbmcgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZnJvbSB0aGUgc3VwZXJibG9jayYjMzk7cyBmbGFncyAoYHNiLSZndDtzX2ZsYWdzYCkgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpYCBhbmQgdGhlbiByZXN0b3JpbmcgaXQuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHRvIGFsbG93IGZhc3QgY29tbWl0IHJlcGxheSB0byB0b3VjaCBtZXRhZGF0YSBldmVuIG9uIHdoYXQmIzM5O3MgZXNzZW50aWFsbHkgYSByZWFkLW9ubHkgZmlsZXN5c3RlbSwgcmlnaHQ/IEludGVyZXN0aW5nLiBUaGlzIHN0cmlrZXMgbWUgYXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpXaHk/IFdlbGwsIGBleHQ0X2xvYWRfam91cm5hbGAgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEpvdXJuYWwgbG9hZGluZyBpcyBhIGNyaXRpY2FsIHByb2Nlc3MgYW5kIGl0JiMzOTtzIHNvbWV0aGluZyB3ZSBjYW4gZGVmaW5pdGVseSBleGVyY2lzZS4gQW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHRoYXQgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IHdlIHdhbnQgd2hlbiBodW50aW5nIGZvciBvYnNjdXJlIGVkZ2UgY2FzZXMuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBjb25maWd1cmUgZXh0NCBmb3IgdGhlIGZ1enppbmcgc2V0dXAuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSB0byBlbmFibGUsIG9mIGNvdXJzZS4gVGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGZsYWdzIGFuZCBjb25kaXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGpvdXJuYWwgbG9hZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2xvYWRfam91cm5hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NjY9c3RhdGljIHN0cnVjdCByYXRlbGltaXRfc3RhdGUgZXh0NF9tb3VudF9tc2dfcmF0ZWxpbWl0O1xuZnMvZXh0NC9zdXBlci5jLTY3LVxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXG5mcy9leHQ0L3N1cGVyLmMtNjktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGpvdXJuYWxfZGV2bnVtKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nj1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ5NjItXG5mcy9leHQ0L3N1cGVyLmM6NDk2MzpcdGVyciA9IGV4dDRfbG9hZF9qb3VybmFsKHNiLCBlcywgY3R4LVx1MDAzZWpvdXJuYWxfZGV2bnVtKTtcbmZzL2V4dDQvc3VwZXIuYy00OTY0LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjA1MD1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjA4OC1cbmZzL2V4dDQvc3VwZXIuYzo2MDg5OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvc3VwZXIuYy02MDkwLVx0XHRcdCAgICAgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMDAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipUcmFjaW5nIHRoZSBFeHQ0IEpvdXJuYWwgTG9hZGluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIEFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gSG1tLCB0aGF0IGxpbWl0cyBvdXIgYWJpbGl0eSB0byB0cmFjZSBpdCBkaXJlY3RseSBmcm9tIGEgaGlnaGVyIGxldmVsLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgKnBhdGgqIHRvIHRoaXMgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgb3IsIGlkZWFsbHksIGFuICplbnRyeSBwb2ludCogaW50byB0aGUgam91cm5hbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIOKAkyBmcm9tIHdoaWNoIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHdoZW4gYW5kIGhvdyB0aGUgam91cm5hbCBpcyBhY3R1YWxseSBsb2FkZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBjb250ZXh0LiBJIG5lZWQgdG8ga2VlcCB0cmFjaW5nIHVwd2FyZHMsIGxvb2tpbmcgZm9yIHRoZSBwbGFjZSB0aGlzIHdob2xlIGpvdXJuYWwgbG9hZGluZyBzZXF1ZW5jZSBpcyBpbml0aWF0ZWQuIEkmIzM5O2xsIGZvY3VzIG9uIGZpbmRpbmcgdGhlIGZpcnN0IHB1YmxpYyBmYWNpbmcgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTQ4OTY9c3RhdGljIGludCBleHQ0X2dyb3VwX2Rlc2NfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTU1LVxuZnMvZXh0NC9zdXBlci5jOjQ5NTY6c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQ5NTctXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTUzMzg9c3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTU1MTEtXHRpZiAoIXRlc3Rfb3B0KHNiLCBOT0xPQUQpIFx1MDAyNlx1MDAyNiBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSB7XG5mcy9leHQ0L3N1cGVyLmM6NTUxMjpcdFx0ZXJyID0gZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc2IsIGVzLCBjdHgpO1xuZnMvZXh0NC9zdXBlci5jLTU1MTMtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkluaXRpYWwgRW50cnkgUG9pbnQgQW5hbHlzaXM6IGBleHQ0X2ZpbGxfc3VwZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZXh0NCBtb3VudGluZyBwcm9jZXNzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbSBtb3VudC4gSXQgbG9va3MgbGlrZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgZXh0NF9maWxsX3N1cGVyYCBpcyBub3Qgc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmlsbF9zdXBlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9NTMzMT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTUzMzctXG5mcy9leHQ0L3N1cGVyLmM6NTMzODpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy01MzM5LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTc1MT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODA3LVxuZnMvZXh0NC9zdXBlci5jOjU4MDg6c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTU4MDkte1xuLS1cbmZzL2V4dDQvc3VwZXIuYy01ODI3LVxuZnMvZXh0NC9zdXBlci5jOjU4Mjg6XHRyZXQgPSBfX2V4dDRfZmlsbF9zdXBlcihmYywgc2IpO1xuZnMvZXh0NC9zdXBlci5jLTU4MjktXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODU4PXN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg1OS17XG5mcy9leHQ0L3N1cGVyLmM6NTg2MDpcdHJldHVybiBnZXRfdHJlZV9iZGV2KGZjLCBleHQ0X2ZpbGxfc3VwZXIpO1xuZnMvZXh0NC9zdXBlci5jLTU4NjEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gdGhlIEVYVDQgTW91bnQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgRVhUNCB2dWxuZXJhYmlsaXR5IGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy4gKmV4dDRfZmlsbF9zdXBlciogaXMgc3RhdGljLCBobW0sIG5vdCBoZWxwZnVsIGRpcmVjdGx5LiBBbmQgdGhlIHJlYWwgZW50cnkgcG9pbnQsICpleHQ0X2dldF90cmVlKiwgaXMgYWxzbyBkZWNsYXJlZCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCBob2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfZ2V0X3RyZWUqIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgZnNfY29udGV4dF9vcGVyYXRpb25zYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLgoKTGV0JiMzOTtzIHNlZS4uLiAqZXh0NF9tb3VudCo/IE5vLCBzdGlsbCBzdGF0aWMuIFJpZ2h0LCBpdCYjMzk7cyAqZXh0NF9nZXRfdHJlZSouIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfbG9hZF9qb3VybmFsKiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQhIEZ1enppbmcgdGhlIG1vdW50IHByb2Nlc3MgaXRzZWxmLCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIGFwcHJvYWNoLiBBIGZ1enppbmcgaGFybmVzcyBmb2N1c2VkIG9uIGZpbGUgc3lzdGVtIG1vdW50aW5nIHNlZW1zIGxpa2UgdGhlIHdheSB0byBnby4KCk5vdywgaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWgsIHRoZSBwYXRjaCBtZW50aW9ucyAqZXh0NF9mY19yZXBsYXkoKSouIEkgc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgdGhhdCBmdW5jdGlvbiB0b28uIEl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGludmVzdGlnYXRpbmcgcmVnYXJkbGVzcyBvZiBtb3VudCB0aW1lLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9mY19yZXBsYXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTE4NjEtI2VuZGlmXG5mcy9leHQ0L2V4dDQuaDoxODYyOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlIHNfZmNfcmVwbGF5X3N0YXRlO1xuZnMvZXh0NC9leHQ0LmgtMTg2My19O1xuLS1cbmZzL2V4dDQvZXh0NC5oPTMwNjg9dm9pZCBleHQ0X2ZjX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oOjMwNjk6Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxvY2spO1xuZnMvZXh0NC9leHQ0Lmg6MzA3MDp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG5mcy9leHQ0L2V4dDQuaC0zMDcxLWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODA0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX2dldF90bChzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODEzLS8qIFVubGluayByZXBsYXkgZnVuY3Rpb24gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODE0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfdW5saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgxNS1cdFx0XHRcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODIzLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4MjQ6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVU5MSU5LLCBkYXJnLmlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODI1LVx0XHRcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODUyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE4NTM6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9saW5rX2ludGVybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg1NC1cdFx0XHRcdHN0cnVjdCBkZW50cnlfaW5mb19hcmdzICpkYXJnLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODg4LS8qIExpbmsgcmVwbGF5IGZ1bmN0aW9uICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4OTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODkwLVx0XHRcdCAgICAgICBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk2LVx0dGxfdG9fZGFyZyhcdTAwMjZkYXJnLCB0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk3Olx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0xJTkssIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4OTgtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTkwNjpcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFx1MDAyNmRhcmcsIGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA3LVx0aXB1dChpbm9kZSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5MTU9c3RhdGljIGludCBleHQ0X2ZjX3JlY29yZF9tb2RpZmllZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTYte1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5MTc6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTgtXHRpbnQgaTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk0My0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTQ0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTQ1LVx0XHRcdFx0c3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk1OC1cdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk1OTpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCB0YWcsIGlubywgMCwgMCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2MC1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA0OS0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA1MS1cdFx0XHRcdCBzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDU5LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwNjA6XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQ1JFQVQsIGRhcmcuaW5vLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNjEtXHRcdFx0ZGFyZy5wYXJlbnRfaW5vLCBkYXJnLmRuYW1lX2xlbik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTItXHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA5MzpcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFx1MDAyNmRhcmcsIGlub2RlKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDk0LVx0aWYgKHJldClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjEwOD1pbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTEwLXtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTExOlx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTEyLVx0c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uICpyZWdpb247XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNDctLyogUmVwbGF5IGFkZCByYW5nZSB0YWcgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMTQ4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU4ICp2YWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OS17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIxNjItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE2MzpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19BRERfUkFOR0UsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2NC1cdFx0bGUzMl90b19jcHUoZmNfYWRkX2V4LmZjX2lubyksIGxlMzJfdG9fY3B1KGV4LVx1MDAzZWVlX2Jsb2NrKSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI2Nz1zdGF0aWMgaW50XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjI2ODpleHQ0X2ZjX3JlcGxheV9kZWxfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjY5LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjI3OS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjgwOlx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX0RFTF9SQU5HRSxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjgxLVx0XHRsZTMyX3RvX2NwdShscmFuZ2UuZmNfaW5vKSwgY3VyLCByZW1haW5pbmcpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMyOS17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMzMDpcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjMzMS1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODYtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM4Nzpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OC17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OS1cdGludCBpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTA6XHRzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUgKnN0YXRlO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzOTEtXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0MDQtLyogQ2xlYW51cCBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgcmVwbGF5ICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA2LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjQxND1zdGF0aWMgYm9vbCBleHQ0X2ZjX3ZhbHVlX2xlbl9pc3ZhbGlkKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1Ny0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDU4OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfc2Nhbihqb3VybmFsX3QgKmpvdXJuYWwsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1OS1cdFx0XHRcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBvZmYsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjMtXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY0Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDY1LVx0aW50IHJldCA9IEpCRDJfRkNfUkVQTEFZX0NPTlRJTlVFO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTcyLW91dF9lcnI6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU3MzpcdHRyYWNlX2V4dDRfZmNfcmVwbGF5X3NjYW4oc2IsIHJldCwgb2ZmKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTc0LVx0cmV0dXJuIHJldDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4MC0gKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTgxOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXkoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODItXHRcdFx0XHRlbnVtIHBhc3N0eXBlIHBhc3MsIGludCBvZmYsIHRpZF90IGV4cGVjdGVkX3RpZClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4OC1cdGludCByZXQgPSBKQkQyX0ZDX1JFUExBWV9DT05USU5VRTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTg5Olx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZSA9IFx1MDAyNnNiaS1cdTAwM2VzX2ZjX3JlcGxheV9zdGF0ZTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkwLVx0c3RydWN0IGV4dDRfZmNfdGFpbCB0YWlsO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkzLVx0XHRzdGF0ZS1cdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBQQVNTX1NDQU47XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjU5NDpcdFx0cmV0dXJuIGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbCwgYmgsIG9mZiwgZXhwZWN0ZWRfdGlkKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTk1LVx0fVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMxLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0xJTks6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjYzMjpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9saW5rKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMzLVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzQtXHRcdGNhc2UgRVhUNF9GQ19UQUdfVU5MSU5LOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MzU6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfdW5saW5rKHNiLCBcdTAwMjZ0bCwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM2LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzctXHRcdGNhc2UgRVhUNF9GQ19UQUdfQUREX1JBTkdFOlxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2Mzg6XHRcdFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfYWRkX3JhbmdlKHNiLCB2YWwpO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2MzktXHRcdFx0YnJlYWs7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MC1cdFx0Y2FzZSBFWFQ0X0ZDX1RBR19DUkVBVDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQxOlx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Mi1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQzLVx0XHRjYXNlIEVYVDRfRkNfVEFHX0RFTF9SQU5HRTpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ0Olx0XHRcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzYiwgdmFsKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ1LVx0XHRcdGJyZWFrO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDYtXHRcdGNhc2UgRVhUNF9GQ19UQUdfSU5PREU6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY0NzpcdFx0XHRyZXQgPSBleHQ0X2ZjX3JlcGxheV9pbm9kZShzYiwgXHUwMDI2dGwsIHZhbCk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0OC1cdFx0XHRicmVhaztcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQ5LVx0XHRjYXNlIEVYVDRfRkNfVEFHX1BBRDpcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjUwOlx0XHRcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19QQUQsIDAsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1MS1cdFx0XHRcdFx0ICAgICB0bC5mY19sZW4sIDApO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjUzLVx0XHRjYXNlIEVYVDRfRkNfVEFHX1RBSUw6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY1NDpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVEFJTCxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjU1LVx0XHRcdFx0XHQgICAgIDAsIHRsLmZjX2xlbiwgMCk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjEtXHRcdGRlZmF1bHQ6XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY2MjpcdFx0XHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGwuZmNfdGFnLCAwLCB0bC5mY19sZW4sIDApO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjMtXHRcdFx0cmV0ID0gLUVDQU5DRUxFRDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzktXHQgKi9cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjgwOlx0am91cm5hbC1cdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODEtXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oPTEzOT1zdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24ge1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDctICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MTQ4OnN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtMTQ5LVx0aW50IGZjX3JlcGxheV9udW1fdGFncztcbi0tXG5mcy9leHQ0L21iYWxsb2MuYz02MTYyPWV4dDRfbWJfbmV3X2Jsb2Nrc19zaW1wbGUoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKVxuLS1cbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTMtXHRcdFx0XHRicmVhaztcbmZzL2V4dDQvbWJhbGxvYy5jOjYxOTQ6XHRcdFx0aWYgKGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHNiLFxuZnMvZXh0NC9tYmFsbG9jLmMtNjE5NS1cdFx0XHRcdGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSAmIzQzO1xuLS1cbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01NjM3LVx0fVxuZnMvZXh0NC9zdXBlci5jOjU2Mzg6XHRleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHNiKTtcbmZzL2V4dDQvc3VwZXIuYy01NjM5LVxuLS1cbmZzL2V4dDQvc3VwZXIuYz02MDg5PXN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjE3NC1cdFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXG5mcy9leHQ0L3N1cGVyLmM6NjE3NTpcdFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XG5mcy9leHQ0L3N1cGVyLmMtNjE3Ni1cdFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5OTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEpvdXJuYWwgTG9hZGluZyBQcm9jZXNzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIGhlcmUgaXMgb24gdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGFuZCBmYXN0IGNvbW1pdCByZXBsYXksIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBlbnRyeSBwb2ludHMgdGhhdCBtaWdodCBiZSBmcnVpdGZ1bCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTttIHNlZWluZyB0aGF0IHRoZSBjb3JlIGZhc3QgY29tbWl0IHJlcGxheSBmdW5jdGlvbiwgYGV4dDRfZmNfcmVwbGF5YCwgaXMgc3RhdGljLCBidXQgaXQmIzM5O3MgYXNzaWduZWQgdG8gYGpvdXJuYWwtJmd0O2pfZmNfcmVwbGF5X2NhbGxiYWNrYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG5vdCBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24uCgpNeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBqb3VybmFsIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIGBqYmQyX2pvdXJuYWxfbG9hZGAsIHdoaWNoIGNhbGxzIHRoZSByZXBsYXkgY2FsbGJhY2suIE5vdywgbXkgY29uY2VybiB3aXRoIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgdGhhdCBpdCYjMzk7cyB3aXRoaW4gYGZzL2piZDIvam91cm5hbC5jYCwgYW5kIHNvIGlzIHByb2JhYmx5IG5vdCB3aGF0IEkgYW0gbW9zdCBpbnRlcmVzdGVkIGluLgoKSSB3YXMgb3JpZ2luYWxseSBjaGVja2luZyBmb3IgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdlIGNhbiBmb2N1cyBvbi4gYGV4dDRfbG9hZF9qb3VybmFsYCwgYGV4dDRfZmlsbF9zdXBlcmAsIGFuZCBgZXh0NF9nZXRfdHJlZWAgYXJlIGFsbCBzdGF0aWMsIHNvIHRoZXkgYXJlIG5vdCB2ZXJ5IGxpa2VseSBlbnRyeSBwb2ludHMuIGBleHQ0X2ZjX2luaXRgIGlzIG5vbi1zdGF0aWMsIGJ1dCBpdCBpcyB1bmxpa2VseSB0byBoYXZlIGEgY2xvc2UgY29ubmVjdGlvbiB0byB0aGUgYG1vdW50YCBwcm9jZXNzLgoKTXkgc3RyYXRlZ3kgbm93IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1vdW50aW5nIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuY292ZXIgYW55IHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgdGhlIGpvdXJuYWwgbG9hZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGV4dDRfLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jPTE4ND12b2lkIGV4dDRfcmVhZF9iaF9ub3dhaXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0xOTUtXG5mcy9leHQ0L3N1cGVyLmM6MTk2OmludCBleHQ0X3JlYWRfYmgoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgYmxrX29wZl90IG9wX2ZsYWdzLFxuZnMvZXh0NC9zdXBlci5jLTE5Ny1cdFx0IGJpb19lbmRfaW9fdCBlbmRfaW8sIGJvb2wgc2ltdV9mYWlsKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy0yMTMtXG5mcy9leHQ0L3N1cGVyLmM6MjE0OmludCBleHQ0X3JlYWRfYmhfbG9jayhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsIGJvb2wgd2FpdClcbmZzL2V4dDQvc3VwZXIuYy0yMTUte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0yMDI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTIwNDItXG5mcy9leHQ0L3N1cGVyLmM6MjA0MzppbnQgZXh0NF9pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz0zMDkxPXN0YXRpYyBpbnQgZXh0NF9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxuZnMvZXh0NC9zdXBlci5jLTMwOTUtXG5mcy9leHQ0L3N1cGVyLmM6MzA5NjppbnQgZXh0NF9zZXFfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpXG5mcy9leHQ0L3N1cGVyLmMtMzA5Ny17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTMxMDc9c3RhdGljIGludCBleHQ0X3NldHVwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzE2NC1cbmZzL2V4dDQvc3VwZXIuYzozMTY1OmludCBleHQ0X2FsbG9jX2ZsZXhfYmdfYXJyYXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IG5ncm91cClcbmZzL2V4dDQvc3VwZXIuYy0zMTY2LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MzI0Nj1zdGF0aWMgX19sZTE2IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy0zMjg5LVxuZnMvZXh0NC9zdXBlci5jOjMyOTA6aW50IGV4dDRfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBfX3UzMiBibG9ja19ncm91cCxcbmZzL2V4dDQvc3VwZXIuYy0zMjkxLVx0XHRcdFx0c3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwKVxuLS1cbmZzL2V4dDQvc3VwZXIuYz0zNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dDRfZ2V0X3N0cmlwZV9zaXplKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMzYyMi0gKi9cbmZzL2V4dDQvc3VwZXIuYzozNjIzOmludCBleHQ0X2ZlYXR1cmVfc2V0X29rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZWFkb25seSlcbmZzL2V4dDQvc3VwZXIuYy0zNjI0LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDAxND1zdGF0aWMgc3RydWN0IGV4dDRfbGlfcmVxdWVzdCAqZXh0NF9saV9yZXF1ZXN0X25ldyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00MDQwLVxuZnMvZXh0NC9zdXBlci5jOjQwNDE6aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvZXh0NC9zdXBlci5jLTQwNDItXHRcdFx0ICAgICBleHQ0X2dyb3VwX3QgZmlyc3Rfbm90X3plcm9lZClcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NDE3MD1zdGF0aWMgaW50IGNvdW50X292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncnAsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQyMzItICovXG5mcy9leHQ0L3N1cGVyLmM6NDIzMzppbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbmZzL2V4dDQvc3VwZXIuYy00MjM0LXtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NjQwMj1zdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNjQ0NS0gKi9cbmZzL2V4dDQvc3VwZXIuYzo2NDQ2OmludCBleHQ0X2ZvcmNlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9zdXBlci5jLTY0NDcte1xuLS1cbmZzL2V4dDQvc3VwZXIuYz03MjI0PXN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTcyNjQtLyogRW5hYmxlIHVzYWdlIHRyYWNraW5nIGZvciBhbGwgcXVvdGEgdHlwZXMuICovXG5mcy9leHQ0L3N1cGVyLmM6NzI2NTppbnQgZXh0NF9lbmFibGVfcXVvdGFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L3N1cGVyLmMtNzI2Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzUzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIEV4dDQgY29kZSBoZXJlLiBJdCBsb29rcyBsaWtlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgdGhlIGtleSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGV5JiMzOTtyZSB1c2luZyB0byBoYW5kbGUgdGhlIG1vdW50aW5nIGNvbnRleHQuIEludGVyZXN0aW5nIHRoYXQgaXQmIzM5O3Mgbm90IHN0YXRpYy4gSG93ZXZlciwgSSBub3RpY2VkIHRoYXQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQgZnJvbSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhhdCYjMzk7cyBtYWtpbmcgbWUgdGhpbmsgYWJvdXQgaG93IHRoZSBqb3VybmFsIGlzIGhhbmRsZWQuIEhtbSwgaXMgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCBvciBgZXh0NF9sb2FkX2pvdXJuYWxgIGFjdHVhbGx5IGV4cG9ydGVkPyBJIGRvbiYjMzk7dCAqdGhpbmsqIHNvLCBidXQgaXQmIzM5O3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBTaW5jZSB0aGUgam91cm5hbCBpcyBpbXBvcnRhbnQsIHBlcmhhcHMgaXQgaXMgdXNlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIExldCYjMzk7cyBzZWUuLi4gbm8sIHRob3NlIGFyZW4mIzM5O3QgZXhwb3J0ZWQuLi4gT2theSwgbGV0IG1lIHBpdm90IG92ZXIgdG8gYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIEkgbmVlZCB0byBzZWUgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUga2lja2luZyBhcm91bmQgaW4gdGhhdCBhcmVhLCBzaW5jZSBpdCBkZWFscyB3aXRoIGpvdXJuYWwgaGFuZGxpbmcgdG9vLiBQZXJoYXBzIHRoZSBhbnN3ZXIgaXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgZXh0NF9mY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU1Mz1zdGF0aWMgdm9pZCBleHQ0X2ZjX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc3RhdHVzLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg1LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1ODY6aW50IGV4dDRfZmNfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgY29tbWl0X3RpZClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg3LXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjA1MD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA3LSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMDg6aW50IGV4dDRfZmNfcmVjb3JkX3JlZ2lvbnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlubyxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA5LVx0XHRleHQ0X2xibGtfdCBsYmxrLCBleHQ0X2ZzYmxrX3QgcGJsaywgaW50IGxlbiwgaW50IHJlcGxheSlcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY4Nj1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZjX2luZWxpZ2libGVfcmVhc29uc1tdID0ge1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzAxLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI3MDI6aW50IGV4dDRfZmNfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI3MDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbmNlcm5pbmcgRmlsZSBDcmVhdGlvbiBhbmQgRXh0NCYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0X2ZjX2NvbW1pdGAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBmbGFnZ2VkIGFzICpub3QqIHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBzY29wZSBhbmQgcG90ZW50aWFsIGV4dGVybmFsIHVzZS4gV2hhdCYjMzk7cyBpdCBkb2luZyB0aGF0IGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlPyBJcyBpdCBiZWluZyBjYWxsZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0gY29kZT8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciwgbW9yZSBnZW5lcmFsIGZyYW1ld29yaz8gVGhpcyBpc24mIzM5O3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBkZXNpZ24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBkYXRhIHByb3RlY3Rpb24uCgpUaGVuLCBteSBtaW5kIGRyaWZ0cyB0byBgZXh0NF9mY19pbml0YC4gSXMgKnRoYXQqIGFsc28gbm9uLXN0YXRpYz8gSWYgaXQgaXMsIHRoZW4gdGhlIGltcGxpY2F0aW9ucyBvZiBgZXh0NF9mY19jb21taXRgIGJlaW5nIG5vbi1zdGF0aWMgYXJlIGV2ZW4gZ3JlYXRlci4gSXQgcG9pbnRzIHRvd2FyZCBtb3JlIHNvcGhpc3RpY2F0ZWQgaW5pdGlhbGl6YXRpb24gcHJvY2VkdXJlczsgaXQgbWF5IGJlIHRoYXQgYm90aCBmdW5jdGlvbnMgd29yayB0b2dldGhlciwgYW5kIG1pZ2h0IHNoYXJlIGRhdGEgdG8gaW5pdGlhbGl6ZSBmaWxlIGNyZWF0aW9uLCBhbmQgcHJlcGFyZSBmb3IgY29tbWl0dGVkIGNoYW5nZXMuIElmIHNvLCB3aHkgaXNuJiMzOTt0IHRoZSBzY29wZSBjb250cm9sbGVkPyBJZiBpdCBpcyBzdGF0aWMsIHRoZW4gaXQgaXMgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZS4gSWYgaXQmIzM5O3Mgbm90LCBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBkZXRlcm1pbmUgd2h5IHRob3NlIGRlc2lnbiBkZWNpc2lvbnMgd2VyZSBtYWRlLiBUaGVyZSYjMzk7cyBwcm9iYWJseSBhIGdvb2QgcmVhc29uLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBjb3JyZWN0LCBjb25zaWRlcmluZyB0aGUgb3ZlcmFsbCBkZXNpZ24gb2YgRXh0NCBhbmQgaXQmIzM5O3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgZXh0NF9mY18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmFzdF9jb21taXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjI0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX3Jlc2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzI6dm9pZCBleHQ0X2ZjX2luaXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzMte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yODc9c3RhdGljIHZvaWQgZXh0NF9mY19zbmFwX3N0YXRzX3VwZGF0ZV9tYXgoYXRvbWljNjRfdCAqc3RhdCwgdTY0IHZhbHVlKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDMtICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MzA0OnZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDUte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjctICovXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MzY4OnZvaWQgZXh0NF9mY19tYXJrX2luZWxpZ2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHJlYXNvbiwgaGFuZGxlX3QgKmhhbmRsZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjkte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz01MTY9dm9pZCBfX2V4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTUyOS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzo1MzA6dm9pZCBleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTMxLXtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NTM4PXZvaWQgX19leHQ0X2ZjX3RyYWNrX2xpbmsoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTUxLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU1Mjp2b2lkIGV4dDRfZmNfdHJhY2tfbGluayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1My1cdFx0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTU1OT12b2lkIF9fZXh0NF9mY190cmFja19jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTcyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU3Mzp2b2lkIGV4dDRfZmNfdHJhY2tfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01NzQte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz01ODI9c3RhdGljIGludCBfX3RyYWNrX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTkyLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjU5Mzp2b2lkIGV4dDRfZmNfdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01OTQte1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz02Mjk9c3RhdGljIGludCBfX3RyYWNrX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmFyZyxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU2LVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjY1Nzp2b2lkIGV4dDRfZmNfdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU4LVx0XHRcdCBleHQ0X2xibGtfdCBlbmQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIzODc9Ym9vbCBleHQ0X2ZjX3JlcGxheV9jaGVja19leGNsdWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2ZzYmxrX3QgYmxrKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA0LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0MDU6dm9pZCBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI1ODE9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NzItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY3Mzp2b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC17XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI3NTY9aW50IF9faW5pdCBleHQ0X2ZjX2luaXRfZGVudHJ5X2NhY2hlKHZvaWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI3NzItXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6Mjc3Mzp2b2lkIGV4dDRfZmNfZGVzdHJveV9kZW50cnlfY2FjaGUodm9pZClcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzc0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBJc3N1ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBwcm9ibGVtIHdpdGhpbiBgZXh0NF9sb2FkX2pvdXJuYWxgLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvc3VwZXIuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZhc3QgY29tbWl0IHJlcGxheSBmYWlsaW5nIGJlY2F1c2Ugb2YgYSByZWFkLW9ubHkgc3VwZXJibG9jayBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3MuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZ28gYWZ0ZXIgYGV4dDRfZmlsbF9zdXBlcmAgb3IgYGV4dDRfZ2V0X3RyZWVgIHdpdGggZnV6emluZy4gVGhvc2Ugc2VlbSBsaWtlIG9idmlvdXMgdGFyZ2V0cyBnaXZlbiB0aGUgY29udGV4dC4gSG93ZXZlciwgdGhvc2UgYXJlIHN0YXRpYyBhbmQgSSBjYW4mIzM5O3QgcmVhbGx5IGdldCBhdCB0aG9zZS4gSSBuZWVkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQuIEkgY2FuIGhpdCBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBhbmQgYGV4dDRfZmNfY29tbWl0YC4KCldhaXQgYSBtaW51dGUsIHRoZSBpc3N1ZSBpcyBoYXBwZW5pbmcgZHVyaW5nIG1vdW50LCBhbmQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBwYXJ0IG9mIHRoYXQgcHJvY2Vzcy4gU28gSSBuZWVkIHRvIHNoaWZ0IG15IGZvY3VzIHRvIGBmcy9leHQ0L3N1cGVyLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHRoZSBtb3VudCBzZXF1ZW5jZS4gVGhpbmtpbmcgYWJvdXQgaG93IHRoZSBmcyBjb250ZXh0IGdldHMgaW5pdGlhbGl6ZWQgZHVyaW5nIHRoZSBtb3VudCwgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyB0aGUgb25lLiBMZXQgbWUgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUsIGFuZCBsb29rIGZvciBgZXh0NF9nZXRfdHJlZWAsIGp1c3QgaW4gY2FzZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2dldF90cmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9zdXBlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYz05MT1zdGF0aWMgaW50IGV4dDRfcGFyc2VfcGFyYW0oc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSk7XG5mcy9leHQ0L3N1cGVyLmM6OTI6c3RhdGljIGludCBleHQ0X2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG4tLVxuZnMvZXh0NC9zdXBlci5jPTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBleHQ0X2NvbnRleHRfb3BzID0ge1xuZnMvZXh0NC9zdXBlci5jLTEyNi1cdC5wYXJzZV9wYXJhbVx0PSBleHQ0X3BhcnNlX3BhcmFtLFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcdC5nZXRfdHJlZVx0PSBleHQ0X2dldF90cmVlLFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cdC5yZWNvbmZpZ3VyZVx0PSBleHQ0X3JlY29uZmlndXJlLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01ODA4PXN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTg1Ny1cbmZzL2V4dDQvc3VwZXIuYzo1ODU4OnN0YXRpYyBpbnQgZXh0NF9nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtNTg1OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTM0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gdGhlIGV4dDQgRmlsZXN5c3RlbSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBleHQ0YCBjb2RlIGFuZCBJIHNlZSB0aGF0IGBleHQ0X2dldF90cmVlYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZS4gSXQmIzM5O3MgcHJvYmFibHkgb25seSB1c2VkIHdpdGhpbiB0aGUgYGV4dDRgIG1vZHVsZSBpdHNlbGYsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGFzIEkgdHJhY2Ugd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGFuZCB3aGF0IGRhdGEgaXQgcmVsaWVzIHVwb24uCgpOb3csIG15IG1pbmQgd2FuZGVycy4gSWYgYGV4dDRfZ2V0X3RyZWVgIGlzIHN0YXRpYywgd2hhdCYjMzk7cyBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsZXN5c3RlbSBzdHJ1Y3R1cmVzIGNvbWUgaW50byBiZWluZywgYW5kIHdoZXJlIGBleHQ0X2dldF90cmVlYCBmaXRzIGludG8gdGhhdCBsYXJnZXIgcGljdHVyZS4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBleHQ0X2luaXRfZnNfY29udGV4dGA/IFRoYXQgc291bmRzIGxpa2UgYSBtdWNoIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYmVpbmcgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFydHVwLiBJdCBpcywgYWZ0ZXIgYWxsLCBuYW1lZCAqaW5pdCogYW5kICpmc19jb250ZXh0KiAtIHRoYXQgaGFzIHRvIGJlIHRoZSBwbGFjZSBJIGZvY3VzIG9uIG5leHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqcm9vdCogb2YgdGhlIGZpbGVzeXN0ZW0gdHJlZSBpcyB1bHRpbWF0ZWx5IGNvbnN0cnVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2luaXRfZnNfY29udGV4dCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3N1cGVyLmM9OTQ9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XG5mcy9leHQ0L3N1cGVyLmM6OTU6c3RhdGljIGludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuZnMvZXh0NC9zdXBlci5jLTk2LXN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9MTM0PXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQyX2ZzX3R5cGUgPSB7XG4tLVxuZnMvZXh0NC9zdXBlci5jLTEzNi1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQyXCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjEzNzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXG5mcy9leHQ0L3N1cGVyLmMtMTM4LVx0LnBhcmFtZXRlcnNcdFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz0xNTA9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTUyLVx0Lm5hbWVcdFx0XHQ9IFwmIzM0O2V4dDNcJiMzNDssXG5mcy9leHQ0L3N1cGVyLmM6MTUzOlx0LmluaXRfZnNfY29udGV4dFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcbmZzL2V4dDQvc3VwZXIuYy0xNTQtXHQucGFyYW1ldGVyc1x0XHQ9IGV4dDRfcGFyYW1fc3BlY3MsXG4tLVxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMjA0Mi1cbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9leHQ0L3N1cGVyLmMtMjA0NC17XG4tLVxuZnMvZXh0NC9zdXBlci5jPTc1MTk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRfZnNfdHlwZSA9IHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNzUyMS1cdC5uYW1lXHRcdFx0PSBcJiMzNDtleHQ0XCYjMzQ7LFxuZnMvZXh0NC9zdXBlci5jOjc1MjI6XHQuaW5pdF9mc19jb250ZXh0XHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxuZnMvZXh0NC9zdXBlci5jLTc1MjMtXHQucGFyYW1ldGVyc1x0XHQ9IGV4dDRfcGFyYW1fc3BlY3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IE1vdW50IENvbnRleHQgYW5kIEZhc3QgQ29tbWl0IFJlcGxheSoqCgpPa2F5LCBzbyBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzbiYjMzk7dCBzdGF0aWMsIG1lYW5pbmcgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIGhhbmRsaW5nIG1vdW50IG9wdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQ6IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNwZWVkaW5nIHVwIGNvbW1pdCByZXBsYXkuIFRoaXMgbWFrZXMgbWUgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGpvdXJuYWwgaGFuZGxpbmcuIE15IG5leHQgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYGZzL2piZDIvam91cm5hbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBqYmQyX2pvdXJuYWxfbG9hZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgam91cm5hbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZHVyaW5nIGEgY29tbWl0IHJlcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7amJkMl9qb3VybmFsX2xvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL2pvdXJuYWwuYz03NT1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMpO1xuZnMvamJkMi9qb3VybmFsLmM6NzY6RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfbG9hZCk7XG5mcy9qYmQyL2pvdXJuYWwuYy03Ny1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9kZXN0cm95KTtcbi0tXG5mcy9qYmQyL2pvdXJuYWwuYz0yMDUwPUVYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3VwZGF0ZV9zYl9lcnJubyk7XG4tLVxuZnMvamJkMi9qb3VybmFsLmMtMjA1Mi0vKipcbmZzL2piZDIvam91cm5hbC5jOjIwNTM6ICogamJkMl9qb3VybmFsX2xvYWQoKSAtIFJlYWQgam91cm5hbCBmcm9tIGRpc2suXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU0LSAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGFjdCBvbi5cbi0tXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU5LSAqL1xuZnMvamJkMi9qb3VybmFsLmM6MjA2MDppbnQgamJkMl9qb3VybmFsX2xvYWQoam91cm5hbF90ICpqb3VybmFsKVxuZnMvamJkMi9qb3VybmFsLmMtMjA2MS17XG4tLVxuZnMvamJkMi9qb3VybmFsLmM9MjQwOT1pbnQgamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgaW50IGZsYWdzKVxuLS1cbmZzL2piZDIvam91cm5hbC5jLTI0ODUtICogYSB3YXJuaW5nIGlmIHRoZSBqb3VybmFsIGNvbnRhaW5zIGFueSB2YWxpZCByZWNvdmVyeSBpbmZvcm1hdGlvbi5cbmZzL2piZDIvam91cm5hbC5jOjI0ODY6ICogTXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBqb3VybmFsX2luaXRfKigpIGFuZCBqYmQyX2pvdXJuYWxfbG9hZCgpLlxuZnMvamJkMi9qb3VybmFsLmMtMjQ4Ny0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQzMQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeHQ0IEpvdXJuYWwgTG9hZGluZyBGaXggYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGlzIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBidWcgd2l0aGluIGV4dDQmIzM5O3Mgam91cm5hbCBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiBmYXN0IGNvbW1pdCByZXBsYXkgZ29lcyBzaWRld2F5cyBiZWNhdXNlIHRoZSBzdXBlcmJsb2NrIGlzLCB1bmRlcnN0YW5kYWJseSwgcmVhZC1vbmx5LiBUaGUgZml4IGludm9sdmVzIGNvbmRpdGlvbmFsbHkgY2xlYXJpbmcgYFNCX1JET05MWWAgZnJvbSBgc2ItJmd0O3NfZmxhZ3NgIGlmIGBlbmFibGVfd3JpdGVgIGlzIHRydWUuIEhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIGNsYXNzaWMgc2NlbmFyaW8gcmlwZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUgd2hlcmUgdGhpbmdzIG1pZ2h0IGdldCBzdWJ0bHkgY29uZnVzZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSYjMzk7bSB0aGlua2luZyB0aGlzIGRlc2VydmVzIHNvbWUgc2VyaW91cyBhdHRlbnRpb24uIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBydW4gdGhpcyB0aHJvdWdoIHRoZSBmdXp6ZXIuIFRoZSBvbmx5IGNvbmZpZyBJIHRoaW5rIEkgbmVlZCB0byB3b3JyeSBhYm91dCBpcyBgRVhUNF9GU2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNob3VsZCBhbHNvIHRha2UgYSBwZWVrIGF0IGBmcy9leHQ0L0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY29uZmlnIHJlbGF0ZWQgdG8gZmFzdCBjb21taXQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RkFTVF9DT01NSVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEzMDgtXG5mcy9leHQ0L2V4dDQuaDoxMzA5OiNkZWZpbmUgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVFx0MHgwMDAwMDAxMCAvKiBKb3VybmFsIGZhc3QgY29tbWl0ICovXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXHRcdDB4MDAwMDAwMjAgLyogRG8gbm90IGFsbG93IERpcmVjdCBBY2Nlc3MgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTIzPXN0YXRpYyBpbmxpbmUgYm9vbCBleHQ0X2lub2RlX29ycGhhbl90cmFja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjE2My0vKlxuZnMvZXh0NC9leHQ0Lmg6MjE2NDogKiBUaGUgcmVhc29uIHdoeSBcJiMzNDtGQVNUX0NPTU1JVFwmIzM0OyBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcbmZzL2V4dDQvZXh0NC5oLTIxNjUtICogaW5jb21wYXRpYmxlIG9ubHkgaWYgZmFzdCBjb21taXQgYmxvY2tzIGFyZSBwcmVzZW50IGluIHRoZSBGUy4gU2luY2Ugd2Vcbi0tXG5mcy9leHQ0L2V4dDQuaC0yMTY5LSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjE3MDojZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfRkFTVF9DT01NSVRcdFx0MHgwNDAwXG5mcy9leHQ0L2V4dDQuaC0yMTcxLSNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9TVEFCTEVfSU5PREVTXHQweDA4MDBcbi0tXG5mcy9leHQ0L2V4dDQuaD0yMjc1PUVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1Moc3BhcnNlX3N1cGVyMixcdFNQQVJTRV9TVVBFUjIpXG5mcy9leHQ0L2V4dDQuaDoyMjc2OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXHRcdEZBU1RfQ09NTUlUKVxuZnMvZXh0NC9leHQ0LmgtMjI3Ny1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXHRTVEFCTEVfSU5PREVTKVxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NS17XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQ2Olx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0Ny1cdFx0KEVYVDRfU0Ioc2IpLVx1MDAzZXNfbW91bnRfc3RhdGUgXHUwMDI2IEVYVDRfRkNfUkVQTEFZKSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQwOT1zdGF0aWMgaW50IGV4dDRfZmNfdHJhY2tfdGVtcGxhdGUoXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzOS1cdFx0XHRcdChzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRlVMTF9DT01NSVRfT05HT0lORyB8fFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjQ0MDpcdFx0XHRcdCBzYmktXHUwMDNlc19qb3VybmFsLVx1MDAzZWpfZmxhZ3MgXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ0MS1cdFx0XHRcdFx1MDAyNnNiaS1cdTAwM2VzX2ZjX3FbRkNfUV9TVEFHSU5HXSA6XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1ND1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTAtXHRpZiAoc2JpLVx1MDAzZXNfam91cm5hbC1cdTAwM2VqX2ZsYWdzIFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzo0OTE6XHRcdHNiaS1cdTAwM2VzX2pvdXJuYWwtXHUwMDNlal9mbGFncyBcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5Mi1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZub2RlLVx1MDAzZWZjZF9saXN0LFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTg2PWludCBleHQ0X2ZjX2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IGNvbW1pdF90aWQpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU5NjpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVx0XHRyZXR1cm4gamJkMl9jb21wbGV0ZV90cmFuc2FjdGlvbihqb3VybmFsLCBjb21taXRfdGlkKTtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXHRqb3VybmFsLVx1MDAzZWpfZmNfcmVwbGF5X2NhbGxiYWNrID0gZXh0NF9mY19yZXBsYXk7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgyLVx0XHRyZXR1cm47XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6MzojaWZuZGVmIF9fRkFTVF9DT01NSVRfSF9fXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg6NDojZGVmaW5lIF9fRkFTVF9DT01NSVRfSF9fXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0Lmg9MTYzPXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFnMnN0cihfX3UxNiB0YWcpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTE4OC1cbmZzL2V4dDQvZmFzdF9jb21taXQuaDoxODk6I2VuZGlmIC8qIF9fRkFTVF9DT01NSVRfSF9fICovXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTM0NTI9c3RhdGljIGJvb2wgZXh0NF9pbm9kZV9kYXRhc3luY19kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVx0XHRcdHJldHVybiBmYWxzZTtcbmZzL2V4dDQvaW5vZGUuYzozNDYwOlx0XHRpZiAodGVzdF9vcHQyKGlub2RlLVx1MDAzZWlfc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxuZnMvZXh0NC9pbm9kZS5jLTM0NjEtXHRcdFx0cmV0dXJuICFsaXN0X2VtcHR5KFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9mY19saXN0KTtcbi0tXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTQwMDctXHRcdFx0ZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlLCBuZXcuZGVudHJ5KTtcbmZzL2V4dDQvbmFtZWkuYzo0MDA4Olx0XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYy00MDA5LVx0XHQgICAgIShFWFQ0X1NCKHNiKS1cdTAwM2VzX21vdW50X3N0YXRlIFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXHUwMDI2XHUwMDI2XG4tLVxuZnMvZXh0NC9zdXBlci5jPTE4Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBtb3VudF9vcHRzIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ni0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcbmZzL2V4dDQvc3VwZXIuYzoxOTQ3Olx0e09wdF9mY19kZWJ1Z19mb3JjZSwgRVhUNF9NT1VOVDJfSk9VUk5BTF9GQVNUX0NPTU1JVCxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ4LVx0IE1PUFRfU0VUIHwgTU9QVF8yIHwgTU9QVF9FWFQ0X09OTFl9LFxuLS1cbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXh0NC9zdXBlci5jLTQ0MDctXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXG5mcy9leHQ0L3N1cGVyLmM6NDQwODpcdFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xuZnMvZXh0NC9zdXBlci5jLTQ0MDktXHQvKiBkb24mIzM5O3QgZm9yZ2V0IHRvIGVuYWJsZSBqb3VybmFsX2NzdW0gd2hlbiBtZXRhZGF0YV9jc3VtIGlzIGVuYWJsZWQuICovXG4tLVxuZnMvZXh0NC9zdXBlci5jPTQ5NTY9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvc3VwZXIuYy00OTc5LVxuZnMvZXh0NC9zdXBlci5jOjQ5ODA6XHRpZiAodGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvc3VwZXIuYy00OTgxLVx0XHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cdTAwM2VzX2pvdXJuYWwsIDAsIDAsXG5mcy9leHQ0L3N1cGVyLmM6NDk4MjpcdFx0XHRcdFx0ICBKQkQyX0ZFQVRVUkVfSU5DT01QQVRfRkFTVF9DT01NSVQpKSB7XG5mcy9leHQ0L3N1cGVyLmMtNDk4My1cdFx0ZXh0NF9tc2coc2IsIEtFUk5fRVJSLFxuLS1cbmZzL2V4dDQvc3VwZXIuYz01MDQwPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL2V4dDQvc3VwZXIuYy01MDQ3LVx0XHRjbGVhcl9vcHQoc2IsIERJT1JFQURfTk9MT0NLKTtcbmZzL2V4dDQvc3VwZXIuYzo1MDQ4Olx0XHRjbGVhcl9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy01MDQ5LVx0XHRpZiAodGVzdF9vcHQyKHNiLCBFWFBMSUNJVF9ERUxBTExPQykpIHtcbi0tXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9leHQ0L3N1cGVyLmMtNTUzNi1cdFx0Y2xlYXJfb3B0KHNiLCBEQVRBX0ZMQUdTKTtcbmZzL2V4dDQvc3VwZXIuYzo1NTM3Olx0XHRjbGVhcl9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKTtcbmZzL2V4dDQvc3VwZXIuYy01NTM4LVx0XHRzYmktXHUwMDNlc19qb3VybmFsID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgwNDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRmFzdCBDb21taXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGZhc3QgY29tbWl0IHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24g4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgYEVYVDRfRlNgLiBUaGVyZSYjMzk7cyBubyBzZXBhcmF0ZSBmYXN0IGNvbW1pdCBjb25maWd1cmF0aW9uLCBhcyBJIHJlY2FsbCwgaXQmIzM5O3MgaGFuZGxlZCB2aWEgbW91bnQgb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBleHQ0X2xvYWRfam91cm5hbGAgd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBmb2N1cyBvbiBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBgZXh0NF9mY19jb21taXRgLCBhbmQgYGV4dDRfZmNfaW5mb19zaG93YCBhcyBrZXkgc3ltYm9scy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIGJ1ZyBpcyB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzIHdoZW4gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQuIFNvLCBJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gSSBhbSBsb29raW5nIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgZnMvZXh0NC9zdXBlci5jYCB3aGljaCBhcmUgaW52b2x2ZWQgaW4gbW91bnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkgc2VlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgaW52b2x2ZWQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBgZnMvZXh0NC9zdXBlci5jYCBmb3IgYGV4dDRfZ2V0X3RyZWVgLiBXYWl0LCBpcyBgamJkMl9qb3VybmFsX2xvYWRgIGNhbGxlZCBmcm9tIGBleHQ0X2xvYWRfam91cm5hbGA/IFllcywgSSBzZWUgaXQmIzM5O3MgZXhwb3J0ZWQuIFRoYXQgbWFrZXMgYGpiZDJfam91cm5hbF9sb2FkYCBhIHZlcnkgcHJvbWlzaW5nIHN5bWJvbCB0byBmb2N1cyBvbi4gQW5kLCBgZXh0NF9mY19yZXBsYXlgIGlzIGEgY2FsbGJhY2ssIGJ1dCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiBzbyBwcm9iYWJseSBub3QgZGlyZWN0bHkgcmVsZXZhbnQuCgpPa2F5LCBsZXQmIzM5O3Mgbm93IGxvb2sgYXQgYGpiZDJfam91cm5hbF9sb2FkYCBpbiBgZnMvamJkMi9qb3VybmFsLmNgLiBJIHdpbGwgYWRkIGBqYmQyX2pvdXJuYWxfbG9hZGAgYW5kIGBleHQ0X2luaXRfZnNfY29udGV4dGAuIFdhaXQsIGhhbmcgb24uLi4gYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyBqdXN0IGFsbG9jYXRpbmcgdGhlIGNvbnRleHQsIHNvIG5vdCB0aGF0IGludGVyZXN0aW5nIGluIGl0c2VsZi4KCldoYXQgYWJvdXQgYGV4dDRfZmNfY29tbWl0YD8gWWVwLCB0aGF0JiMzOTtzIG5vbi1zdGF0aWMuIExldCYjMzk7cyBsb29rIGF0IGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBOb3csIEkmIzM5O2xsIGFkZCBgamJkMl9qb3VybmFsX2xvYWRgLCBgZXh0NF9mY19jb21taXRgLCBgZXh0NF9mY19pbml0YCwgYW5kIGBleHQ0X2ZjX3JlcGxheV9jbGVhbnVwYCB0byB0aGUgbGlzdC4gSSB0aGluayB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGpvdXJuYWwgbG9hZGluZywgc3BlY2lmaWNhbGx5IHdoZW4gcmVwbGF5aW5nIGZhc3QgY29tbWl0cy4gQ3J1Y2lhbGx5LCBpdCBpbnZvbHZlcyB0ZW1wb3JhcmlseSBjbGVhcmluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBkdXJpbmcgdGhlIHJlcGxheSBwcm9jZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGV4dDQgbW91bnQgYW5kIHJlY292ZXJ5IHBhdGgsIGFuZCB0aHVzIHNlZW1zIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBnb2luZyB0byBlbmFibGUgYXJlIGBFWFQ0X0ZTYCBhbmQgYEpCRDJgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYEpCRDJgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSkJEMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2piZDIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qYmQyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXG5mcy9qYmQyL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxuZnMvamJkMi9LY29uZmlnLTE5LVxuZnMvamJkMi9LY29uZmlnOjIwOmNvbmZpZyBKQkQyX0RFQlVHXG5mcy9qYmQyL0tjb25maWctMjEtXHRib29sIFwmIzM0O0pCRDIgKGV4dDQpIGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzE4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqRGVsdmluZyBpbnRvIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYEpCRDJgLiBJdCYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBpdCYjMzk7cyB1bHRpbWF0ZWx5IGNob3NlbiBieSBgRVhUNF9GU2AsIHdoaWNoIGlzIHRoZSBmaWxlc3lzdGVtIGF0IHBsYXkgaGVyZS4gVGhhdCBtZWFucyB0aGUgcmVhbCBjb250cm9sIGxpZXMgd2l0aCBob3cgYEVYVDRfRlNgIGlzIGRlZmluZWQuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0OyBJJiMzOTtsbCBuZWVkIHRvIGdvIHRvIHRoZSBzb3VyY2Ug4oCTIHRoYXQmIzM5O2xsIGJlIGBmcy9leHQ0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSB0aGVyZS4gVGltZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NTEKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogMTI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDQgUGF0Y2ggQW5hbHlzaXM6IE15IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBgRVhUNF9GU2AgYWxvbmUgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZXhwb3NlIGFueSB2dWxuZXJhYmlsaXRpZXMuIFdlIGRvbiYjMzk7dCBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBwb2ludC4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBrZXkgdGFrZWF3YXlzIGFuZCBjb25maXJtIHRoaXMgaHlwb3RoZXNpcy4gVGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGhvdyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgb3BlcmF0ZXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGZhc3QgY29tbWl0IHJlcGxheSBwcm9jZXNzLiBJdCB0ZW1wb3JhcmlseSBkcm9wcyB0aGUgYFNCX1JET05MWWAgZmxhZy4gVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gb3IgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMmIzM0OyB0byBtZS4gSXTigJlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGV4dDQgbW91bnQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMsIHdoaWNoIG1lYW5zIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUsIGV2ZW4gd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhhdCBjaGVja3MgdGhlIGJveCBmb3IgZnV6emluZyBmZWFzaWJpbGl0eS4KClRoZSBtYWluIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGBqYmQyX2pvdXJuYWxfbG9hZGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGBleHQ0X2ZjX2luaXRgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLiBUaGVzZSBhcmUgdGhlIGZvY2FsIHBvaW50cyBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIEkgZXhwZWN0IGFueSBpc3N1ZXMgd291bGQgbWFuaWZlc3QuCgpTbywgaW4gc3VtbWFyeTogSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHByb2NlZWQgd2l0aCBmdXp6aW5nIHRoaXMgdXNpbmcgYEVYVDRfRlNgIGFzIHRoZSBvbmx5IGVuYWJsZWQgY29uZmlnLiBUaGUgcGF0Y2gmIzM5O3Mgc2NvcGUsIHRoZSBmdW5jdGlvbnMgaXQgdGFyZ2V0cywgYW5kIGl0cyByZWFjaGFiaWxpdHkgbWFrZSBpdCBhIHdvcnRod2hpbGUgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2piZDJfam91cm5hbF9sb2FkJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfY29tbWl0JiMzNDssCiAgICAmIzM0O2V4dDRfZmNfaW5pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbW91bnQvcmVjb3ZlcnkgcGF0aCBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2piZDJfam91cm5hbF9sb2FkJiMzNDssCiAgICAmIzM0O2V4dDRfZmNfY29tbWl0JiMzNDssCiAgICAmIzM0O2V4dDRfZmNfaW5pdCYjMzQ7LAogICAgJiMzNDtleHQ0X2ZjX3JlcGxheV9jbGVhbnVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbW91bnQvcmVjb3ZlcnkgcGF0aCBhbmQgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDU6MzY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQyOTRiMWJjYzg4ZTRlNDNlNWUzZWRkMDcwYWM3MzA0MTMxOTdiN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTozNTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzLi42YzJiMjc1YTljZjMzIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jCkBAIC02MDk2LDYgJiM0Mzs2MDk2LDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCWludCBlcnIgPSAwOwogCWludCByZWFsbHlfcmVhZF9vbmx5OwogCWludCBqb3VybmFsX2Rldl9ybzsKJiM0MzsJYm9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIWV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbChzYikpKQogCQlyZXR1cm4gLUVGU0NPUlJVUFRFRDsKQEAgLTYxNTIsNiAmIzQzOzYxNTMsNyBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQl9CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAmIzM0O3dyaXRlIGFjY2VzcyB3aWxsICYjMzQ7CiAJCQkgICAgICAgJiMzNDtiZSBlbmFibGVkIGR1cmluZyByZWNvdmVyeSYjMzQ7KTsKJiM0MzsJCQllbmFibGVfd3JpdGUgPSB0cnVlOwogCQl9CiAJfQogCkBAIC02MTY4LDcgJiM0Mzs2MTcwLDE5IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJaWYgKHNhdmUpCiAJCQltZW1jcHkoc2F2ZSwgKChjaGFyICopIGVzKSAmIzQzOwogCQkJICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXMKJiM0MzsJCSAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seQomIzQzOwkJICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0CiYjNDM7CQkgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXkKJiM0MzsJCSAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZAomIzQzOwkJICogeWV0LCBzbyBub3RoaW5nIGNhbiBvYnNlcnZlIHRoZSB0cmFuc2llbnQgc3RhdGUuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChlbmFibGVfd3JpdGUpCiYjNDM7CQkJc2ItJmd0O3NfZmxhZ3MgJmFtcDs9IH5TQl9SRE9OTFk7CiAJCWVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpOwomIzQzOwkJaWYgKGVuYWJsZV93cml0ZSkKJiM0MzsJCQlzYi0mZ3Q7c19mbGFncyB8PSBTQl9SRE9OTFk7CiAJCWlmIChzYXZlICZhbXA7JmFtcDsgbWVtY21wKCgoY2hhciAqKSBlcykgJiM0MzsgRVhUNF9TX0VSUl9TVEFSVCwKIAkJCQkgICBzYXZlLCBFWFQ0X1NfRVJSX0xFTikpIHsKIAkJCW1lbWNweSgoKGNoYXIgKikgZXMpICYjNDM7IEVYVDRfU19FUlJfU1RBUlQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU1CgkJCQkJCQlvdXRwdXQ6IDE0MgoJCQkJCQkJdGhvdWdodHM6IDQ1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWQtT25seSBTdXBlcmJsb2NrIEZhc3QgQ29tbWl0IFJlcGxheSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZXh0NF9sb2FkX2pvdXJuYWxgLiBUaGUgY29yZSBpc3N1ZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGlzIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5IGNhbiBmYWlsIG9uIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgYmVjYXVzZSBpdCB0cmllcyB0byBwZXJmb3JtIG1ldGFkYXRhIHVwZGF0ZXMsIHdoaWNoIGFyZSBuYXR1cmFsbHkgYmxvY2tlZCBpbiB0aGF0IG1vZGUuIFRoZSBwYXRjaCYjMzk7cyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCBpbnRyb2R1Y2VzIGEgYm9vbGVhbiwgYGVuYWJsZV93cml0ZWAsIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIFRoZSBrZXkgbG9naWMgaXMgY29uZGl0aW9uYWwuIElmIHRoZSBzdXBlcmJsb2NrIGlzIHJlYWQtb25seSBidXQgcmVjb3ZlcnkgaXMgbmVlZGVkLCBgZW5hYmxlX3dyaXRlYCBnZXRzIGZsaXBwZWQgdG8gYHRydWVgLiBDcnVjaWFsbHksIGJlZm9yZSBjYWxsaW5nIGBqYmQyX2pvdXJuYWxfbG9hZGAsIGl0ICp0ZW1wb3JhcmlseSogY2xlYXJzIHRoZSBgU0JfUkRPTkxZYCBmbGFnIGZyb20gYHNiLSZndDtzX2ZsYWdzYCBpZiBgZW5hYmxlX3dyaXRlYCBpcyB0cnVlLiBUaGVuLCBhZnRlciB0aGUgam91cm5hbCBsb2FkLCBpdCAqcmUtc2V0cyogYFNCX1JET05MWWAgaWYgdGhlIGZsYWcgd2FzIG1vZGlmaWVkLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IE5vdCBhdCBhbGwuIEl0JiMzOTtzIHNvbGVseSBtYW5pcHVsYXRpbmcgYSBmbGFnIHdpdGhpbiB0aGUgc3VwZXJibG9jayBzdHJ1Y3R1cmUgKGBzYi0mZ3Q7c19mbGFnc2ApLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBhbmQgYGVuYWJsZV93cml0ZWAgaXMgaW5pdGlhbGl6ZWQgZXhwbGljaXRseS4gVGhlIGNvZGUgaXMgb25seSBhbHRlcmluZyBhIGZsYWcuIEkgZG9uJiMzOTt0IHNlZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGNvZGUgc25pcHBldDoKCmBgYGMKCWJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7Ci4uLgoJCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAmIzM0O3dyaXRlIGFjY2VzcyB3aWxsICYjMzQ7CgkJCSAgICAgICAmIzM0O2JlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5JiMzNDspOwomIzQzOwkJCWVuYWJsZV93cml0ZSA9IHRydWU7Ci4uLgomIzQzOwkJaWYgKGVuYWJsZV93cml0ZSkKJiM0MzsJCQlzYi0mZ3Q7c19mbGFncyAmYW1wOz0gflNCX1JET05MWTsKIAkJZXJyID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7CiYjNDM7CQlpZiAoZW5hYmxlX3dyaXRlKQomIzQzOwkJCXNiLSZndDtzX2ZsYWdzIHw9IFNCX1JET05MWTsKYGBgCgpJdCYjMzk7cyBwdXJlIGNvbnRyb2wgZmxvdyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVGhlIGNvZGUgY2xlYW5seSBoYW5kbGVzIGEgZmxhZyBtb2RpZmljYXRpb24sIHRlbXBvcmFyaWx5IGRpc2FibGluZyBhIHdyaXRlLXByb3RlY3Rpb24uIE5vIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgb3IgdW5pbml0aWFsaXplZCBkYXRhIGlzIGluIHRoZSBtaXguIENvbnNlcXVlbnRseSwgSSBkb24mIzM5O3QgdGhpbmsgd2UgbmVlZCB0byB0ZXN0IHRoaXMgcGF0Y2ggd2l0aCBLTVNBTi4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQuIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA1OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGpvdXJuYWwgbG9hZGluZyBsb2dpYyB0byB0ZW1wb3JhcmlseSBjbGVhciB0aGUgU0JfUkRPTkxZIGZsYWcgZHVyaW5nIGZhc3QgY29tbWl0IHJlcGxheSBpZiB0aGUgZmlsZXN5c3RlbSB3YXMgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgcHVyZWx5IGEgc3RhdGUgbWFuYWdlbWVudCBhbmQgY29udHJvbCBmbG93IGNoYW5nZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgcmFjZSBjb25kaXRpb25zIG9yIGludmFsaWQgc3RhdGUpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gb3IgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDcuNjI4OTg2NDg1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MTc4MzYzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTowNy42Mjg5OTA2MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODU3Mjc2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDA1OjM1OjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xcbmluZGV4IDI0NWY2N2QxMGRlZDMuLjZjMmIyNzVhOWNmMzMgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTYwOTYsNiArNjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcdGludCByZWFsbHlfcmVhZF9vbmx5O1xcbiBcXHRpbnQgam91cm5hbF9kZXZfcm87XFxuK1xcdGJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XFxuQEAgLTYxNTIsNiArNjE1Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcXFwid3JpdGUgYWNjZXNzIHdpbGwgXFxcIlxcbiBcXHRcXHRcXHQgICAgICAgXFxcImJlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5XFxcIik7XFxuK1xcdFxcdFxcdGVuYWJsZV93cml0ZSA9IHRydWU7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtNjE2OCw3ICs2MTcwLDE5IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4gXFx0XFx0aWYgKHNhdmUpXFxuIFxcdFxcdFxcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICtcXG4gXFx0XFx0XFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXFxuK1xcdFxcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxcbitcXHRcXHQgKiBzdXBlcmJsb2NrLiAgV2UgcHJvbWlzZWQgd3JpdGUgYWNjZXNzIGFib3ZlLCBzbyBtYWtlIHRoYXRcXG4rXFx0XFx0ICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5XFxuK1xcdFxcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxcbitcXHRcXHQgKiB5ZXQsIHNvIG5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIHRyYW5zaWVudCBzdGF0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChlbmFibGVfd3JpdGUpXFxuK1xcdFxcdFxcdHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjY9IH5TQl9SRE9OTFk7XFxuIFxcdFxcdGVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpO1xcbitcXHRcXHRpZiAoZW5hYmxlX3dyaXRlKVxcbitcXHRcXHRcXHRzYi1cXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XFxuIFxcdFxcdGlmIChzYXZlIFxcdTAwMjZcXHUwMDI2IG1lbWNtcCgoKGNoYXIgKikgZXMpICsgRVhUNF9TX0VSUl9TVEFSVCxcXG4gXFx0XFx0XFx0XFx0ICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7XFxuIFxcdFxcdFxcdG1lbWNweSgoKGNoYXIgKikgZXMpICsgRVhUNF9TX0VSUl9TVEFSVCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDguOTE1NDI4MzAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzI0MzgwNTIyNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMjk0YjFiY2M4OGU0ZTQzZTVlM2VkZDA3MGFjNzMwNDEzMTk3YjdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDU6MzU6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDMuLjZjMmIyNzVhOWNmMzMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTYwOTYsNiArNjA5Niw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IHJlYWxseV9yZWFkX29ubHk7XG4gXHRpbnQgam91cm5hbF9kZXZfcm87XG4rXHRib29sIGVuYWJsZV93cml0ZSA9IGZhbHNlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkpXG4gXHRcdHJldHVybiAtRUZTQ09SUlVQVEVEO1xuQEAgLTYxNTIsNiArNjE1Myw3IEBAIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0XHR9XG4gXHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXCJ3cml0ZSBhY2Nlc3Mgd2lsbCBcIlxuIFx0XHRcdCAgICAgICBcImJlIGVuYWJsZWQgZHVyaW5nIHJlY292ZXJ5XCIpO1xuK1x0XHRcdGVuYWJsZV93cml0ZSA9IHRydWU7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02MTY4LDcgKzYxNzAsMTkgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRpZiAoc2F2ZSlcbiBcdFx0XHRtZW1jcHkoc2F2ZSwgKChjaGFyICopIGVzKSArXG4gXHRcdFx0ICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTtcbitcdFx0LypcbitcdFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXG4rXHRcdCAqIChzZWUgZXh0NF9mY19yZXBsYXkoKSkgd2hpY2ggcmVmdXNlIHRvIHJ1biBvbiBhIHJlYWQtb25seVxuK1x0XHQgKiBzdXBlcmJsb2NrLiAgV2UgcHJvbWlzZWQgd3JpdGUgYWNjZXNzIGFib3ZlLCBzbyBtYWtlIHRoYXRcbitcdFx0ICogdHJ1ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZWNvdmVyeSwgdGhlIHNhbWUgd2F5XG4rXHRcdCAqIGV4dDRfb3JwaGFuX2NsZWFudXAoKSBkb2VzLiAgVGhlIHN1cGVyYmxvY2sgaXMgbm90IHB1Ymxpc2hlZFxuK1x0XHQgKiB5ZXQsIHNvIG5vdGhpbmcgY2FuIG9ic2VydmUgdGhlIHRyYW5zaWVudCBzdGF0ZS5cbitcdFx0ICovXG4rXHRcdGlmIChlbmFibGVfd3JpdGUpXG4rXHRcdFx0c2ItXHUwMDNlc19mbGFncyBcdTAwMjY9IH5TQl9SRE9OTFk7XG4gXHRcdGVyciA9IGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpO1xuK1x0XHRpZiAoZW5hYmxlX3dyaXRlKVxuK1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgfD0gU0JfUkRPTkxZO1xuIFx0XHRpZiAoc2F2ZSBcdTAwMjZcdTAwMjYgbWVtY21wKCgoY2hhciAqKSBlcykgKyBFWFQ0X1NfRVJSX1NUQVJULFxuIFx0XHRcdFx0ICAgc2F2ZSwgRVhUNF9TX0VSUl9MRU4pKSB7XG4gXHRcdFx0bWVtY3B5KCgoY2hhciAqKSBlcykgKyBFWFQ0X1NfRVJSX1NUQVJULFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MDguOTE1NDI5NDgzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4NTE0NTE3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQ6IGV4dDQgSm91cm5hbCBMb2FkaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgZnMvZXh0NC9zdXBlci5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZXh0NF9sb2FkX2pvdXJuYWwoKWAgZnVuY3Rpb24uIEl0IHNlZW1zIHRoaXMgcGF0Y2ggaXMgY29uZGl0aW9uYWxseSBjbGVhcmluZyB0aGUgYFNCX1JET05MWWAgZmxhZyBmcm9tIHRoZSBzdXBlcmJsb2NrJ3MgZmxhZ3MgKGBzYi1cdTAwM2VzX2ZsYWdzYCkgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkKGpvdXJuYWwpYCBhbmQgdGhlbiByZXN0b3JpbmcgaXQuIFRoZSBqdXN0aWZpY2F0aW9uIGlzIHRvIGFsbG93IGZhc3QgY29tbWl0IHJlcGxheSB0byB0b3VjaCBtZXRhZGF0YSBldmVuIG9uIHdoYXQncyBlc3NlbnRpYWxseSBhIHJlYWQtb25seSBmaWxlc3lzdGVtLCByaWdodD8gSW50ZXJlc3RpbmcuIFRoaXMgc3RyaWtlcyBtZSBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuV2h5PyBXZWxsLCBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBKb3VybmFsIGxvYWRpbmcgaXMgYSBjcml0aWNhbCBwcm9jZXNzIGFuZCBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZGVmaW5pdGVseSBleGVyY2lzZS4gQW5kIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIHRoYXQgbG9naWMsIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGFyZ2V0IHdlIHdhbnQgd2hlbiBodW50aW5nIGZvciBvYnNjdXJlIGVkZ2UgY2FzZXMuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNvbmZpZ3VyZSBleHQ0IGZvciB0aGUgZnV6emluZyBzZXR1cC4gTGV0J3Mgc2VlLi4uIEknbSBwcmV0dHkgc3VyZSBgQ09ORklHX0VYVDRfRlNgIGlzIHRoZSBtYWluIG9uZSB0byBlbmFibGUsIG9mIGNvdXJzZS4gVGhlbiBJIG5lZWQgdG8gbG9vayBjbG9zZXIgYXQgdGhlIHNwZWNpZmljIGNvZGUgaW4gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGZsYWdzIGFuZCBjb25kaXRpb25zIGFyZSBhZmZlY3RpbmcgdGhlIGpvdXJuYWwgbG9hZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1OCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjE0LjEwMDU3NzM3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA2MjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2xvYWRfam91cm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTY2PXN0YXRpYyBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIGV4dDRfbW91bnRfbXNnX3JhdGVsaW1pdDtcXG5mcy9leHQ0L3N1cGVyLmMtNjctXFxuZnMvZXh0NC9zdXBlci5jOjY4OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosXFxuZnMvZXh0NC9zdXBlci5jLTY5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBqb3VybmFsX2Rldm51bSk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDk1Nj1zdGF0aWMgaW50IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDk2Mi1cXG5mcy9leHQ0L3N1cGVyLmM6NDk2MzpcXHRlcnIgPSBleHQ0X2xvYWRfam91cm5hbChzYiwgZXMsIGN0eC1cXHUwMDNlam91cm5hbF9kZXZudW0pO1xcbmZzL2V4dDQvc3VwZXIuYy00OTY0LVxcdGlmIChlcnIpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjA1MD1zdGF0aWMgam91cm5hbF90ICpleHQ0X29wZW5fZGV2X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02MDg4LVxcbmZzL2V4dDQvc3VwZXIuYzo2MDg5OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNjA5MC1cXHRcXHRcXHQgICAgIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MTQuMTQ0NjQ0OTM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MzYzMjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqVHJhY2luZyB0aGUgRXh0NCBKb3VybmFsIExvYWRpbmcgRnVuY3Rpb25zKipcblxuT2theSwgc28gYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCwgdGhhdCBtZWFucyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQgd2hlcmUgaXQncyBkZWZpbmVkLiBBbmQgaXQncyBjYWxsZWQgYnkgYGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsYCwgd2hpY2ggaXMgKmFsc28qIHN0YXRpYy4gSG1tLCB0aGF0IGxpbWl0cyBvdXIgYWJpbGl0eSB0byB0cmFjZSBpdCBkaXJlY3RseSBmcm9tIGEgaGlnaGVyIGxldmVsLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNhbGwgKnBhdGgqIHRvIHRoaXMgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlLiBUaGUgb2JqZWN0aXZlIGlzIHRvIGlkZW50aWZ5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiDigJMgb3IsIGlkZWFsbHksIGFuICplbnRyeSBwb2ludCogaW50byB0aGUgam91cm5hbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIOKAkyBmcm9tIHdoaWNoIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hlbiBhbmQgaG93IHRoZSBqb3VybmFsIGlzIGFjdHVhbGx5IGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aGluIHRoZSBmaWxlc3lzdGVtIGNvbnRleHQuIEkgbmVlZCB0byBrZWVwIHRyYWNpbmcgdXB3YXJkcywgbG9va2luZyBmb3IgdGhlIHBsYWNlIHRoaXMgd2hvbGUgam91cm5hbCBsb2FkaW5nIHNlcXVlbmNlIGlzIGluaXRpYXRlZC4gSSdsbCBmb2N1cyBvbiBmaW5kaW5nIHRoZSBmaXJzdCBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MTcuNzg4Mjc5OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyNjQ4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9zdXBlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvc3VwZXIuYz00ODk2PXN0YXRpYyBpbnQgZXh0NF9ncm91cF9kZXNjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy00OTU1LVxcbmZzL2V4dDQvc3VwZXIuYzo0OTU2OnN0YXRpYyBpbnQgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L3N1cGVyLmMtNDk1Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTExLVxcdGlmICghdGVzdF9vcHQoc2IsIE5PTE9BRCkgXFx1MDAyNlxcdTAwMjYgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsKHNiKSkge1xcbmZzL2V4dDQvc3VwZXIuYzo1NTEyOlxcdFxcdGVyciA9IGV4dDRfbG9hZF9hbmRfaW5pdF9qb3VybmFsKHNiLCBlcywgY3R4KTtcXG5mcy9leHQ0L3N1cGVyLmMtNTUxMy1cXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNToxNy44MzY1NDc0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTkwNTUyMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgRW50cnkgUG9pbnQgQW5hbHlzaXM6IGBleHQ0X2ZpbGxfc3VwZXJgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGV4dDQgbW91bnRpbmcgcHJvY2Vzcy4gVGhlIGZpcnN0IHRoaW5nIEknbSBjaGVja2luZyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGV4dDQgZmlsZXN5c3RlbSBtb3VudC4gSXQgbG9va3MgbGlrZSBgX19leHQ0X2ZpbGxfc3VwZXJgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBOb3csIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBleHQ0X2ZpbGxfc3VwZXJgIGlzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNToyMC42OTU2MDUzOTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxOTExOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9maWxsX3N1cGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9NTMzMT1zdGF0aWMgYm9vbCBleHQ0X2lzX3N0cmlwZV9pbmNvbXBhdGlibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBzdHJpcGUpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTMzNy1cXG5mcy9leHQ0L3N1cGVyLmM6NTMzODpzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNTMzOS17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTc1MT1mYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU4MDctXFxuZnMvZXh0NC9zdXBlci5jOjU4MDg6c3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODA5LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01ODI3LVxcbmZzL2V4dDQvc3VwZXIuYzo1ODI4OlxcdHJldCA9IF9fZXh0NF9maWxsX3N1cGVyKGZjLCBzYik7XFxuZnMvZXh0NC9zdXBlci5jLTU4MjktXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTg1OD1zdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODU5LXtcXG5mcy9leHQ0L3N1cGVyLmM6NTg2MDpcXHRyZXR1cm4gZ2V0X3RyZWVfYmRldihmYywgZXh0NF9maWxsX3N1cGVyKTtcXG5mcy9leHQ0L3N1cGVyLmMtNTg2MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjIwLjc0MTgwMzI1MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4Mzc0MDg5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRm9jdXNpbmcgb24gdGhlIEVYVDQgTW91bnQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIEVYVDQgdnVsbmVyYWJpbGl0eSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXR0YWNrIHN1cmZhY2UgZm9yIGZ1enppbmcuICpleHQ0X2ZpbGxfc3VwZXIqIGlzIHN0YXRpYywgaG1tLCBub3QgaGVscGZ1bCBkaXJlY3RseS4gQW5kIHRoZSByZWFsIGVudHJ5IHBvaW50LCAqZXh0NF9nZXRfdHJlZSosIGlzIGFsc28gZGVjbGFyZWQgc3RhdGljLiBUaGF0J3MgYSBiaXQgb2YgYSByb2FkYmxvY2suIEJ1dCBob2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfZ2V0X3RyZWUqIGlzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgZnNfY29udGV4dF9vcGVyYXRpb25zYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGdldHRpbmcgY2FsbGVkLlxuXG5MZXQncyBzZWUuLi4gKmV4dDRfbW91bnQqPyBObywgc3RpbGwgc3RhdGljLiBSaWdodCwgaXQncyAqZXh0NF9nZXRfdHJlZSouIEJ1dCB3YWl0LCBJIHJlbWVtYmVyIHRoYXQgKmV4dDRfbG9hZF9qb3VybmFsKiBpcyBjYWxsZWQgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBUaGF0IHNlZW1zIGxpa2UgYSBwcmltZSB0YXJnZXQhIEZ1enppbmcgdGhlIG1vdW50IHByb2Nlc3MgaXRzZWxmLCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIGFwcHJvYWNoLiBBIGZ1enppbmcgaGFybmVzcyBmb2N1c2VkIG9uIGZpbGUgc3lzdGVtIG1vdW50aW5nIHNlZW1zIGxpa2UgdGhlIHdheSB0byBnby5cblxuTm93LCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBBaCwgdGhlIHBhdGNoIG1lbnRpb25zICpleHQ0X2ZjX3JlcGxheSgpKi4gSSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayB0aGF0IGZ1bmN0aW9uIHRvby4gSXQncyBwcm9iYWJseSB3b3J0aCBpbnZlc3RpZ2F0aW5nIHJlZ2FyZGxlc3Mgb2YgbW91bnQgdGltZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MjYuNTc5MjE3MTQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE4MTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2ZjX3JlcGxheVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0xNTg2PXN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMTg2MS0jZW5kaWZcXG5mcy9leHQ0L2V4dDQuaDoxODYyOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSBzX2ZjX3JlcGxheV9zdGF0ZTtcXG5mcy9leHQ0L2V4dDQuaC0xODYzLX07XFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zMDY4PXZvaWQgZXh0NF9mY19kZWwoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0Lmg6MzA2OTpib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibG9jayk7XFxuZnMvZXh0NC9leHQ0Lmg6MzA3MDp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XFxuZnMvZXh0NC9leHQ0LmgtMzA3MS1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xODA0PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2ZjX2dldF90bChzdHJ1Y3QgZXh0NF9mY190bF9tZW0gKnRsLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTMtLyogVW5saW5rIHJlcGxheSBmdW5jdGlvbiAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODE0OnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfdW5saW5rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4MTUtXFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgyMy1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTgyNDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfVU5MSU5LLCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTgyNS1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODUyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODUzOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfbGlua19pbnRlcm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODU0LVxcdFxcdFxcdFxcdHN0cnVjdCBkZW50cnlfaW5mb19hcmdzICpkYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE4ODgtLyogTGluayByZXBsYXkgZnVuY3Rpb24gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTg4OTpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2xpbmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xODk2LVxcdHRsX3RvX2RhcmcoXFx1MDAyNmRhcmcsIHRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxODk3OlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19MSU5LLCBkYXJnLmlubyxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTg5OC1cXHRcXHRcXHRkYXJnLnBhcmVudF9pbm8sIGRhcmcuZG5hbWVfbGVuKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTA1LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTA2OlxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFxcdTAwMjZkYXJnLCBpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MDctXFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTkxNT1zdGF0aWMgaW50IGV4dDRfZmNfcmVjb3JkX21vZGlmaWVkX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8pXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTYte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxOTE3OlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5MTgtXFx0aW50IGk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk0My0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk0NDpzdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5NDUtXFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfZmNfdGxfbWVtICp0bCwgdTggKnZhbClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTU4LVxcdGlubyA9IGxlMzJfdG9fY3B1KGZjX2lub2RlLmZjX2lubyk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE5NTk6XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIHRhZywgaW5vLCAwLCAwKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk2MC1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDQ5LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDUwOnN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwNTEtXFx0XFx0XFx0XFx0IHN0cnVjdCBleHQ0X2ZjX3RsX21lbSAqdGwsIHU4ICp2YWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjA1OS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjA2MDpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQ1JFQVQsIGRhcmcuaW5vLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDYxLVxcdFxcdFxcdGRhcmcucGFyZW50X2lubywgZGFyZy5kbmFtZV9sZW4pO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTItXFx0fVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMDkzOlxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2xpbmtfaW50ZXJuYWwoc2IsIFxcdTAwMjZkYXJnLCBpbm9kZSk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwOTQtXFx0aWYgKHJldClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMTA4PWludCBleHQ0X2ZjX3JlY29yZF9yZWdpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpbm8sXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjExMC17XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxMTE6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjExMi1cXHRzdHJ1Y3QgZXh0NF9mY19hbGxvY19yZWdpb24gKnJlZ2lvbjtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTQ3LS8qIFJlcGxheSBhZGQgcmFuZ2UgdGFnICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIxNDg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE0OS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjE2Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjE2MzpcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgRVhUNF9GQ19UQUdfQUREX1JBTkdFLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTY0LVxcdFxcdGxlMzJfdG9fY3B1KGZjX2FkZF9leC5mY19pbm8pLCBsZTMyX3RvX2NwdShleC1cXHUwMDNlZWVfYmxvY2spLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyNjc9c3RhdGljIGludFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjY4OmV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjY5LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMjc5LVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjgwOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5KHNiLCBFWFQ0X0ZDX1RBR19ERUxfUkFOR0UsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyODEtXFx0XFx0bGUzMl90b19jcHUobHJhbmdlLmZjX2lubyksIGN1ciwgcmVtYWluaW5nKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMjkte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzMwOlxcdHN0cnVjdCBleHQ0X2ZjX3JlcGxheV9zdGF0ZSAqc3RhdGU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMzEtXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzg2LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMzg3OmJvb2wgZXh0NF9mY19yZXBsYXlfY2hlY2tfZXhjbHVkZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9mc2Jsa190IGJsaylcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM4OC17XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzODktXFx0aW50IGk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzOTA6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM5MS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA0LS8qIENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIGFmdGVyIHJlcGxheSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDA1OnZvaWQgZXh0NF9mY19yZXBsYXlfY2xlYW51cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDA2LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDE0PXN0YXRpYyBib29sIGV4dDRfZmNfdmFsdWVfbGVuX2lzdmFsaWQoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NTctICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NTg6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9zY2FuKGpvdXJuYWxfdCAqam91cm5hbCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ1OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgb2ZmLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI0NjMtXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI0NjQ6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQ2NS1cXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU3Mi1vdXRfZXJyOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNTczOlxcdHRyYWNlX2V4dDRfZmNfcmVwbGF5X3NjYW4oc2IsIHJldCwgb2ZmKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU3NC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODAtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODE6c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheShqb3VybmFsX3QgKmpvdXJuYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI1ODItXFx0XFx0XFx0XFx0ZW51bSBwYXNzdHlwZSBwYXNzLCBpbnQgb2ZmLCB0aWRfdCBleHBlY3RlZF90aWQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU4OC1cXHRpbnQgcmV0ID0gSkJEMl9GQ19SRVBMQVlfQ09OVElOVUU7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1ODk6XFx0c3RydWN0IGV4dDRfZmNfcmVwbGF5X3N0YXRlICpzdGF0ZSA9IFxcdTAwMjZzYmktXFx1MDAzZXNfZmNfcmVwbGF5X3N0YXRlO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkwLVxcdHN0cnVjdCBleHQ0X2ZjX3RhaWwgdGFpbDtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNTkzLVxcdFxcdHN0YXRlLVxcdTAwM2VmY19jdXJyZW50X3Bhc3MgPSBQQVNTX1NDQU47XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI1OTQ6XFx0XFx0cmV0dXJuIGV4dDRfZmNfcmVwbGF5X3NjYW4oam91cm5hbCwgYmgsIG9mZiwgZXhwZWN0ZWRfdGlkKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjU5NS1cXHR9XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzMS1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0xJTks6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2MzI6XFx0XFx0XFx0cmV0ID0gZXh0NF9mY19yZXBsYXlfbGluayhzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjMzLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM0LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfVU5MSU5LOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjM1OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X3VubGluayhzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM2LVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjM3LVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfQUREX1JBTkdFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjM4OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzYiwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjYzOS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0MC1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0NSRUFUOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQxOlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2NyZWF0ZShzYiwgXFx1MDAyNnRsLCB2YWwpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQyLVxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjQzLVxcdFxcdGNhc2UgRVhUNF9GQ19UQUdfREVMX1JBTkdFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ0OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2RlbF9yYW5nZShzYiwgdmFsKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0NS1cXHRcXHRcXHRicmVhaztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY0Ni1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX0lOT0RFOlxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjQ3OlxcdFxcdFxcdHJldCA9IGV4dDRfZmNfcmVwbGF5X2lub2RlKHNiLCBcXHUwMDI2dGwsIHZhbCk7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDgtXFx0XFx0XFx0YnJlYWs7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NDktXFx0XFx0Y2FzZSBFWFQ0X0ZDX1RBR19QQUQ6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTA6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1BBRCwgMCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1MS1cXHRcXHRcXHRcXHRcXHQgICAgIHRsLmZjX2xlbiwgMCk7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY1My1cXHRcXHRjYXNlIEVYVDRfRkNfVEFHX1RBSUw6XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjI2NTQ6XFx0XFx0XFx0dHJhY2VfZXh0NF9mY19yZXBsYXkoc2IsIEVYVDRfRkNfVEFHX1RBSUwsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NTUtXFx0XFx0XFx0XFx0XFx0ICAgICAwLCB0bC5mY19sZW4sIDApO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2NjEtXFx0XFx0ZGVmYXVsdDpcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY2MjpcXHRcXHRcXHR0cmFjZV9leHQ0X2ZjX3JlcGxheShzYiwgdGwuZmNfdGFnLCAwLCB0bC5mY19sZW4sIDApO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjYzLVxcdFxcdFxcdHJldCA9IC1FQ0FOQ0VMRUQ7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjY3Mz12b2lkIGV4dDRfZmNfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3OS1cXHQgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MDpcXHRqb3VybmFsLVxcdTAwM2VqX2ZjX3JlcGxheV9jYWxsYmFjayA9IGV4dDRfZmNfcmVwbGF5O1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjgxLVxcdGlmICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xMzk9c3RydWN0IGV4dDRfZmNfYWxsb2NfcmVnaW9uIHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDctICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE0ODpzdHJ1Y3QgZXh0NF9mY19yZXBsYXlfc3RhdGUge1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xNDktXFx0aW50IGZjX3JlcGxheV9udW1fdGFncztcXG4tLVxcbmZzL2V4dDQvbWJhbGxvYy5jPTYxNjI9ZXh0NF9tYl9uZXdfYmxvY2tzX3NpbXBsZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgKmFyLCBpbnQgKmVycnApXFxuLS1cXG5mcy9leHQ0L21iYWxsb2MuYy02MTkzLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL2V4dDQvbWJhbGxvYy5jOjYxOTQ6XFx0XFx0XFx0aWYgKGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHNiLFxcbmZzL2V4dDQvbWJhbGxvYy5jLTYxOTUtXFx0XFx0XFx0XFx0ZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApICtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MzM4PXN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTU2MzctXFx0fVxcbmZzL2V4dDQvc3VwZXIuYzo1NjM4OlxcdGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc2IpO1xcbmZzL2V4dDQvc3VwZXIuYy01NjM5LVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTYwODk9c3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTYxNzQtXFx0XFx0ICogRmFzdCBjb21taXQgcmVwbGF5IHBlcmZvcm1zIHJlZ3VsYXIgZXh0NCBtZXRhZGF0YSB1cGRhdGVzXFxuZnMvZXh0NC9zdXBlci5jOjYxNzU6XFx0XFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XFxuZnMvZXh0NC9zdXBlci5jLTYxNzYtXFx0XFx0ICogc3VwZXJibG9jay4gIFdlIHByb21pc2VkIHdyaXRlIGFjY2VzcyBhYm92ZSwgc28gbWFrZSB0aGF0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjI2LjY1NzQwMzkwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODgzMzUzNTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBKb3VybmFsIExvYWRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZm9jdXMgaGVyZSBpcyBvbiB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgYW5kIGZhc3QgY29tbWl0IHJlcGxheSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyB0aGF0IG1pZ2h0IGJlIGZydWl0ZnVsIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbSBzZWVpbmcgdGhhdCB0aGUgY29yZSBmYXN0IGNvbW1pdCByZXBsYXkgZnVuY3Rpb24sIGBleHQ0X2ZjX3JlcGxheWAsIGlzIHN0YXRpYywgYnV0IGl0J3MgYXNzaWduZWQgdG8gYGpvdXJuYWwtXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2tgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBub3QgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLlxuXG5NeSBhdHRlbnRpb24gdGhlbiBzaGlmdGVkIHRvIHRoZSBqb3VybmFsIGxvYWRpbmcgcHJvY2VzcyBpdHNlbGYuIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGlzIGBqYmQyX2pvdXJuYWxfbG9hZGAsIHdoaWNoIGNhbGxzIHRoZSByZXBsYXkgY2FsbGJhY2suIE5vdywgbXkgY29uY2VybiB3aXRoIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgdGhhdCBpdCdzIHdpdGhpbiBgZnMvamJkMi9qb3VybmFsLmNgLCBhbmQgc28gaXMgcHJvYmFibHkgbm90IHdoYXQgSSBhbSBtb3N0IGludGVyZXN0ZWQgaW4uXG5cbkkgd2FzIG9yaWdpbmFsbHkgY2hlY2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3ZSBjYW4gZm9jdXMgb24uIGBleHQ0X2xvYWRfam91cm5hbGAsIGBleHQ0X2ZpbGxfc3VwZXJgLCBhbmQgYGV4dDRfZ2V0X3RyZWVgIGFyZSBhbGwgc3RhdGljLCBzbyB0aGV5IGFyZSBub3QgdmVyeSBsaWtlbHkgZW50cnkgcG9pbnRzLiBgZXh0NF9mY19pbml0YCBpcyBub24tc3RhdGljLCBidXQgaXQgaXMgdW5saWtlbHkgdG8gaGF2ZSBhIGNsb3NlIGNvbm5lY3Rpb24gdG8gdGhlIGBtb3VudGAgcHJvY2Vzcy5cblxuTXkgc3RyYXRlZ3kgbm93IGlzIHRvIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBub24tc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1vdW50aW5nIHdpdGhpbiBgZnMvZXh0NC9zdXBlci5jYC4gVGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwIHRvIHVuY292ZXIgYW55IHJlbGV2YW50IGVudHJ5IHBvaW50cyBmb3IgdGhlIGpvdXJuYWwgbG9hZGluZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTk2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjMxLjU0MDc2MTYwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzQyNzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZXh0NF8uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9MTg0PXZvaWQgZXh0NF9yZWFkX2JoX25vd2FpdChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk1LVxcbmZzL2V4dDQvc3VwZXIuYzoxOTY6aW50IGV4dDRfcmVhZF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBibGtfb3BmX3Qgb3BfZmxhZ3MsXFxuZnMvZXh0NC9zdXBlci5jLTE5Ny1cXHRcXHQgYmlvX2VuZF9pb190IGVuZF9pbywgYm9vbCBzaW11X2ZhaWwpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMjEzLVxcbmZzL2V4dDQvc3VwZXIuYzoyMTQ6aW50IGV4dDRfcmVhZF9iaF9sb2NrKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGJsa19vcGZfdCBvcF9mbGFncywgYm9vbCB3YWl0KVxcbmZzL2V4dDQvc3VwZXIuYy0yMTUte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTMwOTE9c3RhdGljIGludCBleHQ0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zMDk1LVxcbmZzL2V4dDQvc3VwZXIuYzozMDk2OmludCBleHQ0X3NlcV9vcHRpb25zX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldClcXG5mcy9leHQ0L3N1cGVyLmMtMzA5Ny17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MzEwNz1zdGF0aWMgaW50IGV4dDRfc2V0dXBfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTMxNjQtXFxuZnMvZXh0NC9zdXBlci5jOjMxNjU6aW50IGV4dDRfYWxsb2NfZmxleF9iZ19hcnJheShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3Qgbmdyb3VwKVxcbmZzL2V4dDQvc3VwZXIuYy0zMTY2LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zMjQ2PXN0YXRpYyBfX2xlMTYgZXh0NF9ncm91cF9kZXNjX2NzdW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgX191MzIgYmxvY2tfZ3JvdXAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMzI4OS1cXG5mcy9leHQ0L3N1cGVyLmM6MzI5MDppbnQgZXh0NF9ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTMyIGJsb2NrX2dyb3VwLFxcbmZzL2V4dDQvc3VwZXIuYy0zMjkxLVxcdFxcdFxcdFxcdHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcClcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0zNTkxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGV4dDRfZ2V0X3N0cmlwZV9zaXplKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0zNjIyLSAqL1xcbmZzL2V4dDQvc3VwZXIuYzozNjIzOmludCBleHQ0X2ZlYXR1cmVfc2V0X29rKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCByZWFkb25seSlcXG5mcy9leHQ0L3N1cGVyLmMtMzYyNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDAxND1zdGF0aWMgc3RydWN0IGV4dDRfbGlfcmVxdWVzdCAqZXh0NF9saV9yZXF1ZXN0X25ldyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQwNDAtXFxuZnMvZXh0NC9zdXBlci5jOjQwNDE6aW50IGV4dDRfcmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2V4dDQvc3VwZXIuYy00MDQyLVxcdFxcdFxcdCAgICAgZXh0NF9ncm91cF90IGZpcnN0X25vdF96ZXJvZWQpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NDE3MD1zdGF0aWMgaW50IGNvdW50X292ZXJoZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncnAsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDIzMi0gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NDIzMzppbnQgZXh0NF9jYWxjdWxhdGVfb3ZlcmhlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L3N1cGVyLmMtNDIzNC17XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NjQwMj1zdGF0aWMgaW50IGV4dDRfY2xlYXJfam91cm5hbF9lcnIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy02NDQ1LSAqL1xcbmZzL2V4dDQvc3VwZXIuYzo2NDQ2OmludCBleHQ0X2ZvcmNlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvc3VwZXIuYy02NDQ3LXtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz03MjI0PXN0YXRpYyBpbnQgZXh0NF9xdW90YV9lbmFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNzI2NC0vKiBFbmFibGUgdXNhZ2UgdHJhY2tpbmcgZm9yIGFsbCBxdW90YSB0eXBlcy4gKi9cXG5mcy9leHQ0L3N1cGVyLmM6NzI2NTppbnQgZXh0NF9lbmFibGVfcXVvdGFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvZXh0NC9zdXBlci5jLTcyNjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTozMS42NTMxMDg3OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI2NTkyMzMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXh0NCBGaWxlc3lzdGVtIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgRXh0NCBjb2RlIGhlcmUuIEl0IGxvb2tzIGxpa2UgYGV4dDRfaW5pdF9mc19jb250ZXh0YCBpcyB0aGUga2V5IGVudHJ5IHBvaW50LCB0aGUgb25lIHRoZXkncmUgdXNpbmcgdG8gaGFuZGxlIHRoZSBtb3VudGluZyBjb250ZXh0LiBJbnRlcmVzdGluZyB0aGF0IGl0J3Mgbm90IHN0YXRpYy4gSG93ZXZlciwgSSBub3RpY2VkIHRoYXQgYGV4dDRfbG9hZF9qb3VybmFsYCBpcyBjYWxsZWQgZnJvbSBgX19leHQ0X2ZpbGxfc3VwZXJgLCBhbmQgdGhhdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIGpvdXJuYWwgaXMgaGFuZGxlZC4gSG1tLCBpcyBgZXh0NF9sb2FkX2FuZF9pbml0X2pvdXJuYWxgIG9yIGBleHQ0X2xvYWRfam91cm5hbGAgYWN0dWFsbHkgZXhwb3J0ZWQ/IEkgZG9uJ3QgKnRoaW5rKiBzbywgYnV0IGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nLiBTaW5jZSB0aGUgam91cm5hbCBpcyBpbXBvcnRhbnQsIHBlcmhhcHMgaXQgaXMgdXNlZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY29kZWJhc2UuIExldCdzIHNlZS4uLiBubywgdGhvc2UgYXJlbid0IGV4cG9ydGVkLi4uIE9rYXksIGxldCBtZSBwaXZvdCBvdmVyIHRvIGBmcy9leHQ0L2Zhc3RfY29tbWl0LmNgLiBJIG5lZWQgdG8gc2VlIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGtpY2tpbmcgYXJvdW5kIGluIHRoYXQgYXJlYSwgc2luY2UgaXQgZGVhbHMgd2l0aCBqb3VybmFsIGhhbmRsaW5nIHRvby4gUGVyaGFwcyB0aGUgYW5zd2VyIGlzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc1MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjM1Ljg3OTcwNDYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwMzE5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBleHQ0X2ZjXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmFzdF9jb21taXQuYz0xNTUzPXN0YXRpYyB2b2lkIGV4dDRfZmNfdXBkYXRlX3N0YXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzdGF0dXMsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTU4NS0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTU4NjppbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTg3LXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMDUwPXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfY3JlYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjEwNy0gKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjEwODppbnQgZXh0NF9mY19yZWNvcmRfcmVnaW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaW5vLFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMTA5LVxcdFxcdGV4dDRfbGJsa190IGxibGssIGV4dDRfZnNibGtfdCBwYmxrLCBpbnQgbGVuLCBpbnQgcmVwbGF5KVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2ODY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmY19pbmVsaWdpYmxlX3JlYXNvbnNbXSA9IHtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzAxLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNzAyOmludCBleHQ0X2ZjX2luZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjcwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjM1Ljk2Mzc0MTEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjAxMTY4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbmNlcm5pbmcgRmlsZSBDcmVhdGlvbiBhbmQgRXh0NCdzIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBleHQ0X2ZjX2NvbW1pdGAgZnVuY3Rpb24sIGFuZCBpdCdzIGZsYWdnZWQgYXMgKm5vdCogc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHNjb3BlIGFuZCBwb3RlbnRpYWwgZXh0ZXJuYWwgdXNlLiBXaGF0J3MgaXQgZG9pbmcgdGhhdCBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIG1vZHVsZT8gSXMgaXQgYmVpbmcgY2FsbGVkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIGNvZGU/IElzIGl0IHBhcnQgb2YgYSBsYXJnZXIsIG1vcmUgZ2VuZXJhbCBmcmFtZXdvcms/IFRoaXMgaXNuJ3QgaW5oZXJlbnRseSBhIHByb2JsZW0sIGJ1dCBpdCByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBkZXNpZ24gYW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyBkYXRhIHByb3RlY3Rpb24uXG5cblRoZW4sIG15IG1pbmQgZHJpZnRzIHRvIGBleHQ0X2ZjX2luaXRgLiBJcyAqdGhhdCogYWxzbyBub24tc3RhdGljPyBJZiBpdCBpcywgdGhlbiB0aGUgaW1wbGljYXRpb25zIG9mIGBleHQ0X2ZjX2NvbW1pdGAgYmVpbmcgbm9uLXN0YXRpYyBhcmUgZXZlbiBncmVhdGVyLiBJdCBwb2ludHMgdG93YXJkIG1vcmUgc29waGlzdGljYXRlZCBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzOyBpdCBtYXkgYmUgdGhhdCBib3RoIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLCBhbmQgbWlnaHQgc2hhcmUgZGF0YSB0byBpbml0aWFsaXplIGZpbGUgY3JlYXRpb24sIGFuZCBwcmVwYXJlIGZvciBjb21taXR0ZWQgY2hhbmdlcy4gSWYgc28sIHdoeSBpc24ndCB0aGUgc2NvcGUgY29udHJvbGxlZD8gSWYgaXQgaXMgc3RhdGljLCB0aGVuIGl0IGlzIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUuIElmIGl0J3Mgbm90LCBpdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIGRldGVybWluZSB3aHkgdGhvc2UgZGVzaWduIGRlY2lzaW9ucyB3ZXJlIG1hZGUuIFRoZXJlJ3MgcHJvYmFibHkgYSBnb29kIHJlYXNvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgY29ycmVjdCwgY29uc2lkZXJpbmcgdGhlIG92ZXJhbGwgZGVzaWduIG9mIEV4dDQgYW5kIGl0J3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0ODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNTozOS42MjM4NjIxNzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzY2MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGV4dDRfZmNfLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L2Zhc3RfY29tbWl0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIyND1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mY19yZXNldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjMyOnZvaWQgZXh0NF9mY19pbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzMy17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9Mjg3PXN0YXRpYyB2b2lkIGV4dDRfZmNfc25hcF9zdGF0c191cGRhdGVfbWF4KGF0b21pYzY0X3QgKnN0YXQsIHU2NCB2YWx1ZSlcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zMDMtICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjMwNDp2b2lkIGV4dDRfZmNfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTMwNS17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMzY3LSAqL1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzozNjg6dm9pZCBleHQ0X2ZjX21hcmtfaW5lbGlnaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVhc29uLCBoYW5kbGVfdCAqaGFuZGxlKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0zNjkte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTUxNj12b2lkIF9fZXh0NF9mY190cmFja191bmxpbmsoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01MjktXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjUzMDp2b2lkIGV4dDRfZmNfdHJhY2tfdW5saW5rKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNTMxLXtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz01Mzg9dm9pZCBfX2V4dDRfZmNfdHJhY2tfbGluayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1MS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTUyOnZvaWQgZXh0NF9mY190cmFja19saW5rKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU1My1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9NTU5PXZvaWQgX19leHQ0X2ZjX3RyYWNrX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU3Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTczOnZvaWQgZXh0NF9mY190cmFja19jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01NzQte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTU4Mj1zdGF0aWMgaW50IF9fdHJhY2tfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTU5Mi1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NTkzOnZvaWQgZXh0NF9mY190cmFja19pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy01OTQte1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTYyOT1zdGF0aWMgaW50IF9fdHJhY2tfcmFuZ2UoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYXJnLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTY1Ni1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NjU3OnZvaWQgZXh0NF9mY190cmFja19yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2xibGtfdCBzdGFydCxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtNjU4LVxcdFxcdFxcdCBleHQ0X2xibGtfdCBlbmQpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjM4Nz1ib29sIGV4dDRfZmNfcmVwbGF5X2NoZWNrX2V4Y2x1ZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZnNibGtfdCBibGspXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNC0vKiBDbGVhbnVwIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciByZXBsYXkgKi9cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjQwNTp2b2lkIGV4dDRfZmNfcmVwbGF5X2NsZWFudXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjQwNi17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjU4MT1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5KGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNjcyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNjczOnZvaWQgZXh0NF9mY19pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGpvdXJuYWxfdCAqam91cm5hbClcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjY3NC17XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9Mjc1Nj1pbnQgX19pbml0IGV4dDRfZmNfaW5pdF9kZW50cnlfY2FjaGUodm9pZClcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzcyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNzczOnZvaWQgZXh0NF9mY19kZXN0cm95X2RlbnRyeV9jYWNoZSh2b2lkKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNzc0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6MzkuNzAzMjMzNDc1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5Nzc2MjY5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEZhc3QgQ29tbWl0IFJlcGxheSBJc3N1ZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByb2JsZW0gd2l0aGluIGBleHQ0X2xvYWRfam91cm5hbGAsIHNwZWNpZmljYWxseSBpbiBgZnMvZXh0NC9zdXBlci5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmYXN0IGNvbW1pdCByZXBsYXkgZmFpbGluZyBiZWNhdXNlIG9mIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgZHVyaW5nIHRoZSBtb3VudCBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBleHQ0X2ZpbGxfc3VwZXJgIG9yIGBleHQ0X2dldF90cmVlYCB3aXRoIGZ1enppbmcuIFRob3NlIHNlZW0gbGlrZSBvYnZpb3VzIHRhcmdldHMgZ2l2ZW4gdGhlIGNvbnRleHQuIEhvd2V2ZXIsIHRob3NlIGFyZSBzdGF0aWMgYW5kIEkgY2FuJ3QgcmVhbGx5IGdldCBhdCB0aG9zZS4gSSBuZWVkIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQuIEkgY2FuIGhpdCBgZXh0NF9mY19pbml0YCwgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLCBhbmQgYGV4dDRfZmNfY29tbWl0YC5cblxuV2FpdCBhIG1pbnV0ZSwgdGhlIGlzc3VlIGlzIGhhcHBlbmluZyBkdXJpbmcgbW91bnQsIGFuZCBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIHBhcnQgb2YgdGhhdCBwcm9jZXNzLiBTbyBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gYGZzL2V4dDQvc3VwZXIuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgaW52b2x2ZWQgaW4gdGhlIG1vdW50IHNlcXVlbmNlLiBUaGlua2luZyBhYm91dCBob3cgdGhlIGZzIGNvbnRleHQgZ2V0cyBpbml0aWFsaXplZCBkdXJpbmcgdGhlIG1vdW50LCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzIHRoZSBvbmUuIExldCBtZSBnbyBiYWNrIGFuZCBjaGVjayB0aGUgY29kZSwgYW5kIGxvb2sgZm9yIGBleHQ0X2dldF90cmVlYCwganVzdCBpbiBjYXNlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjQ2LjY4MDg2MzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTY1MTg3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2dldF90cmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3N1cGVyLmM9OTE9c3RhdGljIGludCBleHQ0X3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pO1xcbmZzL2V4dDQvc3VwZXIuYzo5MjpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKTtcXG5mcy9leHQ0L3N1cGVyLmMtOTMtc3RhdGljIGludCBleHQ0X3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGV4dDRfY29udGV4dF9vcHMgPSB7XFxuZnMvZXh0NC9zdXBlci5jLTEyNi1cXHQucGFyc2VfcGFyYW1cXHQ9IGV4dDRfcGFyc2VfcGFyYW0sXFxuZnMvZXh0NC9zdXBlci5jOjEyNzpcXHQuZ2V0X3RyZWVcXHQ9IGV4dDRfZ2V0X3RyZWUsXFxuZnMvZXh0NC9zdXBlci5jLTEyOC1cXHQucmVjb25maWd1cmVcXHQ9IGV4dDRfcmVjb25maWd1cmUsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTgwOD1zdGF0aWMgaW50IGV4dDRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNTg1Ny1cXG5mcy9leHQ0L3N1cGVyLmM6NTg1ODpzdGF0aWMgaW50IGV4dDRfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2V4dDQvc3VwZXIuYy01ODU5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NDcuNDY2NTIwOTYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNzY3MDMxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBleHQ0IEZpbGVzeXN0ZW0gSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGV4dDRgIGNvZGUgYW5kIEkgc2VlIHRoYXQgYGV4dDRfZ2V0X3RyZWVgIGlzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0J3MgcHJvYmFibHkgb25seSB1c2VkIHdpdGhpbiB0aGUgYGV4dDRgIG1vZHVsZSBpdHNlbGYsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYXMgSSB0cmFjZSB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBhbmQgd2hhdCBkYXRhIGl0IHJlbGllcyB1cG9uLlxuXG5Ob3csIG15IG1pbmQgd2FuZGVycy4gSWYgYGV4dDRfZ2V0X3RyZWVgIGlzIHN0YXRpYywgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgZmlsZXN5c3RlbSBpbml0aWFsaXphdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlc3lzdGVtIHN0cnVjdHVyZXMgY29tZSBpbnRvIGJlaW5nLCBhbmQgd2hlcmUgYGV4dDRfZ2V0X3RyZWVgIGZpdHMgaW50byB0aGF0IGxhcmdlciBwaWN0dXJlLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCBgZXh0NF9pbml0X2ZzX2NvbnRleHRgPyBUaGF0IHNvdW5kcyBsaWtlIGEgbXVjaCBtb3JlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGJlaW5nIGEgY3J1Y2lhbCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhcnR1cC4gSXQgaXMsIGFmdGVyIGFsbCwgbmFtZWQgKmluaXQqIGFuZCAqZnNfY29udGV4dCogLSB0aGF0IGhhcyB0byBiZSB0aGUgcGxhY2UgSSBmb2N1cyBvbiBuZXh0LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0J3Mgd2hlcmUgdGhlICpyb290KiBvZiB0aGUgZmlsZXN5c3RlbSB0cmVlIGlzIHVsdGltYXRlbHkgY29uc3RydWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTM0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTEuNTQzMjI2NTM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzU3NzcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2luaXRfZnNfY29udGV4dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L3N1cGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9zdXBlci5jPTk0PXN0YXRpYyB2b2lkIGV4dDRfZmNfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmZzL2V4dDQvc3VwZXIuYzo5NTpzdGF0aWMgaW50IGV4dDRfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYyk7XFxuZnMvZXh0NC9zdXBlci5jLTk2LXN0YXRpYyB2b2lkIGV4dDRfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xMzQ9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDJfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0xMzYtXFx0Lm5hbWVcXHRcXHRcXHQ9IFxcXCJleHQyXFxcIixcXG5mcy9leHQ0L3N1cGVyLmM6MTM3OlxcdC5pbml0X2ZzX2NvbnRleHRcXHQ9IGV4dDRfaW5pdF9mc19jb250ZXh0LFxcbmZzL2V4dDQvc3VwZXIuYy0xMzgtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQzX2ZzX3R5cGUgPSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTUyLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZXh0M1xcXCIsXFxuZnMvZXh0NC9zdXBlci5jOjE1MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBleHQ0X2luaXRfZnNfY29udGV4dCxcXG5mcy9leHQ0L3N1cGVyLmMtMTU0LVxcdC5wYXJhbWV0ZXJzXFx0XFx0PSBleHQ0X3BhcmFtX3NwZWNzLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTIwMjg9c3RhdGljIHZvaWQgZXh0NF9mY19mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy0yMDQyLVxcbmZzL2V4dDQvc3VwZXIuYzoyMDQzOmludCBleHQ0X2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvZXh0NC9zdXBlci5jLTIwNDQte1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTc1MTk9c3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDRfZnNfdHlwZSA9IHtcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy03NTIxLVxcdC5uYW1lXFx0XFx0XFx0PSBcXFwiZXh0NFxcXCIsXFxuZnMvZXh0NC9zdXBlci5jOjc1MjI6XFx0LmluaXRfZnNfY29udGV4dFxcdD0gZXh0NF9pbml0X2ZzX2NvbnRleHQsXFxuZnMvZXh0NC9zdXBlci5jLTc1MjMtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGV4dDRfcGFyYW1fc3BlY3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjUxLjYzNjgwOTQ3NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk3OTQ1MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZXh0NCBNb3VudCBDb250ZXh0IGFuZCBGYXN0IENvbW1pdCBSZXBsYXkqKlxuXG5Pa2F5LCBzbyBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzbid0IHN0YXRpYywgbWVhbmluZyBpdCdzIHRoZSBnYXRld2F5IGZvciBoYW5kbGluZyBtb3VudCBvcHRpb25zLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQ6IHRoaXMgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IGFib3V0IHNwZWVkaW5nIHVwIGNvbW1pdCByZXBsYXkuIFRoaXMgbWFrZXMgbWUgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGpvdXJuYWwgaGFuZGxpbmcuIE15IG5leHQgdGhvdWdodCBpcyB0byBqdW1wIGludG8gYGZzL2piZDIvam91cm5hbC5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBqYmQyX2pvdXJuYWxfbG9hZGAgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgam91cm5hbCBpbnRlcmFjdHMgd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZHVyaW5nIGEgY29tbWl0IHJlcGxheS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODAwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTUuNDM0NzU3ODE4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjMxNTIxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiamJkMl9qb3VybmFsX2xvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9qb3VybmFsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamJkMi9qb3VybmFsLmM9NzU9RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKTtcXG5mcy9qYmQyL2pvdXJuYWwuYzo3NjpFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9sb2FkKTtcXG5mcy9qYmQyL2pvdXJuYWwuYy03Ny1FWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9kZXN0cm95KTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jPTIwNTA9RVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfdXBkYXRlX3NiX2Vycm5vKTtcXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTIwNTItLyoqXFxuZnMvamJkMi9qb3VybmFsLmM6MjA1MzogKiBqYmQyX2pvdXJuYWxfbG9hZCgpIC0gUmVhZCBqb3VybmFsIGZyb20gZGlzay5cXG5mcy9qYmQyL2pvdXJuYWwuYy0yMDU0LSAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGFjdCBvbi5cXG4tLVxcbmZzL2piZDIvam91cm5hbC5jLTIwNTktICovXFxuZnMvamJkMi9qb3VybmFsLmM6MjA2MDppbnQgamJkMl9qb3VybmFsX2xvYWQoam91cm5hbF90ICpqb3VybmFsKVxcbmZzL2piZDIvam91cm5hbC5jLTIwNjEte1xcbi0tXFxuZnMvamJkMi9qb3VybmFsLmM9MjQwOT1pbnQgamJkMl9qb3VybmFsX2ZsdXNoKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgaW50IGZsYWdzKVxcbi0tXFxuZnMvamJkMi9qb3VybmFsLmMtMjQ4NS0gKiBhIHdhcm5pbmcgaWYgdGhlIGpvdXJuYWwgY29udGFpbnMgYW55IHZhbGlkIHJlY292ZXJ5IGluZm9ybWF0aW9uLlxcbmZzL2piZDIvam91cm5hbC5jOjI0ODY6ICogTXVzdCBiZSBjYWxsZWQgYmV0d2VlbiBqb3VybmFsX2luaXRfKigpIGFuZCBqYmQyX2pvdXJuYWxfbG9hZCgpLlxcbmZzL2piZDIvam91cm5hbC5jLTI0ODctICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzU6NTUuOTk3OTE3NzIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDEwNTI3OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXh0NCBKb3VybmFsIExvYWRpbmcgRml4IGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBqYmQyX2pvdXJuYWxfbG9hZGAgaXMgZXhwb3J0ZWQsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJ1ZyB3aXRoaW4gZXh0NCdzIGpvdXJuYWwgbG9hZGluZywgc3BlY2lmaWNhbGx5IHdoZW4gZmFzdCBjb21taXQgcmVwbGF5IGdvZXMgc2lkZXdheXMgYmVjYXVzZSB0aGUgc3VwZXJibG9jayBpcywgdW5kZXJzdGFuZGFibHksIHJlYWQtb25seS4gVGhlIGZpeCBpbnZvbHZlcyBjb25kaXRpb25hbGx5IGNsZWFyaW5nIGBTQl9SRE9OTFlgIGZyb20gYHNiLVx1MDAzZXNfZmxhZ3NgIGlmIGBlbmFibGVfd3JpdGVgIGlzIHRydWUuIEhtbSwgdGhpcyBzb3VuZHMgbGlrZSBhIGNsYXNzaWMgc2NlbmFyaW8gcmlwZSBmb3IgZnV6emluZy4gSSBjYW4gc2VlIHBvdGVudGlhbCBlZGdlIGNhc2VzIGhlcmUgd2hlcmUgdGhpbmdzIG1pZ2h0IGdldCBzdWJ0bHkgY29uZnVzZWQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSdtIHRoaW5raW5nIHRoaXMgZGVzZXJ2ZXMgc29tZSBzZXJpb3VzIGF0dGVudGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIHJ1biB0aGlzIHRocm91Z2ggdGhlIGZ1enplci4gVGhlIG9ubHkgY29uZmlnIEkgdGhpbmsgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGlzIGBFWFQ0X0ZTYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2hvdWxkIGFsc28gdGFrZSBhIHBlZWsgYXQgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNvbmZpZyByZWxhdGVkIHRvIGZhc3QgY29tbWl0IHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDMxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM1OjU5Ljk5ODk3MzQ3N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY5NzAzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRkFTVF9DT01NSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEzMDgtXFxuZnMvZXh0NC9leHQ0Lmg6MTMwOTojZGVmaW5lIEVYVDRfTU9VTlQyX0pPVVJOQUxfRkFTVF9DT01NSVRcXHQweDAwMDAwMDEwIC8qIEpvdXJuYWwgZmFzdCBjb21taXQgKi9cXG5mcy9leHQ0L2V4dDQuaC0xMzEwLSNkZWZpbmUgRVhUNF9NT1VOVDJfREFYX05FVkVSXFx0XFx0MHgwMDAwMDAyMCAvKiBEbyBub3QgYWxsb3cgRGlyZWN0IEFjY2VzcyAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyMz1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjE2My0vKlxcbmZzL2V4dDQvZXh0NC5oOjIxNjQ6ICogVGhlIHJlYXNvbiB3aHkgXFxcIkZBU1RfQ09NTUlUXFxcIiBpcyBhIGNvbXBhdCBmZWF0dXJlIGlzIHRoYXQsIEZTIGJlY29tZXNcXG5mcy9leHQ0L2V4dDQuaC0yMTY1LSAqIGluY29tcGF0aWJsZSBvbmx5IGlmIGZhc3QgY29tbWl0IGJsb2NrcyBhcmUgcHJlc2VudCBpbiB0aGUgRlMuIFNpbmNlIHdlXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMTY5LSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIxNzA6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZBU1RfQ09NTUlUXFx0XFx0MHgwNDAwXFxuZnMvZXh0NC9leHQ0LmgtMjE3MS0jZGVmaW5lIEVYVDRfRkVBVFVSRV9DT01QQVRfU1RBQkxFX0lOT0RFU1xcdDB4MDgwMFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjI3NT1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHNwYXJzZV9zdXBlcjIsXFx0U1BBUlNFX1NVUEVSMilcXG5mcy9leHQ0L2V4dDQuaDoyMjc2OkVYVDRfRkVBVFVSRV9DT01QQVRfRlVOQ1MoZmFzdF9jb21taXQsXFx0XFx0RkFTVF9DT01NSVQpXFxuZnMvZXh0NC9leHQ0LmgtMjI3Ny1FWFQ0X0ZFQVRVUkVfQ09NUEFUX0ZVTkNTKHN0YWJsZV9pbm9kZXMsXFx0U1RBQkxFX0lOT0RFUylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yNDQ9c3RhdGljIGJvb2wgZXh0NF9mY19kaXNhYmxlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDUte1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyNDY6XFx0cmV0dXJuICghdGVzdF9vcHQyKHNiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSB8fFxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yNDctXFx0XFx0KEVYVDRfU0Ioc2IpLVxcdTAwM2VzX21vdW50X3N0YXRlIFxcdTAwMjYgRVhUNF9GQ19SRVBMQVkpKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz00MDk9c3RhdGljIGludCBleHQ0X2ZjX3RyYWNrX3RlbXBsYXRlKFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQzOS1cXHRcXHRcXHRcXHQoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDQwOlxcdFxcdFxcdFxcdCBzYmktXFx1MDAzZXNfam91cm5hbC1cXHUwMDNlal9mbGFncyBcXHUwMDI2IEpCRDJfRkFTVF9DT01NSVRfT05HT0lORykgP1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00NDEtXFx0XFx0XFx0XFx0XFx1MDAyNnNiaS1cXHUwMDNlc19mY19xW0ZDX1FfU1RBR0lOR10gOlxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTQ1ND1zdGF0aWMgaW50IF9fdHJhY2tfZGVudHJ5X3VwZGF0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTQ5MC1cXHRpZiAoc2JpLVxcdTAwM2VzX2pvdXJuYWwtXFx1MDAzZWpfZmxhZ3MgXFx1MDAyNiBKQkQyX0ZVTExfQ09NTUlUX09OR09JTkcgfHxcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6NDkxOlxcdFxcdHNiaS1cXHUwMDNlc19qb3VybmFsLVxcdTAwM2VqX2ZsYWdzIFxcdTAwMjYgSkJEMl9GQVNUX0NPTU1JVF9PTkdPSU5HKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy00OTItXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bm9kZS1cXHUwMDNlZmNkX2xpc3QsXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTU4Nj1pbnQgZXh0NF9mY19jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0aWRfdCBjb21taXRfdGlkKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE1OTUtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjE1OTY6XFx0aWYgKCF0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpKVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xNTk3LVxcdFxcdHJldHVybiBqYmQyX2NvbXBsZXRlX3RyYW5zYWN0aW9uKGpvdXJuYWwsIGNvbW1pdF90aWQpO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTI2NzM9dm9pZCBleHQ0X2ZjX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgam91cm5hbF90ICpqb3VybmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODAtXFx0am91cm5hbC1cXHUwMDNlal9mY19yZXBsYXlfY2FsbGJhY2sgPSBleHQ0X2ZjX3JlcGxheTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjY4MTpcXHRpZiAoIXRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTI2ODItXFx0XFx0cmV0dXJuO1xcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oLTItXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjM6I2lmbmRlZiBfX0ZBU1RfQ09NTUlUX0hfX1xcbmZzL2V4dDQvZmFzdF9jb21taXQuaDo0OiNkZWZpbmUgX19GQVNUX0NPTU1JVF9IX19cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmgtNS1cXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaD0xNjM9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YWcyc3RyKF9fdTE2IHRhZylcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuaC0xODgtXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5oOjE4OTojZW5kaWYgLyogX19GQVNUX0NPTU1JVF9IX18gKi9cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zNDUyPXN0YXRpYyBib29sIGV4dDRfaW5vZGVfZGF0YXN5bmNfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0zNDU5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5mcy9leHQ0L2lub2RlLmM6MzQ2MDpcXHRcXHRpZiAodGVzdF9vcHQyKGlub2RlLVxcdTAwM2VpX3NiLCBKT1VSTkFMX0ZBU1RfQ09NTUlUKSlcXG5mcy9leHQ0L2lub2RlLmMtMzQ2MS1cXHRcXHRcXHRyZXR1cm4gIWxpc3RfZW1wdHkoXFx1MDAyNkVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmNfbGlzdCk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtNDAwNy1cXHRcXHRcXHRleHQ0X2ZjX3RyYWNrX3VubGluayhoYW5kbGUsIG5ldy5kZW50cnkpO1xcbmZzL2V4dDQvbmFtZWkuYzo0MDA4OlxcdFxcdGlmICh0ZXN0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9uYW1laS5jLTQwMDktXFx0XFx0ICAgICEoRVhUNF9TQihzYiktXFx1MDAzZXNfbW91bnRfc3RhdGUgXFx1MDAyNiBFWFQ0X0ZDX1JFUExBWSkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz0xODc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW91bnRfb3B0cyB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtMTk0Ni0jaWZkZWYgQ09ORklHX0VYVDRfREVCVUdcXG5mcy9leHQ0L3N1cGVyLmM6MTk0NzpcXHR7T3B0X2ZjX2RlYnVnX2ZvcmNlLCBFWFQ0X01PVU5UMl9KT1VSTkFMX0ZBU1RfQ09NTUlULFxcbmZzL2V4dDQvc3VwZXIuYy0xOTQ4LVxcdCBNT1BUX1NFVCB8IE1PUFRfMiB8IE1PUFRfRVhUNF9PTkxZfSxcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz00Mzg4PXN0YXRpYyB2b2lkIGV4dDRfc2V0X2RlZl9vcHRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9leHQ0L3N1cGVyLmMtNDQwNy1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9mYXN0X2NvbW1pdChzYikpXFxuZnMvZXh0NC9zdXBlci5jOjQ0MDg6XFx0XFx0c2V0X29wdDIoc2IsIEpPVVJOQUxfRkFTVF9DT01NSVQpO1xcbmZzL2V4dDQvc3VwZXIuYy00NDA5LVxcdC8qIGRvbid0IGZvcmdldCB0byBlbmFibGUgam91cm5hbF9jc3VtIHdoZW4gbWV0YWRhdGFfY3N1bSBpcyBlbmFibGVkLiAqL1xcbi0tXFxuZnMvZXh0NC9zdXBlci5jPTQ5NTY9c3RhdGljIGludCBleHQ0X2xvYWRfYW5kX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTQ5NzktXFxuZnMvZXh0NC9zdXBlci5jOjQ5ODA6XFx0aWYgKHRlc3Rfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L3N1cGVyLmMtNDk4MS1cXHRcXHQhamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhFWFQ0X1NCKHNiKS1cXHUwMDNlc19qb3VybmFsLCAwLCAwLFxcbmZzL2V4dDQvc3VwZXIuYzo0OTgyOlxcdFxcdFxcdFxcdFxcdCAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0ZBU1RfQ09NTUlUKSkge1xcbmZzL2V4dDQvc3VwZXIuYy00OTgzLVxcdFxcdGV4dDRfbXNnKHNiLCBLRVJOX0VSUixcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYz01MDQwPXN0YXRpYyBpbnQgZXh0NF9jaGVja19qb3VybmFsX2RhdGFfbW9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvZXh0NC9zdXBlci5jLTUwNDctXFx0XFx0Y2xlYXJfb3B0KHNiLCBESU9SRUFEX05PTE9DSyk7XFxuZnMvZXh0NC9zdXBlci5jOjUwNDg6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTUwNDktXFx0XFx0aWYgKHRlc3Rfb3B0MihzYiwgRVhQTElDSVRfREVMQUxMT0MpKSB7XFxuLS1cXG5mcy9leHQ0L3N1cGVyLmM9NTMzOD1zdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbmZzL2V4dDQvc3VwZXIuYy01NTM2LVxcdFxcdGNsZWFyX29wdChzYiwgREFUQV9GTEFHUyk7XFxuZnMvZXh0NC9zdXBlci5jOjU1Mzc6XFx0XFx0Y2xlYXJfb3B0MihzYiwgSk9VUk5BTF9GQVNUX0NPTU1JVCk7XFxuZnMvZXh0NC9zdXBlci5jLTU1MzgtXFx0XFx0c2JpLVxcdTAwM2VzX2pvdXJuYWwgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjowMC4wNjU5NTAyNzZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU2MTI2MTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgRXh0NCBGYXN0IENvbW1pdCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBleHQ0IGZhc3QgY29tbWl0IHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24g4oCTIGl0J3MgZGVmaW5pdGVseSBgRVhUNF9GU2AuIFRoZXJlJ3Mgbm8gc2VwYXJhdGUgZmFzdCBjb21taXQgY29uZmlndXJhdGlvbiwgYXMgSSByZWNhbGwsIGl0J3MgaGFuZGxlZCB2aWEgbW91bnQgb3B0aW9ucyBvciBmZWF0dXJlIGZsYWdzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIGBleHQ0X2xvYWRfam91cm5hbGAgd2l0aGluIGBmcy9leHQ0L3N1cGVyLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGBleHQ0X2ZjX2luaXRgLCBgZXh0NF9mY19yZXBsYXlfY2xlYW51cGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGFuZCBgZXh0NF9mY19pbmZvX3Nob3dgIGFzIGtleSBzeW1ib2xzLiBIb3dldmVyLCBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgYnVnIGlzIHRyaWdnZXJlZCBkdXJpbmcgdGhlIG1vdW50IHByb2Nlc3Mgd2hlbiBgZXh0NF9sb2FkX2pvdXJuYWxgIGlzIGNhbGxlZC4gU28sIEkgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJIGFtIGxvb2tpbmcgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3N1cGVyLmNgIHdoaWNoIGFyZSBpbnZvbHZlZCBpbiBtb3VudC5cblxuTGV0J3Mgc2Vl4oCmIEkgc2VlIGBleHQ0X2luaXRfZnNfY29udGV4dGAgaXMgaW52b2x2ZWQgd2hlbiBzZXR0aW5nIHVwIHRoZSBmaWxlIHN5c3RlbSBjb250ZXh0LiBJIHNob3VsZCBjaGVjayBgZnMvZXh0NC9zdXBlci5jYCBmb3IgYGV4dDRfZ2V0X3RyZWVgLiBXYWl0LCBpcyBgamJkMl9qb3VybmFsX2xvYWRgIGNhbGxlZCBmcm9tIGBleHQ0X2xvYWRfam91cm5hbGA/IFllcywgSSBzZWUgaXQncyBleHBvcnRlZC4gVGhhdCBtYWtlcyBgamJkMl9qb3VybmFsX2xvYWRgIGEgdmVyeSBwcm9taXNpbmcgc3ltYm9sIHRvIGZvY3VzIG9uLiBBbmQsIGBleHQ0X2ZjX3JlcGxheWAgaXMgYSBjYWxsYmFjaywgYnV0IGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gc28gcHJvYmFibHkgbm90IGRpcmVjdGx5IHJlbGV2YW50LlxuXG5Pa2F5LCBsZXQncyBub3cgbG9vayBhdCBgamJkMl9qb3VybmFsX2xvYWRgIGluIGBmcy9qYmQyL2pvdXJuYWwuY2AuIEkgd2lsbCBhZGQgYGpiZDJfam91cm5hbF9sb2FkYCBhbmQgYGV4dDRfaW5pdF9mc19jb250ZXh0YC4gV2FpdCwgaGFuZyBvbi4uLiBgZXh0NF9pbml0X2ZzX2NvbnRleHRgIGlzIGp1c3QgYWxsb2NhdGluZyB0aGUgY29udGV4dCwgc28gbm90IHRoYXQgaW50ZXJlc3RpbmcgaW4gaXRzZWxmLlxuXG5XaGF0IGFib3V0IGBleHQ0X2ZjX2NvbW1pdGA/IFllcCwgdGhhdCdzIG5vbi1zdGF0aWMuIExldCdzIGxvb2sgYXQgYGZzL2V4dDQvZmFzdF9jb21taXQuY2AuIE5vdywgSSdsbCBhZGQgYGpiZDJfam91cm5hbF9sb2FkYCwgYGV4dDRfZmNfY29tbWl0YCwgYGV4dDRfZmNfaW5pdGAsIGFuZCBgZXh0NF9mY19yZXBsYXlfY2xlYW51cGAgdG8gdGhlIGxpc3QuIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXG5cbk15IHJlYXNvbmluZyBpcyB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBleHQ0J3Mgam91cm5hbCBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgd2hlbiByZXBsYXlpbmcgZmFzdCBjb21taXRzLiBDcnVjaWFsbHksIGl0IGludm9sdmVzIHRlbXBvcmFyaWx5IGNsZWFyaW5nIHRoZSBgU0JfUkRPTkxZYCBmbGFnIGR1cmluZyB0aGUgcmVwbGF5IHByb2Nlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUgZXh0NCBtb3VudCBhbmQgcmVjb3ZlcnkgcGF0aCwgYW5kIHRodXMgc2VlbXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBjb25maWd1cmF0aW9ucyBJJ20gZ29pbmcgdG8gZW5hYmxlIGFyZSBgRVhUNF9GU2AgYW5kIGBKQkQyYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0IGBKQkQyYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MDguNjI3MjE0NjQ2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMDgxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEpCRDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvamJkMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2piZDIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2piZDIvS2NvbmZpZzoyOmNvbmZpZyBKQkQyXFxuZnMvamJkMi9LY29uZmlnLTMtXFx0dHJpc3RhdGVcXG4tLVxcbmZzL2piZDIvS2NvbmZpZy0xOS1cXG5mcy9qYmQyL0tjb25maWc6MjA6Y29uZmlnIEpCRDJfREVCVUdcXG5mcy9qYmQyL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiSkJEMiAoZXh0NCkgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjA4Ljc0NjQyNjkzNVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM1MzUyNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipEZWx2aW5nIGludG8gRmlsZXN5c3RlbSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIGBKQkQyYC4gSXQncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBpdCdzIHVsdGltYXRlbHkgY2hvc2VuIGJ5IGBFWFQ0X0ZTYCwgd2hpY2ggaXMgdGhlIGZpbGVzeXN0ZW0gYXQgcGxheSBoZXJlLiBUaGF0IG1lYW5zIHRoZSByZWFsIGNvbnRyb2wgbGllcyB3aXRoIGhvdyBgRVhUNF9GU2AgaXMgZGVmaW5lZC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQ7IEknbGwgbmVlZCB0byBnbyB0byB0aGUgc291cmNlIOKAkyB0aGF0J2xsIGJlIGBmcy9leHQ0L0tjb25maWdgIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCByZWxhdGlvbnNoaXAgaXMgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIHRoZXJlLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMxOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjE2LjI4MTc4MjgxNFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA0NTkzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA1OjM2OjE2LjM2MjI0ODM0NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODUyNDkwNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVYVDQgUGF0Y2ggQW5hbHlzaXM6IE15IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCB0aGlzIHBhdGNoIG92ZXIsIGFuZCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGV4cG9zZSBhbnkgdnVsbmVyYWJpbGl0aWVzLiBXZSBkb24ndCBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBwb2ludC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUga2V5IHRha2Vhd2F5cyBhbmQgY29uZmlybSB0aGlzIGh5cG90aGVzaXMuIFRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBob3cgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIG9wZXJhdGVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBmYXN0IGNvbW1pdCByZXBsYXkgcHJvY2Vzcy4gSXQgdGVtcG9yYXJpbHkgZHJvcHMgdGhlIGBTQl9SRE9OTFlgIGZsYWcuIFRoaXMgc2NyZWFtcyBcInBvdGVudGlhbCBmb3IgZGF0YSBjb3JydXB0aW9uIG9yIHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzXCIgdG8gbWUuIEl04oCZcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBleHQ0IG1vdW50IGFuZCByZWNvdmVyeSBwcm9jZWR1cmVzLCB3aGljaCBtZWFucyBpdOKAmXMgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCBldmVuIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoYXQgY2hlY2tzIHRoZSBib3ggZm9yIGZ1enppbmcgZmVhc2liaWxpdHkuXG5cblRoZSBtYWluIGZ1bmN0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbiBhcmU6IGBqYmQyX2pvdXJuYWxfbG9hZGAsIGBleHQ0X2ZjX2NvbW1pdGAsIGBleHQ0X2ZjX2luaXRgLCBhbmQgYGV4dDRfZmNfcmVwbGF5X2NsZWFudXBgLiBUaGVzZSBhcmUgdGhlIGZvY2FsIHBvaW50cyBvZiB0aGUgcGF0Y2ggYW5kIHdoZXJlIEkgZXhwZWN0IGFueSBpc3N1ZXMgd291bGQgbWFuaWZlc3QuXG5cblNvLCBpbiBzdW1tYXJ5OiBJJ20gY29uZmlkZW50IHdlIGNhbiBwcm9jZWVkIHdpdGggZnV6emluZyB0aGlzIHVzaW5nIGBFWFQ0X0ZTYCBhcyB0aGUgb25seSBlbmFibGVkIGNvbmZpZy4gVGhlIHBhdGNoJ3Mgc2NvcGUsIHRoZSBmdW5jdGlvbnMgaXQgdGFyZ2V0cywgYW5kIGl0cyByZWFjaGFiaWxpdHkgbWFrZSBpdCBhIHdvcnRod2hpbGUgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1MSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MjEuMjE0NzQxOTg4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NzM1NTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiamJkMl9qb3VybmFsX2xvYWRcIixcbiAgICBcImV4dDRfZmNfY29tbWl0XCIsXG4gICAgXCJleHQ0X2ZjX2luaXRcIixcbiAgICBcImV4dDRfZmNfcmVwbGF5X2NsZWFudXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IG1vdW50L3JlY292ZXJ5IHBhdGggYW5kIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImpiZDJfam91cm5hbF9sb2FkXCIsXG4gICAgXCJleHQ0X2ZjX2NvbW1pdFwiLFxuICAgIFwiZXh0NF9mY19pbml0XCIsXG4gICAgXCJleHQ0X2ZjX3JlcGxheV9jbGVhbnVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgZXh0NCBtb3VudC9yZWNvdmVyeSBwYXRoIGFuZCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTM0ODQwNjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTMzMjkyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTQxMDU4MDdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODk5MjcwMzc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyBwdXJlbHkgYSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBzdGF0ZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQyOTRiMWJjYzg4ZTRlNDNlNWUzZWRkMDcwYWM3MzA0MTMxOTdiN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAwNTozNTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMy4uNmMyYjI3NWE5Y2YzMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuKysrIGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtNjA5Niw2ICs2MDk2LDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0aW50IGVyciA9IDA7XG4gXHRpbnQgcmVhbGx5X3JlYWRfb25seTtcbiBcdGludCBqb3VybmFsX2Rldl9ybztcbitcdGJvb2wgZW5hYmxlX3dyaXRlID0gZmFsc2U7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWwoc2IpKSlcbiBcdFx0cmV0dXJuIC1FRlNDT1JSVVBURUQ7XG5AQCAtNjE1Miw2ICs2MTUzLDcgQEAgc3RhdGljIGludCBleHQ0X2xvYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIFx0XHRcdH1cbiBcdFx0XHRleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCBcIndyaXRlIGFjY2VzcyB3aWxsIFwiXG4gXHRcdFx0ICAgICAgIFwiYmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcIik7XG4rXHRcdFx0ZW5hYmxlX3dyaXRlID0gdHJ1ZTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTYxNjgsNyArNjE3MCwxOSBAQCBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4gXHRcdGlmIChzYXZlKVxuIFx0XHRcdG1lbWNweShzYXZlLCAoKGNoYXIgKikgZXMpICtcbiBcdFx0XHQgICAgICAgRVhUNF9TX0VSUl9TVEFSVCwgRVhUNF9TX0VSUl9MRU4pO1xuK1x0XHQvKlxuK1x0XHQgKiBGYXN0IGNvbW1pdCByZXBsYXkgcGVyZm9ybXMgcmVndWxhciBleHQ0IG1ldGFkYXRhIHVwZGF0ZXNcbitcdFx0ICogKHNlZSBleHQ0X2ZjX3JlcGxheSgpKSB3aGljaCByZWZ1c2UgdG8gcnVuIG9uIGEgcmVhZC1vbmx5XG4rXHRcdCAqIHN1cGVyYmxvY2suICBXZSBwcm9taXNlZCB3cml0ZSBhY2Nlc3MgYWJvdmUsIHNvIG1ha2UgdGhhdFxuK1x0XHQgKiB0cnVlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlY292ZXJ5LCB0aGUgc2FtZSB3YXlcbitcdFx0ICogZXh0NF9vcnBoYW5fY2xlYW51cCgpIGRvZXMuICBUaGUgc3VwZXJibG9jayBpcyBub3QgcHVibGlzaGVkXG4rXHRcdCAqIHlldCwgc28gbm90aGluZyBjYW4gb2JzZXJ2ZSB0aGUgdHJhbnNpZW50IHN0YXRlLlxuK1x0XHQgKi9cbitcdFx0aWYgKGVuYWJsZV93cml0ZSlcbitcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNj0gflNCX1JET05MWTtcbiBcdFx0ZXJyID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7XG4rXHRcdGlmIChlbmFibGVfd3JpdGUpXG4rXHRcdFx0c2ItXHUwMDNlc19mbGFncyB8PSBTQl9SRE9OTFk7XG4gXHRcdGlmIChzYXZlIFx1MDAyNlx1MDAyNiBtZW1jbXAoKChjaGFyICopIGVzKSArIEVYVDRfU19FUlJfU1RBUlQsXG4gXHRcdFx0XHQgICBzYXZlLCBFWFQ0X1NfRVJSX0xFTikpIHtcbiBcdFx0XHRtZW1jcHkoKChjaGFyICopIGVzKSArIEVYVDRfU19FUlJfU1RBUlQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNTozNjoyMS4zNTQxMDY5NTdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk5MjY4NDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWQtT25seSBTdXBlcmJsb2NrIEZhc3QgQ29tbWl0IFJlcGxheSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGV4dDRfbG9hZF9qb3VybmFsYC4gVGhlIGNvcmUgaXNzdWUgaXQncyBhZGRyZXNzaW5nIGlzIHRoYXQgZmFzdCBjb21taXQgcmVwbGF5IGNhbiBmYWlsIG9uIGEgcmVhZC1vbmx5IHN1cGVyYmxvY2sgYmVjYXVzZSBpdCB0cmllcyB0byBwZXJmb3JtIG1ldGFkYXRhIHVwZGF0ZXMsIHdoaWNoIGFyZSBuYXR1cmFsbHkgYmxvY2tlZCBpbiB0aGF0IG1vZGUuIFRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBib29sZWFuLCBgZW5hYmxlX3dyaXRlYCwgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gVGhlIGtleSBsb2dpYyBpcyBjb25kaXRpb25hbC4gSWYgdGhlIHN1cGVyYmxvY2sgaXMgcmVhZC1vbmx5IGJ1dCByZWNvdmVyeSBpcyBuZWVkZWQsIGBlbmFibGVfd3JpdGVgIGdldHMgZmxpcHBlZCB0byBgdHJ1ZWAuIENydWNpYWxseSwgYmVmb3JlIGNhbGxpbmcgYGpiZDJfam91cm5hbF9sb2FkYCwgaXQgKnRlbXBvcmFyaWx5KiBjbGVhcnMgdGhlIGBTQl9SRE9OTFlgIGZsYWcgZnJvbSBgc2ItXHUwMDNlc19mbGFnc2AgaWYgYGVuYWJsZV93cml0ZWAgaXMgdHJ1ZS4gVGhlbiwgYWZ0ZXIgdGhlIGpvdXJuYWwgbG9hZCwgaXQgKnJlLXNldHMqIGBTQl9SRE9OTFlgIGlmIHRoZSBmbGFnIHdhcyBtb2RpZmllZC5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2U/IE5vdCBhdCBhbGwuIEl0J3Mgc29sZWx5IG1hbmlwdWxhdGluZyBhIGZsYWcgd2l0aGluIHRoZSBzdXBlcmJsb2NrIHN0cnVjdHVyZSAoYHNiLVx1MDAzZXNfZmxhZ3NgKS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIGBlbmFibGVfd3JpdGVgIGlzIGluaXRpYWxpemVkIGV4cGxpY2l0bHkuIFRoZSBjb2RlIGlzIG9ubHkgYWx0ZXJpbmcgYSBmbGFnLiBJIGRvbid0IHNlZSBhbnkgcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBoZXJlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGFjdHVhbCBjb2RlIHNuaXBwZXQ6XG5cbmBgYGNcblx0Ym9vbCBlbmFibGVfd3JpdGUgPSBmYWxzZTtcbi4uLlxuXHRcdFx0ZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgXCJ3cml0ZSBhY2Nlc3Mgd2lsbCBcIlxuXHRcdFx0ICAgICAgIFwiYmUgZW5hYmxlZCBkdXJpbmcgcmVjb3ZlcnlcIik7XG4rXHRcdFx0ZW5hYmxlX3dyaXRlID0gdHJ1ZTtcbi4uLlxuK1x0XHRpZiAoZW5hYmxlX3dyaXRlKVxuK1x0XHRcdHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2PSB+U0JfUkRPTkxZO1xuIFx0XHRlcnIgPSBqYmQyX2pvdXJuYWxfbG9hZChqb3VybmFsKTtcbitcdFx0aWYgKGVuYWJsZV93cml0ZSlcbitcdFx0XHRzYi1cdTAwM2VzX2ZsYWdzIHw9IFNCX1JET05MWTtcbmBgYFxuXG5JdCdzIHB1cmUgY29udHJvbCBmbG93IGFuZCBzdGF0ZSBtYW5hZ2VtZW50LiBUaGUgY29kZSBjbGVhbmx5IGhhbmRsZXMgYSBmbGFnIG1vZGlmaWNhdGlvbiwgdGVtcG9yYXJpbHkgZGlzYWJsaW5nIGEgd3JpdGUtcHJvdGVjdGlvbi4gTm8gZHluYW1pYyBtZW1vcnkgbWFuYWdlbWVudCBvciB1bmluaXRpYWxpemVkIGRhdGEgaXMgaW4gdGhlIG1peC4gQ29uc2VxdWVudGx5LCBJIGRvbid0IHRoaW5rIHdlIG5lZWQgdG8gdGVzdCB0aGlzIHBhdGNoIHdpdGggS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50LiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOOiBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTUsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDU6MzY6MzAuMzQ2Nzk0MjUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBqb3VybmFsIGxvYWRpbmcgbG9naWMgdG8gdGVtcG9yYXJpbHkgY2xlYXIgdGhlIFNCX1JET05MWSBmbGFnIGR1cmluZyBmYXN0IGNvbW1pdCByZXBsYXkgaWYgdGhlIGZpbGVzeXN0ZW0gd2FzIG1vdW50ZWQgcmVhZC1vbmx5LiBUaGlzIGlzIHB1cmVseSBhIHN0YXRlIG1hbmFnZW1lbnQgYW5kIGNvbnRyb2wgZmxvdyBjaGFuZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIHJhY2UgY29uZGl0aW9ucyBvciBpbnZhbGlkIHN0YXRlKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIG9yIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgam91cm5hbCBsb2FkaW5nIGxvZ2ljIHRvIHRlbXBvcmFyaWx5IGNsZWFyIHRoZSBTQl9SRE9OTFkgZmxhZyBkdXJpbmcgZmFzdCBjb21taXQgcmVwbGF5IGlmIHRoZSBmaWxlc3lzdGVtIHdhcyBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyBwdXJlbHkgYSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCBjb250cm9sIGZsb3cgY2hhbmdlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCByYWNlIGNvbmRpdGlvbnMgb3IgaW52YWxpZCBzdGF0ZSkgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBvciBMT0NLREVQLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[1] Phase: Succeeded StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 05:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 05:36:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2] Phase: Succeeded StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 05:36:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 05:36:41 +0000 UTC FinishedAt: 2026-08-12 05:36:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7w2hw/series-workflow7w2hw-convert-artifact-1812729141/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 05:36:51 +0000 UTC FinishedAt: 2026-08-12 05:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 05:36:51 +0000 UTC FinishedAt: 2026-08-12 05:57:01 +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:*c16ceb9f-8ac3-421e-a9c1-11031d9a5acd,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-workflow7w2hw/series-workflow7w2hw-convert-artifact-1812729141/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": "4dab3c71-e620-40f4-9af6-54e91a5445c9", "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-workflow7w2hw/series-workflow7w2hw-build-action-3245984027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 05:36:51 +0000 UTC FinishedAt: 2026-08-12 05:56:51 +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:*c16ceb9f-8ac3-421e-a9c1-11031d9a5acd,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-workflow7w2hw/series-workflow7w2hw-convert-artifact-1812729141/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": "4dab3c71-e620-40f4-9af6-54e91a5445c9", "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-workflow7w2hw/series-workflow7w2hw-build-action-3245984027/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 05:57:01 +0000 UTC FinishedAt: 2026-08-12 05:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 05:57:01 +0000 UTC FinishedAt: 2026-08-12 05:57:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 05:57:01 +0000 UTC FinishedAt: 2026-08-12 05:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 05:57:01 +0000 UTC FinishedAt: 2026-08-12 05:57:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7w2hw/series-workflow7w2hw-convert-artifact-3591124112/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 05:57:12 +0000 UTC FinishedAt: 2026-08-12 05:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 05:57:12 +0000 UTC FinishedAt: 2026-08-12 05:59:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dab3c71-e620-40f4-9af6-54e91a5445c9,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-workflow7w2hw/series-workflow7w2hw-build-action-3245984027/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-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 05:59:39 +0000 UTC FinishedAt: 2026-08-12 05:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 05:59:39 +0000 UTC FinishedAt: 2026-08-12 05:59:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 05:59:39 +0000 UTC FinishedAt: 2026-08-12 06:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 05:59:39 +0000 UTC FinishedAt: 2026-08-12 06:20:11 +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:*c16ceb9f-8ac3-421e-a9c1-11031d9a5acd,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-workflow7w2hw/series-workflow7w2hw-convert-artifact-3591124112/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": "bd32695e-7e70-46cd-86a0-da2652b2c151", "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-workflow7w2hw/series-workflow7w2hw-build-action-3901894924/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 05:59:39 +0000 UTC FinishedAt: 2026-08-12 06:20:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c16ceb9f-8ac3-421e-a9c1-11031d9a5acd,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-workflow7w2hw/series-workflow7w2hw-convert-artifact-3591124112/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": "bd32695e-7e70-46cd-86a0-da2652b2c151", "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-workflow7w2hw/series-workflow7w2hw-build-action-3901894924/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 06:20:11 +0000 UTC FinishedAt: 2026-08-12 06:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 06:20:11 +0000 UTC FinishedAt: 2026-08-12 06:20:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 06:20:11 +0000 UTC FinishedAt: 2026-08-12 06:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 06:20:11 +0000 UTC FinishedAt: 2026-08-12 06:22:05 +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:*bd32695e-7e70-46cd-86a0-da2652b2c151,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-workflow7w2hw/series-workflow7w2hw-build-action-3901894924/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-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +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":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"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:*4dab3c71-e620-40f4-9af6-54e91a5445c9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd32695e-7e70-46cd-86a0-da2652b2c151,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-workflow7w2hw/series-workflow7w2hw-build-action-3245984027/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-workflow7w2hw/series-workflow7w2hw-build-action-3901894924/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 06:22:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 06:22:21 +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":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"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-workflow7w2hw/series-workflow7w2hw-convert-artifact-758561417/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 06:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 06:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:22:15 +0000 UTC FinishedAt: 2026-08-12 06:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 06:22:25 +0000 UTC FinishedAt: 2026-08-12 09:25:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7w2hw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["jbd2_journal_load","ext4_fc_commit","ext4_fc_init","ext4_fc_replay_cleanup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5bbbfec59b4e2fb7520a91de3df8a6174325d6a","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"2c628e67-627e-4614-85c7-763dcf4905ca","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 06:22:25 +0000 UTC FinishedAt: 2026-08-12 09:25:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dab3c71-e620-40f4-9af6-54e91a5445c9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bd32695e-7e70-46cd-86a0-da2652b2c151,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-workflow7w2hw/series-workflow7w2hw-build-action-3245984027/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-workflow7w2hw/series-workflow7w2hw-build-action-3901894924/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-workflow7w2hw/series-workflow7w2hw-convert-artifact-758561417/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,}