Name: series-workflow47vcz Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[0] Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:12:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "series_id": "879df8d7-8aa9-4e49-a747-3d940ed52963" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__percpu_down_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcbmluZGV4IGY3ZTE1MmM0MGQ2ZDAuLjU3ZTI0ZmRjMDIwMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcbkBAIC0xNTcsOCAmIzQzOzE1Nyw3IEBAIHN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlbS1cdTAwM2V3YWl0ZXJzLmxvY2spO1xuIFxuIFx0d2hpbGUgKHdhaXQpIHtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfFxuLVx0XHRcdFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwppbmRleCBmN2UxNTJjNDBkNmQwLi41N2UyNGZkYzAyMDM2IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwpAQCAtMTU3LDggJiM0MzsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlciwKIAlzcGluX3VubG9ja19pcnEoJmFtcDtzZW0tJmd0O3dhaXRlcnMubG9jayk7CiAKIAl3aGlsZSAod2FpdCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlpZiAoIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDt3cV9lbnRyeS5wcml2YXRlKSkKIAkJCWJyZWFrOwogCQlzY2hlZHVsZSgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBMb2NraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYSBzdGF0ZSB0cmFuc2l0aW9uIGluIGBwZXJjcHVfcndzZW1fd2FpdGAuICBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBJbnN0ZWFkIG9mIHVzaW5nIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCByZWdhcmRsZXNzIG9mIHRoZSBgZnJlZXplYCBmbGFnLCBpdCYjMzk7cyBub3cgY29uZGl0aW9uYWwuICBXaGVuIGBmcmVlemVgIGlzIHRydWUsIHRoZSBzdGF0ZSBiZWNvbWVzIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAsIG90aGVyd2lzZSBpdCByZW1haW5zIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAuCgpSaWdodCwgc28gZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCBsb2NraW5nIG1lY2hhbmlzbSBpdHNlbGYgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3VwZXJmaWNpYWwgdHdlYWs7IGl0IGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIGBwZXJjcHVfcndzZW1fd2FpdGAuICBUaGlzIHN0YXRlIHRyYW5zaXRpb24sIHBhcnRpY3VsYXJseSB0aGUgc2hpZnQgdG8gYFRBU0tfSURMRWAgdW5kZXIgZnJlZXppbmcgY29uZGl0aW9ucywgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLgoKR2l2ZW4gaXRzIGltcGFjdCBvbiBhIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnQsIGBwZXJjcHVfcndzZW1fd2FpdGAsIEkga25vdyB0aGlzIGRlZmluaXRlbHkgbmVlZHMgYSBnb29kIGZ1enppbmcgcnVuLiAgV2UgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2UgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgdmFyaW91cyBzdHJlc3MgY29uZGl0aW9ucy4gSXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBwZXJjcHVfcndzZW1fd2FpdGAgZnVuY3Rpb24gaXRzZWxmIG5vdyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1X3J3c2VtX3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTQwLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTQxOnN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTQyLVx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTE2OD1ib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3OC1cdHByZWVtcHRfZW5hYmxlKCk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxNzk6XHRwZXJjcHVfcndzZW1fd2FpdChzZW0sIC8qIC5yZWFkZXIgPSAqLyB0cnVlLCBmcmVlemUpO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTgwLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjI2PXZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0MS1cdFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI0MjpcdFx0cGVyY3B1X3J3c2VtX3dhaXQoc2VtLCAvKiAucmVhZGVyID0gKi8gZmFsc2UsIGZhbHNlKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0My1cdFx0Y29udGVuZGVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUzCgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHBlcmNwdV9yd3NlbV93YWl0YCBGdW5jdGlvbiBhbmQgaXRzIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYHBlcmNwdV9yd3NlbV93YWl0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvdXRzaWRlIGl0cyBkZWZpbmVkIHNjb3BlLiBOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzICp3aG8qIGNhbGxzIGl0LiBUaGUgdGV4dCBtZW50aW9ucyBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGBwZXJjcHVfZG93bl93cml0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRob3NlIG5hbWVzIGFsb25lIHN1Z2dlc3Qgd2UgYXJlIGRlYWxpbmcgd2l0aCBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIG9wZXJhdGlvbnMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRvIHRydWx5IGdyYXNwIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgX19wZXJjcHVfZG93bl9yZWFkYCBhbmQgYHBlcmNwdV9kb3duX3dyaXRlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgaW52b2tlZCBieSBoaWdoZXItbGV2ZWwgY29kZS4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSAqZG9pbmcqIGFuZCBob3cgdGhleSYjMzk7cmUgKnVzaW5nKiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGF0JiMzOTtsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGVyY3B1X2Rvd25fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9mcmVlX3J3c2VtKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ3LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6NDg6c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ5LXtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTk3LVx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjk4Olx0XHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtOTktXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MTQxPXN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE2Ny1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjE2ODpib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTY5LVx0XHRcdFx0Ym9vbCBmcmVlemUpXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNzAte1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTcxOlx0aWYgKF9fcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHNlbSkpXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNzItXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4NC19XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxODU6RVhQT1JUX1NZTUJPTF9HUEwoX19wZXJjcHVfZG93bl9yZWFkKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ4PXN0YXRpYyBib29sIF9fcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtODMtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo4NDpzdGF0aWMgaW5saW5lIGJvb2wgX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9OTI9c3RhdGljIGJvb2wgX19wZXJjcHVfcndzZW1fdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcilcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMDItXHR9XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XHRyZXR1cm4gX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMDQtfVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTExOT1zdGF0aWMgaW50IHBlcmNwdV9yd3NlbV93YWtlX2Z1bmN0aW9uKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSxcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMjc6XHQvKiBjb25jdXJyZW50IGFnYWluc3QgcGVyY3B1X2Rvd25fd3JpdGUoKSwgY2FuIGdldCBzdG9sZW4gKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cdGlmICghX19wZXJjcHVfcndzZW1fdHJ5bG9jayhzZW0sIHJlYWRlcikpXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjI1LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjI3LXtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXHQgKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI0MDpcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0MS1cdFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDUtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XHQvKiBzbXBfbWIoKSBpbXBsaWVkIGJ5IF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jaygpIG9uIHN1Y2Nlc3MgLS0gRCBtYXRjaGVzIEEgKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0Ny1cbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNTgtfVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9kb3duX3dyaXRlKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBJbXBsZW1lbnRhdGlvbioqCgpNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgd2UmIzM5O3ZlIGdvdCB0d28gZXhwb3J0ZWQgZnVuY3Rpb25zIGhlcmU6IGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBSaWdodCBhd2F5LCBteSBicmFpbiBnb2VzIHRvICYjMzQ7d2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBiZWluZyAqZXhwb3J0ZWQqPyYjMzQ7IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVpciBiZWhhdmlvciBvciBldmVuIHRoZWlyIGF2YWlsYWJpbGl0eT8KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZmlsZSYjMzk7cyBjb250ZW50cyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSwgb3IgaWYgaXRzIGluY2x1c2lvbiBpcyBjb250aW5nZW50IG9uIHRoZSBzZXR0aW5nIG9mIG9uZSBvciBtb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHRoZXJlIGFyZSBjb25maWdzIGluIHBsYWNlLCB3aGF0IGFyZSB0aGV5PyBUaGF0IHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnRhYmlsaXR5IGFuZCBjb25kaXRpb25hbCB1c2Ugb2YgdGhlc2UgcGVyLUNQVSByZWFkLXdyaXRlIHNlbWFwaG9yZSBwcmltaXRpdmVzLiBUaGlzIGZpbGUgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21waWxlLXRpbWUgY29uZGl0aW9ucyBpcyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdS1yd3NlbS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2xvY2tpbmcvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9OT1DT05URVhUX0FOQUxZU0lTX3J3c2VtLm8gOj0geVxua2VybmVsL2xvY2tpbmcvTWFrZWZpbGUtMTAtXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZToxMTpvYmoteSAmIzQzOz0gbXV0ZXgubyBzZW1hcGhvcmUubyByd3NlbS5vIHBlcmNwdS1yd3NlbS5vXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZS0xMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBlci1DUFUgUmVhZC9Xcml0ZSBTZW1hcGhvcmUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIGJlaW5nIGNvbXBpbGVkIGluIHVuY29uZGl0aW9uYWxseSDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgKGBvYmoteSAmIzQzOz0gcGVyY3B1LXJ3c2VtLm9gKS4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgc28gaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIGJ1aWxkLiBUaGVuIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYHBlcmNwdV9yd3NlbV93YWl0YC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB1c2VkIGJ5IGJvdGggYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGBwZXJjcHVfZG93bl93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZSwgYXMgaXQgaW1wYWN0cyB0aGUgY29yZSByZWFkL3dyaXRlIHNlbWFwaG9yZSBmdW5jdGlvbmFsaXR5IGZvciBwZXItQ1BVIHZhcmlhYmxlcy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYFRBU0tfSURMRWAgdmVyc3VzIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAgd2hlbiBgZnJlZXplYCBpcyBzZXQgdG8gdHJ1ZS4gTXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYg4oCTIGBmcmVlemVgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIG9yIG1heWJlIHNvbWUgY3JpdGljYWwgcGF0aCBkdXJpbmcgYSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyBzY2VuYXJpby4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIHdoZW4gYGZyZWV6ZWAgaXMgYWN0dWFsbHkgdHJ1ZS4gSXQgYXBwZWFycyB0aGF0IGBmcmVlemVgIGdldHMgaXRzIHZhbHVlIGluIGEgY2FsbCB0byBgX19wZXJjcHVfZG93bl9yZWFkYCAodGhlIGRpcmVjdCBjYWxsKSwgb3IgYHBlcmNwdV9kb3duX3JlYWRgIChhIGNhbGwgdGhhdCBpbmRpcmVjdGx5IGNhbGxzIGBfX3BlcmNwdV9kb3duX3JlYWRgLikKClRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgYF9fcGVyY3B1X2Rvd25fcmVhZGAgd2l0aCBgZnJlZXplPXRydWVgIG9yIGBwZXJjcHVfZG93bl9yZWFkYCB3aXRoIGBmcmVlemU9dHJ1ZWAuIFRyYWNpbmcgdGhvc2UgY2FsbHMgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgVEFTS19JRExFYCBhbmQgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLCBiZWNhdXNlIHRoYXQgY2FsbCBjaGFpbiAqaXMqIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQuKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05Ni1cdGVsc2VcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XHRcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cdHByZWVtcHRfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBQZXItQ1BVIFJlYWRlci9Xcml0ZXIgU2VtYXBob3JlcyoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGl0JiMzOTtzIHRha2luZyBgYm9vbCB0cnksIGJvb2wgZnJlZXplYCBhcyBhcmd1bWVudHMuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBmbGFncyBhcmUgZm9yLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGRlZmluaXRpb24gb2YgYHBlcmNwdV9kb3duX3JlYWRgLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmhgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGhvdyB0aGVzZSBwZXItQ1BVIHJlYWRlci93cml0ZXIgc2VtYXBob3JlcyB3b3JrLCBhbmQgdGhvc2UgcGFyYW1ldGVycyBhcmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTMyPWlzX3N0YXRpYyBzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSBuYW1lID0ge1x0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ1LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0NjpleHRlcm4gYm9vbCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKiwgYm9vbCwgYm9vbCk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ3LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0ODpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00OS1cdFx0XHRcdFx0ICAgICBib29sIGZyZWV6YWJsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTY2LVx0ZWxzZVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo2NzpcdFx0X19wZXJjcHVfZG93bl9yZWFkKHNlbSwgZmFsc2UsIGZyZWV6YWJsZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNjgtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzQtXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc1OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc2LXtcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Nzc6XHRwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZmFsc2UpO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OC19XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZyZWV6ZSk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODUtXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjg2OnN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODcte1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTEtXHQvKlxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo5MjpcdCAqIFNhbWUgYXMgaW4gcGVyY3B1X2Rvd25fcmVhZCgpLlxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05My1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXHRlbHNlXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjk3Olx0XHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWQoc2VtLCB0cnVlLCBmYWxzZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTgtXHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfdXBfcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTE3LVx0LypcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTE4Olx0ICogU2FtZSBhcyBpbiBwZXJjcHVfZG93bl9yZWFkKCkuXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTExOS1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTMyPURFRklORV9HVUFSRChwZXJjcHVfcmVhZCwgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKixcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTMzOlx0ICAgICBwZXJjcHVfZG93bl9yZWFkKF9UKSwgcGVyY3B1X3VwX3JlYWQoX1QpKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMzQ6REVGSU5FX0dVQVJEX0NPTkQocGVyY3B1X3JlYWQsIF90cnksIHBlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhfVCkpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgY29kZSBwYXRoLiBJIHNlZSB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVhZC1zaWRlIGxvY2tpbmcgbWVjaGFuaXNtIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZnJlZXplLWF3YXJlLCBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIHBlci1DUFUgZGF0YS4mIzM0OyBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlOyBJIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4KCk5vdywgd2hlcmUgZG9lcyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGFjdHVhbGx5ICpnbyo/IEFoYSwgaXQgY2FsbHMgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSB3b3JrLiBTbywgdGhpcyB3cmFwcGVyIGxpa2VseSBoYW5kbGVzIHNvbWUgcHJlLSBvciBwb3N0LXByb2Nlc3NpbmcgZm9yIGZyZWV6ZSBoYW5kbGluZy4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmU6IHdobyBhY3R1YWxseSAqdXNlcyogYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aHkgdGhpcyBjb2RlIGV4aXN0cyBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mcy9zdXBlci5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NiX3N0YXJ0X3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBsZXZlbClcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaC0xOC17XG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmg6MTk6XHRwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzYi1cdTAwM2VzX3dyaXRlcnMucndfc2VtICYjNDM7IGxldmVsIC0gMSwgdHJ1ZSk7XG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMjAtfVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGUyBXcml0ZSBQcm90ZWN0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0byBgX19zYl9zdGFydF93cml0ZWAuIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGluZyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLCBhbmQgdGhhdCYjMzk7cyAqdGhlKiBjb3JlIG9mIHRoZSBWRlMmIzM5O3Mgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc20sIGlzbiYjMzk7dCBpdD8gYHNiX3N0YXJ0X3dyaXRlYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYWxsIHJlbHkgb24gdGhpcy4gU28sIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwaWVjZSB3aXRoaW4gdGhlIFZGUy4KClRoZSBtZWF0IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLCBlc3BlY2lhbGx5IHNpbmNlIGBUQVNLX0lETEVgIGltcGFjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9ucyBhbmQgd2hvIGtub3dzIHdoYXQgb3RoZXIgdGFzayBzdGF0ZS1kZXBlbmRlbnQgY29kZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGlzc3Vlcywgc28gSSB0aGluayBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgY2hhbmdlcy4KCkxldCYjMzk7cyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBwZXJjcHVfZG93bl93cml0ZWAsIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIGNoYW5nZSBsaWtlbHkgaGFzIHNvbWUgaW1wYWN0IG9uIGl0cyB1c2FnZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2xvY2tpbmcvcGVyY3B1LXJ3LXNlbWFwaG9yZS5yc3Q9MjM9VGhlIGxvY2sgaXMgbG9ja2VkIGZvciByZWFkIHdpdGggcGVyY3B1X2Rvd25fcmVhZCwgcGVyY3B1X3VwX3JlYWQgYW5kXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvcGVyY3B1LXJ3LXNlbWFwaG9yZS5yc3Q6MjQ6Zm9yIHdyaXRlIHdpdGggcGVyY3B1X2Rvd25fd3JpdGUsIHBlcmNwdV91cF93cml0ZS5cbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdC0yNS1cbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz0xODU9dm9pZCBoY2lfdWFydF9pbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTE5Ny1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjE5ODpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy0xOTktXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXHUwMDI2aHUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTU0OD1zdGF0aWMgdm9pZCBoY2lfdWFydF90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjYtXHRpZiAocHJvdG9fcmVhZHkpIHtcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjU2NzpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjgtXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXHUwMDI2aHUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTY3MD1zdGF0aWMgaW50IGhjaV91YXJ0X3JlZ2lzdGVyX2RldihzdHJ1Y3QgaGNpX3VhcnQgKmh1KVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTcyOC1cdFx0QlRfRVJSKFwmIzM0O0NhbiYjMzk7dCByZWdpc3RlciBIQ0kgZGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjcyOTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy03MzAtXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19JTklULCBcdTAwMjZodS1cdTAwM2VmbGFncyk7XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTg4Nj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3dyaXRlcGFnZXNfZG93bl93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9leHQ0LmgtMTg4Ny17XG5mcy9leHQ0L2V4dDQuaDoxODg4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcbmZzL2V4dDQvZXh0NC5oLTE4ODktXHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4tLVxuZnMvbG9ja3MuYz0zMDk4PXN0YXRpYyB2b2lkICpsb2Nrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKVxuLS1cbmZzL2xvY2tzLmMtMzEwMy1cdGl0ZXItXHUwMDNlbGlfcG9zID0gKnBvcyAmIzQzOyAxO1xuZnMvbG9ja3MuYzozMTA0Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZmlsZV9yd3NlbSk7XG5mcy9sb2Nrcy5jLTMxMDUtXHRzcGluX2xvY2soXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xuLS1cbmZzL3Byb2Mva2NvcmUuYz0yNzI9c3RhdGljIGludCBrY29yZV91cGRhdGVfcmFtKHZvaWQpXG4tLVxuZnMvcHJvYy9rY29yZS5jLTI3OC1cbmZzL3Byb2Mva2NvcmUuYzoyNzk6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZrY2xpc3RfbG9jayk7XG5mcy9wcm9jL2tjb3JlLmMtMjgwLVx0aWYgKCF4Y2hnKFx1MDAyNmtjb3JlX25lZWRfdXBkYXRlLCAwKSlcbi0tXG5mcy9zdXBlci5jPTE3OTQ9c3RhdGljIHZvaWQgc2Jfd2FpdF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXG5mcy9zdXBlci5jLTE3OTUte1xuZnMvc3VwZXIuYzoxNzk2Olx0cGVyY3B1X2Rvd25fd3JpdGUoc2ItXHUwMDNlc193cml0ZXJzLnJ3X3NlbSAmIzQzOyBsZXZlbC0xKTtcbmZzL3N1cGVyLmMtMTc5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMjg9ZXh0ZXJuIGJvb2wgcGVyY3B1X2lzX3JlYWRfbG9ja2VkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMjk6ZXh0ZXJuIHZvaWQgcGVyY3B1X2Rvd25fd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKik7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzMC1leHRlcm4gdm9pZCBwZXJjcHVfdXBfd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKik7XG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMzY9REVGSU5FX0dVQVJEKHBlcmNwdV93cml0ZSwgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKixcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTM3Olx0ICAgICBwZXJjcHVfZG93bl93cml0ZShfVCksIHBlcmNwdV91cF93cml0ZShfVCkpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzOC1cbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTEzMTY9dm9pZCBjZ3JvdXBfZmF2b3JfZHlubW9kcyhzdHJ1Y3QgY2dyb3VwX3Jvb3QgKnJvb3QsIGJvb2wgZmF2b3IpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xMzMxLVx0ICovXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjEzMzI6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZjZ3JvdXBfdGhyZWFkZ3JvdXBfcndzZW0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xMzMzLVx0aWYgKGZhdm9yIFx1MDAyNlx1MDAyNiAhZmF2b3JpbmcpIHtcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTI1MzI9dm9pZCBjZ3JvdXBfYXR0YWNoX2xvY2soZW51bSBjZ3JvdXBfYXR0YWNoX2xvY2tfbW9kZSBsb2NrX21vZGUsXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0yNTQwLVx0Y2FzZSBDR1JQX0FUVEFDSF9MT0NLX0dMT0JBTDpcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MjU0MTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2Y2dyb3VwX3RocmVhZGdyb3VwX3J3c2VtKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMjU0Mi1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2NwdS5jPTUwNj12b2lkIGNwdXNfd3JpdGVfbG9jayh2b2lkKVxua2VybmVsL2NwdS5jLTUwNy17XG5rZXJuZWwvY3B1LmM6NTA4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2Y3B1X2hvdHBsdWdfbG9jayk7XG5rZXJuZWwvY3B1LmMtNTA5LX1cbi0tXG5rZXJuZWwvZXZlbnRzL2h3X2JyZWFrcG9pbnQuYz0xMTU9c3RhdGljIHN0cnVjdCBtdXRleCAqYnBfY29uc3RyYWludHNfbG9jayhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApXG4tLVxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTMyLVx0fSBlbHNlIHtcbmtlcm5lbC9ldmVudHMvaHdfYnJlYWtwb2ludC5jOjEzMzpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2YnBfY3B1aW5mb19zZW0pO1xua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTM0LVx0fVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTEyNzI9cmVnaXN0ZXJfZm9yX2VhY2hfdm1hKHN0cnVjdCB1cHJvYmUgKnVwcm9iZSwgc3RydWN0IHVwcm9iZV9jb25zdW1lciAqbmV3KVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzctXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoxMjc4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZHVwX21tYXBfc2VtKTtcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzktXHRpbmZvID0gYnVpbGRfbWFwX2luZm8odXByb2JlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyxcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTg1ND1fX2FjcXVpcmVzKHBjcHVfcndzZW0pXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTg1NS17XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjg1NjpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnBjcHVfcndzZW0pO1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy04NTctXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz00OD1zdGF0aWMgYm9vbCBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6ODQ6c3RhdGljIGlubGluZSBib29sIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtODUte1xuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTkyPXN0YXRpYyBib29sIF9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIpXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVx0fVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTAzOlx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTA0LX1cbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTI2LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3Olx0LyogY29uY3VycmVudCBhZ2FpbnN0IHBlcmNwdV9kb3duX3dyaXRlKCksIGNhbiBnZXQgc3RvbGVuICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjgtXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTIxMT1zdGF0aWMgYm9vbCByZWFkZXJzX2FjdGl2ZV9jaGVjayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjIyNjp2b2lkIF9fc2NoZWQgcGVyY3B1X2Rvd25fd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjM5LVx0ICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDA6XHRpZiAoIV9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pKSB7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXHRcdHRyYWNlX2NvbnRlbnRpb25fYmVnaW4oc2VtLCBMQ0JfRl9QRVJDUFUgfCBMQ0JfRl9XUklURSk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ1LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQ2Olx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDctXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI1OTpFWFBPUlRfU1lNQk9MX0dQTChwZXJjcHVfZG93bl93cml0ZSk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNjAtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NTgwPXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4Mi0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NTgzOlx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NTg0LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTkwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2Rpc2FibGUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTkyOC1cdG11dGV4X2xvY2soXHUwMDI2c2N4X2VuYWJsZV9tdXRleCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjU5Mjk6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZzY3hfZm9ya19yd3NlbSk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTU5MzAtXHRzY3hfY2dyb3VwX2xvY2soKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTYwNjA9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZGlzYWJsZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02MTA3LVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjYxMDg6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZzY3hfZm9ya19yd3NlbSk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTYxMDktXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03MDkwPXN0YXRpYyB2b2lkIHNjeF9yb290X2VuYWJsZV93b3JrZm4oc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTcyNzMtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzI3NDpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzI3NS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTczNzctXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzM3ODpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzM3OS1cdHNjeF90YXNrX2l0ZXJfc3RhcnQoXHUwMDI2c3RpLCBOVUxMKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc1MDg9c3RhdGljIHZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03NjA1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NjA2Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy03NjA3LVx0c2N4X2Nncm91cF9sb2NrKCk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTk9dm9pZCBtZW1faG90cGx1Z19iZWdpbih2b2lkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjYxLVx0Y3B1c19yZWFkX2xvY2soKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjYyOlx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2bWVtX2hvdHBsdWdfbG9jayk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDY0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQZXItQ1BVIFJXU0VNIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBwZXJjcHVfZG93bl93cml0ZWAsIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZS4gVGhlIGNydXggb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHRhc2sgc3RhdGUgdG8gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIGR1cmluZyBhIGZyZWV6ZSwgaXQmIzM5O3Mgbm93IGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAuIFRoYXQmIzM5O3MgdGhlIHN1cmZhY2UtbGV2ZWwgZGlmZmVyZW5jZSwgYnV0IHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKUmlnaHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4gVGhlIHJlbGV2YW50IHBhcnQgb2YgYHBlcmNwdV9kb3duX3dyaXRlYCBpcyB0aGF0IGl0IGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdChzZW0sIGZhbHNlLCBmYWxzZSlgLiBTbyB0aGUgYGZyZWV6ZWAgZmxhZyB3ZSYjMzk7cmUgY2hhbmdpbmcgaXMgYGZhbHNlYCBoZXJlLiBUaGlzIGNoYW5nZSB3b3VsZCAqb25seSogYWZmZWN0IGBwZXJjcHVfcndzZW1fd2FpdGAgd2hlbiBgZnJlZXplYCBpcyBhY3R1YWxseSBzZXQgdG8gYHRydWVgLiBIbW0sIHdobyBldmVuIGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdGAgd2l0aCBgZnJlZXplPXRydWVgPwoKQWhhISBMb29raW5nIGF0IHRoZSBjYWxscywgYF9fcGVyY3B1X2Rvd25fcmVhZGAgY2FsbHMgYHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgdHJ1ZSwgZnJlZXplKWAuIFNvLCB0aGF0JiMzOTtzIHRoZSBrZXkuIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjdXJyZW50IGNvZGUgd2hlcmUgdGhpcyBjb25kaXRpb24gY2FuIGJlIHRydWUuIE9rYXksIHRyYWNraW5nIHRoaXMgYmFjaywgSSBzZWUgdGhhdCBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyBjYWxsZWQgYnkgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYF9fc2Jfc3RhcnRfd3JpdGVgLiBFeGNlbGxlbnQuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50OiBgX19zYl9zdGFydF93cml0ZWAgaXMgdGhlIG1haW4gdGhpbmcgdG8gZm9jdXMgb24gaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LgoKU28sIHRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmb2N1c2VkIG9uIGBfX3BlcmNwdV9kb3duX3JlYWRgLCBhcyBJIHN1c3BlY3RlZC4gTm93IEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSB3aWxsIGxvb2sgZm9yIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgYF9fcGVyY3B1X2Rvd25fcmVhZGAgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBgZnJlZXplYCBmbGFnIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFuIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQuKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05Ni1cdGVsc2VcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XHRcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cdHByZWVtcHRfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGxldCYjMzk7cyBzZWUgaG93IGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCBhY3R1YWxseSB3b3Jrcy4mIzM0OyBJIHF1aWNrbHkgc2VlIHRoYXQgaXQgY2FsbHMgYF9fcGVyY3B1X2Rvd25fcmVhZGAuIFRoZW4sIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7cmlnaHQsIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoYXQ/JiMzNDsgTG9va2luZyBhdCBpdCBub3csIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhlIHNlbWFwaG9yZSAoYHNlbWApLCB0aGUgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgd2UmIzM5O3JlIGdvaW5nIHRvIHVzZSBgX19wZXJjcHVfZG93bl9yZWFkYCAoYGZhbHNlYCkgYW5kIHRoZSBgZnJlZXphYmxlYCBhcmd1bWVudC4gU28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbm90IHVzaW5nIHRoZSBgX19wZXJjcHVfZG93bl9yZWFkYCBmb3Igb3VyIHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGZlZWwgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBieSBsb29raW5nIGF0IHRoZSBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDY9ZXh0ZXJuIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosIGJvb2wsIGJvb2wpO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00Ny1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NDg6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDktXHRcdFx0XHRcdCAgICAgYm9vbCBmcmVlemFibGUpXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03Ni17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc3Olx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzgtfVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZyZWV6ZSk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgaGVyZS4gSSBzZWUgdGhhdCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGlzIGNhbGxpbmcgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbi4gT2theSwgZ290IGl0LgoKTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGJlY2F1c2UgYF9fc2Jfc3RhcnRfd3JpdGVgIGNhbGxzIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAuIFRoaXMgaXMgcHJvYmFibHkgc2lnbmlmaWNhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgc2Vzc2lvbiBhbmQgaXQgbWlnaHQgYmUgYSBib3R0bGVuZWNrLiBTaW5jZSBpdCBpcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgd2lsbCBjaGVjayBmb3IgYW55IG90aGVyIGNhbGwgc2l0ZXMgb2YgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBpbiB0aGUgY29kZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaD0xNz1zdGF0aWMgaW5saW5lIHZvaWQgX19zYl9zdGFydF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMTgte1xuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oOjE5Olx0cGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc2ItXHUwMDNlc193cml0ZXJzLnJ3X3NlbSAmIzQzOyBsZXZlbCAtIDEsIHRydWUpO1xuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oLTIwLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgxLVx0XHRcdFx0XHQgICAgICBib29sIGZyZWV6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byBLZXJuZWwgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHdyaXRlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgdGhleSYjMzk7cmUgaW5pdGlhdGVkLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBfX3NiX3N0YXJ0X3dyaXRlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gd2UmIzM5O3JlIHRyYWNraW5nLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIga2V5IGZ1bmN0aW9ucyDigJMgYHNiX3N0YXJ0X3dyaXRlYCwgYHNiX3N0YXJ0X3BhZ2VmYXVsdGAsIGFuZCBgc2Jfc3RhcnRfaW50d3JpdGVgIOKAkyBhbGwgaGVhdmlseSBpbXBsaWNhdGVkIHdpdGhpbiB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKS4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgY3JpdGljYWwgYXJlYSB0byB1bmRlcnN0YW5kLCBiZWNhdXNlIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkgaW4gVkZTIGFyZSAqYWx3YXlzKiBrZXkuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24uIFdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIHN3aXRjaGVzIGZyb20gc2V0dGluZyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBiZWhhdmlvci4gV2UmIzM5O3JlIGVzc2VudGlhbGx5IGNoYW5naW5nIHRoZSBsb2NrIHNlbWFudGljcyB3aXRoaW4gdGhlIGtlcm5lbCwgaW1wYWN0aW5nIGhvdyB0YXNrcyBhcmUgc2NoZWR1bGVkIGFuZCBwb3RlbnRpYWxseSB0aGVpciBhYmlsaXR5IHRvIHJlc3BvbmQgdG8gaW50ZXJydXB0cy4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSByaXBwbGUgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgaHVnZSBjYW5kaWRhdGUgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4KCkNvbnNpZGVyaW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgc2hpZnQgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UmIzM5O2xsIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSYjMzk7dmUgZ290IGF0IGl0LgoKQXMgZm9yIGZvY3VzIHN5bWJvbHMsIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIG9uZSBJJiMzOTtsbCB3YW50IHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8uCgpGaW5hbGx5LCBJIGRvbiYjMzk7dCBzZWUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IHNpbXBsZXIuIExldCYjMzk7cyB1c2UgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBhbmFseXNpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUga2VybmVsIGxvY2tpbmcgbWVjaGFuaXNtIChgcGVyY3B1X3J3c2VtX3dhaXRgKSB0byB1c2UgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCBpbnN0ZWFkIG9mIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoaXMgYWZmZWN0cyBsb2FkIGF2ZXJhZ2UgY2FsY3VsYXRpb24gYW5kIHRhc2sgc3RhdGUgaGFuZGxpbmcuIFRoZSBgZnJlZXplPXRydWVgIHBhdGggaXMgcHJpbWFyaWx5IHJlYWNoZWQgdmlhIGBfX3BlcmNwdV9kb3duX3JlYWRgIHRocm91Z2ggVkZTIHdyaXRlIHByb3RlY3Rpb24gbWVjaGFuaXNtcyAoYF9fc2Jfc3RhcnRfd3JpdGVgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YzY0NDliMDZmZTk2MGJiYTcxNzliMjdmOWNjMWFmMDRhMTViYWJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKQEAgLTE1Nyw4ICYjNDM7MTU3LDcgQEAgc3RhdGljIHZvaWQgcGVyY3B1X3J3c2VtX3dhaXQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIsCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VtLSZndDt3YWl0ZXJzLmxvY2spOwogCiAJd2hpbGUgKHdhaXQpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfAotCQkJCSAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpOwomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7d3FfZW50cnkucHJpdmF0ZSkpCiAJCQlicmVhazsKIAkJc2NoZWR1bGUoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjcKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGVyY3B1X3J3c2VtX3dhaXRgIHdpdGhpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB0aGUgYHNldF9jdXJyZW50X3N0YXRlYCBjYWxsLiBJbml0aWFsbHksIGl0IHNldHMgdGhlIHRhc2sgc3RhdGUgdG8gYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCB3aXRoIGFuIG9wdGlvbmFsIGBUQVNLX0ZSRUVaQUJMRWAgYml0LCBkZXBlbmRpbmcgb24gYSBgZnJlZXplYCBmbGFnLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyB0byBlaXRoZXIgYChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSlgIGlmIGBmcmVlemVgIGlzIHRydWUgb3IganVzdCBgVEFTS19VTklOVEVSUlVQVElCTEVgIG90aGVyd2lzZS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGxvY2tpbmcgYW5kIHNjaGVkdWxpbmcgbW9kaWZpY2F0aW9uLCBhIGNoYW5nZSBpbiBob3cgYSB0YXNrIHdhaXRzIGZvciBhIHJlc291cmNlLiBJbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBwYXNzZWQgdG8gdXNlciBzcGFjZSwgb3IgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBoZXJlLiBJdCYjMzk7cyBzb2xlbHkgYWJvdXQgdGFzayBzdGF0ZSwgYW5kIHNvIGFueSBjb25jZXJucywgbGlrZSBsb2NrZGVwIGlzc3Vlcywgc2NoZWR1bGluZyBpbXBhY3RzIG9yIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLCBhcmUgYWxsIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2V0Yy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlOgoKYGBgYwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwpgYGAKClllYWgsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgdGhvdWdodC4gTm8gd2F5IHRoaXMgcmVsYXRlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSBleGlzdGluZyBpbnN0cnVtZW50YXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGFzayBzdGF0ZSBzZXQgZHVyaW5nIGBwZXJjcHVfcndzZW1fd2FpdGAgaW4gYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gSXQgY2hhbmdlcyB0aGUgc3RhdGUgZnJvbSBgVEFTS19VTklOVEVSUlVQVElCTEUgfCAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKWAgdG8gYGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRWAuIFRoaXMgaXMgYSBzY2hlZHVsaW5nIGFuZCBsb2NraW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3MsIHNjaGVkdWxpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgTE9DS0RFUCBvciBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1Ny42NTEyNTE0NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMzk2NTgzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wZXJjcHVfZG93bl9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGFzayBzdGF0ZSBzZXQgZHVyaW5nIGBwZXJjcHVfcndzZW1fd2FpdGAgaW4gYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gSXQgY2hhbmdlcyB0aGUgc3RhdGUgZnJvbSBgVEFTS19VTklOVEVSUlVQVElCTEUgfCAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKWAgdG8gYGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRWAuIFRoaXMgaXMgYSBzY2hlZHVsaW5nIGFuZCBsb2NraW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3MsIHNjaGVkdWxpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgTE9DS0RFUCBvciBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU3LjY1MTI1NjgzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODE5NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM2NDQ5YjA2ZmU5NjBiYmE3MTc5YjI3ZjljYzFhZjA0YTE1YmFiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcXG5pbmRleCBmN2UxNTJjNDBkNmQwLi41N2UyNGZkYzAyMDM2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXFxuKysrIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcXG5AQCAtMTU3LDggKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlbS1cXHUwMDNld2FpdGVycy5sb2NrKTtcXG4gXFxuIFxcdHdoaWxlICh3YWl0KSB7XFxuLVxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuIFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRzY2hlZHVsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1OC4wOTE3NDE5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODA3OTk5NTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3BlcmNwdV9kb3duX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuQEAgLTE1Nyw4ICsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcixcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZW0tXHUwMDNld2FpdGVycy5sb2NrKTtcbiBcbiBcdHdoaWxlICh3YWl0KSB7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcbi1cdFx0XHRcdCAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpO1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1OC4wOTE3NDMxNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM0NjI1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBMb2NraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgc3RhdGUgdHJhbnNpdGlvbiBpbiBgcGVyY3B1X3J3c2VtX3dhaXRgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpcyBtb2RpZnlpbmcgaG93IHRoZSB0YXNrIHN0YXRlIGlzIHNldC4gSW5zdGVhZCBvZiB1c2luZyBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgcmVnYXJkbGVzcyBvZiB0aGUgYGZyZWV6ZWAgZmxhZywgaXQncyBub3cgY29uZGl0aW9uYWwuICBXaGVuIGBmcmVlemVgIGlzIHRydWUsIHRoZSBzdGF0ZSBiZWNvbWVzIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAsIG90aGVyd2lzZSBpdCByZW1haW5zIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAuXG5cblJpZ2h0LCBzbyBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGZ1bmRhbWVudGFsIGxvY2tpbmcgbWVjaGFuaXNtIGl0c2VsZiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBub3QganVzdCBhIHN1cGVyZmljaWFsIHR3ZWFrOyBpdCBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiBgcGVyY3B1X3J3c2VtX3dhaXRgLiAgVGhpcyBzdGF0ZSB0cmFuc2l0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIHNoaWZ0IHRvIGBUQVNLX0lETEVgIHVuZGVyIGZyZWV6aW5nIGNvbmRpdGlvbnMsIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuR2l2ZW4gaXRzIGltcGFjdCBvbiBhIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnQsIGBwZXJjcHVfcndzZW1fd2FpdGAsIEkga25vdyB0aGlzIGRlZmluaXRlbHkgbmVlZHMgYSBnb29kIGZ1enppbmcgcnVuLiAgV2UgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2UgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgdmFyaW91cyBzdHJlc3MgY29uZGl0aW9ucy4gSXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbi4gTGV0J3MgZGVsdmUgaW50byB0aGUgYHBlcmNwdV9yd3NlbV93YWl0YCBmdW5jdGlvbiBpdHNlbGYgbm93IGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjA1LjMyNjM3MTg4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfcndzZW1fd2FpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNDAtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTQxOnN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE0Mi1cXHRcXHRcXHQgICAgICBib29sIGZyZWV6ZSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTE2OD1ib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTc4LVxcdHByZWVtcHRfZW5hYmxlKCk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTc5OlxcdHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgLyogLnJlYWRlciA9ICovIHRydWUsIGZyZWV6ZSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTgwLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjI2PXZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQxLVxcdFxcdHRyYWNlX2NvbnRlbnRpb25fYmVnaW4oc2VtLCBMQ0JfRl9QRVJDUFUgfCBMQ0JfRl9XUklURSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQyOlxcdFxcdHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgLyogLnJlYWRlciA9ICovIGZhbHNlLCBmYWxzZSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQzLVxcdFxcdGNvbnRlbmRlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjA1LjM4MTY4OTExNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDE2MzAzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIGBwZXJjcHVfcndzZW1fd2FpdGAgRnVuY3Rpb24gYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gYHBlcmNwdV9yd3NlbV93YWl0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBleHBvc2VkIG91dHNpZGUgaXRzIGRlZmluZWQgc2NvcGUuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgKndobyogY2FsbHMgaXQuIFRoZSB0ZXh0IG1lbnRpb25zIGl0J3MgY2FsbGVkIGJ5IGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aG9zZSBuYW1lcyBhbG9uZSBzdWdnZXN0IHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyLUNQVSByZWFkLXdyaXRlIHNlbWFwaG9yZSBvcGVyYXRpb25zLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUbyB0cnVseSBncmFzcCB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBpbnZva2VkIGJ5IGhpZ2hlci1sZXZlbCBjb2RlLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoZXkncmUgKmRvaW5nKiBhbmQgaG93IHRoZXkncmUgKnVzaW5nKiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGF0J2xsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHBlci1DUFUgcmVhZC13cml0ZSBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTMsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMC4yODMzMjI0OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwNDQ1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJjcHVfZG93bl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9mcmVlX3J3c2VtKTtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy00Ny1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo0ODpzdGF0aWMgYm9vbCBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ5LXtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTkyPXN0YXRpYyBib29sIF9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy05Ny1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo5ODpcXHRcXHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTk5LVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xNDE9c3RhdGljIHZvaWQgcGVyY3B1X3J3c2VtX3dhaXQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIsXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNjctXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTY4OmJvb2wgX19zY2hlZCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCB0cnksXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTY5LVxcdFxcdFxcdFxcdGJvb2wgZnJlZXplKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3MC17XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTcxOlxcdGlmIChfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4NC19XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTg1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcGVyY3B1X2Rvd25fcmVhZCk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMC4zMzczNzE4ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDcyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2Rvd25fd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9NDg9c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVxcdH1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XFx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEwNC19XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3OlxcdC8qIGNvbmN1cnJlbnQgYWdhaW5zdCBwZXJjcHVfZG93bl93cml0ZSgpLCBjYW4gZ2V0IHN0b2xlbiAqL1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMjUtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXFx0ICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQwOlxcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXFx0XFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0NS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XFx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ3LVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2Rvd25fd3JpdGUpO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTAuMzgyMTI1Nzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Mzc1MDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBJbXBsZW1lbnRhdGlvbioqXG5cbk15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB3ZSd2ZSBnb3QgdHdvIGV4cG9ydGVkIGZ1bmN0aW9ucyBoZXJlOiBgX19wZXJjcHVfZG93bl9yZWFkYCBhbmQgYHBlcmNwdV9kb3duX3dyaXRlYC4gUmlnaHQgYXdheSwgbXkgYnJhaW4gZ29lcyB0byBcIndoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVpbmcgKmV4cG9ydGVkKj9cIiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlaXIgYmVoYXZpb3Igb3IgZXZlbiB0aGVpciBhdmFpbGFiaWxpdHk/XG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZmlsZSdzIGNvbnRlbnRzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGNvbnRpbmdlbnQgb24gdGhlIHNldHRpbmcgb2Ygb25lIG9yIG1vcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgdGhlcmUgYXJlIGNvbmZpZ3MgaW4gcGxhY2UsIHdoYXQgYXJlIHRoZXk/IFRoYXQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG9ydGFiaWxpdHkgYW5kIGNvbmRpdGlvbmFsIHVzZSBvZiB0aGVzZSBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIHByaW1pdGl2ZXMuIFRoaXMgZmlsZSBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGUtdGltZSBjb25kaXRpb25zIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTMuODU1ODc4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1LXJ3c2VtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9OT1DT05URVhUX0FOQUxZU0lTX3J3c2VtLm8gOj0geVxcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlLTEwLVxcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlOjExOm9iai15ICs9IG11dGV4Lm8gc2VtYXBob3JlLm8gcndzZW0ubyBwZXJjcHUtcndzZW0ub1xcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlLTEyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMy44OTk4NzI0MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0MjI5ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBlci1DUFUgUmVhZC9Xcml0ZSBTZW1hcGhvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQgaW4gdW5jb25kaXRpb25hbGx5IOKAkyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIChgb2JqLXkgKz0gcGVyY3B1LXJ3c2VtLm9gKS4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgc28gaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgYnVpbGQuIFRoZW4gSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQncyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZCBieSBib3RoIGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZSwgYXMgaXQgaW1wYWN0cyB0aGUgY29yZSByZWFkL3dyaXRlIHNlbWFwaG9yZSBmdW5jdGlvbmFsaXR5IGZvciBwZXItQ1BVIHZhcmlhYmxlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgVEFTS19JRExFYCB2ZXJzdXMgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCB3aGVuIGBmcmVlemVgIGlzIHNldCB0byB0cnVlLiBNeSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZiDigJMgYGZyZWV6ZWAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBvciBtYXliZSBzb21lIGNyaXRpY2FsIHBhdGggZHVyaW5nIGEgZGVidWdnaW5nIG9yIHRyYWNpbmcgc2NlbmFyaW8uIFRoZSBrZXkgaXMgdW5kZXJzdGFuZGluZyB3aGVuIGBmcmVlemVgIGlzIGFjdHVhbGx5IHRydWUuIEl0IGFwcGVhcnMgdGhhdCBgZnJlZXplYCBnZXRzIGl0cyB2YWx1ZSBpbiBhIGNhbGwgdG8gYF9fcGVyY3B1X2Rvd25fcmVhZGAgKHRoZSBkaXJlY3QgY2FsbCksIG9yIGBwZXJjcHVfZG93bl9yZWFkYCAoYSBjYWxsIHRoYXQgaW5kaXJlY3RseSBjYWxscyBgX19wZXJjcHVfZG93bl9yZWFkYC4pXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgYF9fcGVyY3B1X2Rvd25fcmVhZGAgd2l0aCBgZnJlZXplPXRydWVgIG9yIGBwZXJjcHVfZG93bl9yZWFkYCB3aXRoIGBmcmVlemU9dHJ1ZWAuIFRyYWNpbmcgdGhvc2UgY2FsbHMgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgVEFTS19JRExFYCBhbmQgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLCBiZWNhdXNlIHRoYXQgY2FsbCBjaGFpbiAqaXMqIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjIxLjQ0MjE3NDAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjIxNzg5ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGVyY3B1X2Rvd25fcmVhZC4qdHJ1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTk2LVxcdGVsc2VcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjk3OlxcdFxcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTgtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjQuNjYzOTc1NTExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjgwNDM5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIFBlci1DUFUgUmVhZGVyL1dyaXRlciBTZW1hcGhvcmVzKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIGxvb2tpbmcgYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGl0J3MgdGFraW5nIGBib29sIHRyeSwgYm9vbCBmcmVlemVgIGFzIGFyZ3VtZW50cy4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZmxhZ3MgYXJlIGZvci4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkZWZpbml0aW9uIG9mIGBwZXJjcHVfZG93bl9yZWFkYC4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGhvdyB0aGVzZSBwZXItQ1BVIHJlYWRlci93cml0ZXIgc2VtYXBob3JlcyB3b3JrLCBhbmQgdGhvc2UgcGFyYW1ldGVycyBhcmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguMDMyMDIyMjk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUwOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0zMj1pc19zdGF0aWMgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ1LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NDY6ZXh0ZXJuIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosIGJvb2wsIGJvb2wpO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDctXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0ODpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDktXFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZyZWV6YWJsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNjYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Njc6XFx0XFx0X19wZXJjcHVfZG93bl9yZWFkKHNlbSwgZmFsc2UsIGZyZWV6YWJsZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTY4LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc0LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NzU6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc2LXtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc3OlxcdHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmYWxzZSk7XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OC19XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBmcmVlemUpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MzpcXHRwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZnJlZXplKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg1LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6ODY6c3RhdGljIGlubGluZSBib29sIHBlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05MS1cXHQvKlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTI6XFx0ICogU2FtZSBhcyBpbiBwZXJjcHVfZG93bl9yZWFkKCkuXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05My1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XFx0XFx0cmV0ID0gX19wZXJjcHVfZG93bl9yZWFkKHNlbSwgdHJ1ZSwgZmFsc2UpOyAvKiBVbmNvbmRpdGlvbmFsIG1lbW9yeSBiYXJyaWVyICovXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMTI9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV91cF9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTExNy1cXHQvKlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTE4OlxcdCAqIFNhbWUgYXMgaW4gcGVyY3B1X2Rvd25fcmVhZCgpLlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTE5LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMzI9REVGSU5FX0dVQVJEKHBlcmNwdV9yZWFkLCBzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTMzOlxcdCAgICAgcGVyY3B1X2Rvd25fcmVhZChfVCksIHBlcmNwdV91cF9yZWFkKF9UKSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjEzNDpERUZJTkVfR1VBUkRfQ09ORChwZXJjcHVfcmVhZCwgX3RyeSwgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKF9UKSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguMDc4NTM4MzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg1OTUzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGNvZGUgcGF0aC4gSSBzZWUgd2UncmUgc3RhcnRpbmcgd2l0aCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVhZC1zaWRlIGxvY2tpbmcgbWVjaGFuaXNtIHRoYXQncyBkZXNpZ25lZCB0byBiZSBmcmVlemUtYXdhcmUsIHNwZWNpZmljYWxseSBvcGVyYXRpbmcgb24gcGVyLUNQVSBkYXRhLlwiIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZGVzY3JpcHRpdmU7IEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cbk5vdywgd2hlcmUgZG9lcyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGFjdHVhbGx5ICpnbyo/IEFoYSwgaXQgY2FsbHMgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCdzIHRoZSBjb3JlIHdvcmsuIFNvLCB0aGlzIHdyYXBwZXIgbGlrZWx5IGhhbmRsZXMgc29tZSBwcmUtIG9yIHBvc3QtcHJvY2Vzc2luZyBmb3IgZnJlZXplIGhhbmRsaW5nLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHRoZSBtb3JlIGludGVyZXN0aW5nIG9uZTogd2hvIGFjdHVhbGx5ICp1c2VzKiBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGNvZGUgZXhpc3RzIGFuZCB3aGF0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MzIuMDc3MTM2MDE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIzNjMyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIF9fc2Jfc3RhcnRfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGxldmVsKVxcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaC0xOC17XFxuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oOjE5OlxcdHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHNiLVxcdTAwM2VzX3dyaXRlcnMucndfc2VtICsgbGV2ZWwgLSAxLCB0cnVlKTtcXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBmcmVlemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjMzLjgwMDc3NDA4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDYxNTE4Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGUyBXcml0ZSBQcm90ZWN0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYF9fc2Jfc3RhcnRfd3JpdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxpbmcgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCwgYW5kIHRoYXQncyAqdGhlKiBjb3JlIG9mIHRoZSBWRlMncyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbSwgaXNuJ3QgaXQ/IGBzYl9zdGFydF93cml0ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFsbCByZWx5IG9uIHRoaXMuIFNvLCBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgcGllY2Ugd2l0aGluIHRoZSBWRlMuXG5cblRoZSBtZWF0IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLCBlc3BlY2lhbGx5IHNpbmNlIGBUQVNLX0lETEVgIGltcGFjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9ucyBhbmQgd2hvIGtub3dzIHdoYXQgb3RoZXIgdGFzayBzdGF0ZS1kZXBlbmRlbnQgY29kZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGlzc3Vlcywgc28gSSB0aGluayBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgY2hhbmdlcy5cblxuTGV0J3MgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgcGVyY3B1X2Rvd25fd3JpdGVgLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgaXQncyB1c2VkLiBUaGlzIGNoYW5nZSBsaWtlbHkgaGFzIHNvbWUgaW1wYWN0IG9uIGl0cyB1c2FnZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQzLjI2MjI5NDgwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzI0MDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9sb2NraW5nL3BlcmNwdS1ydy1zZW1hcGhvcmUucnN0PTIzPVRoZSBsb2NrIGlzIGxvY2tlZCBmb3IgcmVhZCB3aXRoIHBlcmNwdV9kb3duX3JlYWQsIHBlcmNwdV91cF9yZWFkIGFuZFxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdDoyNDpmb3Igd3JpdGUgd2l0aCBwZXJjcHVfZG93bl93cml0ZSwgcGVyY3B1X3VwX3dyaXRlLlxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdC0yNS1cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTE4NT12b2lkIGhjaV91YXJ0X2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy0xOTctXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM6MTk4OlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZodS1cXHUwMDNlcHJvdG9fbG9jayk7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXFx1MDAyNmh1LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz01NDg9c3RhdGljIHZvaWQgaGNpX3VhcnRfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjYtXFx0aWYgKHByb3RvX3JlYWR5KSB7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM6NTY3OlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZodS1cXHUwMDNlcHJvdG9fbG9jayk7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtNTY4LVxcdFxcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXFx1MDAyNmh1LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz02NzA9c3RhdGljIGludCBoY2lfdWFydF9yZWdpc3Rlcl9kZXYoc3RydWN0IGhjaV91YXJ0ICpodSlcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTcyOC1cXHRcXHRCVF9FUlIoXFxcIkNhbid0IHJlZ2lzdGVyIEhDSSBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo3Mjk6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmh1LVxcdTAwM2Vwcm90b19sb2NrKTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy03MzAtXFx0XFx0Y2xlYXJfYml0KEhDSV9VQVJUX1BST1RPX0lOSVQsIFxcdTAwMjZodS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTg4Nj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3dyaXRlcGFnZXNfZG93bl93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZXh0NC5oLTE4ODcte1xcbmZzL2V4dDQvZXh0NC5oOjE4ODg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX3dyaXRlcGFnZXNfcndzZW0pO1xcbmZzL2V4dDQvZXh0NC5oLTE4ODktXFx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbi0tXFxuZnMvbG9ja3MuYz0zMDk4PXN0YXRpYyB2b2lkICpsb2Nrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKVxcbi0tXFxuZnMvbG9ja3MuYy0zMTAzLVxcdGl0ZXItXFx1MDAzZWxpX3BvcyA9ICpwb3MgKyAxO1xcbmZzL2xvY2tzLmM6MzEwNDpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2ZmlsZV9yd3NlbSk7XFxuZnMvbG9ja3MuYy0zMTA1LVxcdHNwaW5fbG9jayhcXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xcbi0tXFxuZnMvcHJvYy9rY29yZS5jPTI3Mj1zdGF0aWMgaW50IGtjb3JlX3VwZGF0ZV9yYW0odm9pZClcXG4tLVxcbmZzL3Byb2Mva2NvcmUuYy0yNzgtXFxuZnMvcHJvYy9rY29yZS5jOjI3OTpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2a2NsaXN0X2xvY2spO1xcbmZzL3Byb2Mva2NvcmUuYy0yODAtXFx0aWYgKCF4Y2hnKFxcdTAwMjZrY29yZV9uZWVkX3VwZGF0ZSwgMCkpXFxuLS1cXG5mcy9zdXBlci5jPTE3OTQ9c3RhdGljIHZvaWQgc2Jfd2FpdF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXFxuZnMvc3VwZXIuYy0xNzk1LXtcXG5mcy9zdXBlci5jOjE3OTY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoc2ItXFx1MDAzZXNfd3JpdGVycy5yd19zZW0gKyBsZXZlbC0xKTtcXG5mcy9zdXBlci5jLTE3OTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMjg9ZXh0ZXJuIGJvb2wgcGVyY3B1X2lzX3JlYWRfbG9ja2VkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTI5OmV4dGVybiB2b2lkIHBlcmNwdV9kb3duX3dyaXRlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTMwLWV4dGVybiB2b2lkIHBlcmNwdV91cF93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTM2PURFRklORV9HVUFSRChwZXJjcHVfd3JpdGUsIHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMzc6XFx0ICAgICBwZXJjcHVfZG93bl93cml0ZShfVCksIHBlcmNwdV91cF93cml0ZShfVCkpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC0xMzgtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTEzMTY9dm9pZCBjZ3JvdXBfZmF2b3JfZHlubW9kcyhzdHJ1Y3QgY2dyb3VwX3Jvb3QgKnJvb3QsIGJvb2wgZmF2b3IpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTEzMzEtXFx0ICovXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxMzMyOlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZjZ3JvdXBfdGhyZWFkZ3JvdXBfcndzZW0pO1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTMzMy1cXHRpZiAoZmF2b3IgXFx1MDAyNlxcdTAwMjYgIWZhdm9yaW5nKSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTI1MzI9dm9pZCBjZ3JvdXBfYXR0YWNoX2xvY2soZW51bSBjZ3JvdXBfYXR0YWNoX2xvY2tfbW9kZSBsb2NrX21vZGUsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTI1NDAtXFx0Y2FzZSBDR1JQX0FUVEFDSF9MT0NLX0dMT0JBTDpcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjI1NDE6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmNncm91cF90aHJlYWRncm91cF9yd3NlbSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0yNTQyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2NwdS5jPTUwNj12b2lkIGNwdXNfd3JpdGVfbG9jayh2b2lkKVxcbmtlcm5lbC9jcHUuYy01MDcte1xcbmtlcm5lbC9jcHUuYzo1MDg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmNwdV9ob3RwbHVnX2xvY2spO1xcbmtlcm5lbC9jcHUuYy01MDktfVxcbi0tXFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmM9MTE1PXN0YXRpYyBzdHJ1Y3QgbXV0ZXggKmJwX2NvbnN0cmFpbnRzX2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmJwKVxcbi0tXFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTMyLVxcdH0gZWxzZSB7XFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmM6MTMzOlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZicF9jcHVpbmZvX3NlbSk7XFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTM0LVxcdH1cXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTEyNzI9cmVnaXN0ZXJfZm9yX2VhY2hfdm1hKHN0cnVjdCB1cHJvYmUgKnVwcm9iZSwgc3RydWN0IHVwcm9iZV9jb25zdW1lciAqbmV3KVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtMTI3Ny1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoxMjc4OlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZkdXBfbW1hcF9zZW0pO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzktXFx0aW5mbyA9IGJ1aWxkX21hcF9pbmZvKHVwcm9iZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG4tLVxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9ODU0PV9fYWNxdWlyZXMocGNwdV9yd3NlbSlcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTg1NS17XFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzo4NTY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnBjcHVfcndzZW0pO1xcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtODU3LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9NDg9c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVxcdH1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XFx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEwNC19XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3OlxcdC8qIGNvbmN1cnJlbnQgYWdhaW5zdCBwZXJjcHVfZG93bl93cml0ZSgpLCBjYW4gZ2V0IHN0b2xlbiAqL1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMjUtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXFx0ICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQwOlxcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXFx0XFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0NS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XFx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ3LVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2Rvd25fd3JpdGUpO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDU4MD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2xvY2sodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4Mi0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDU4MzpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4NC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTkwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2Rpc2FibGUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01OTI4LVxcdG11dGV4X2xvY2soXFx1MDAyNnNjeF9lbmFibGVfbXV0ZXgpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTkyOTpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTkzMC1cXHRzY3hfY2dyb3VwX2xvY2soKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NjA2MD1zdGF0aWMgdm9pZCBzY3hfcm9vdF9kaXNhYmxlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNjEwNy1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjYxMDg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTYxMDktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTcwOTA9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZW5hYmxlX3dvcmtmbihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03MjczLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzI3NDpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzI3NS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzM3Ny1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjczNzg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTczNzktXFx0c2N4X3Rhc2tfaXRlcl9zdGFydChcXHUwMDI2c3RpLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NzUwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2VuYWJsZV93b3JrZm4oc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzYwNS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc2MDY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc2MDctXFx0c2N4X2Nncm91cF9sb2NrKCk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1OT12b2lkIG1lbV9ob3RwbHVnX2JlZ2luKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2MS1cXHRjcHVzX3JlYWRfbG9jaygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjYyOlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZtZW1faG90cGx1Z19sb2NrKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQ1LjExOTU0MDk3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE5NzIwMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQZXItQ1BVIFJXU0VNIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHBlcmNwdV9kb3duX3dyaXRlYCwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXMgdXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgdGhpczogaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSB0YXNrIHN0YXRlIHRvIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBkdXJpbmcgYSBmcmVlemUsIGl0J3Mgbm93IGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAuIFRoYXQncyB0aGUgc3VyZmFjZS1sZXZlbCBkaWZmZXJlbmNlLCBidXQgd2UgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblJpZ2h0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoZSByZWxldmFudCBwYXJ0IG9mIGBwZXJjcHVfZG93bl93cml0ZWAgaXMgdGhhdCBpdCBjYWxscyBgcGVyY3B1X3J3c2VtX3dhaXQoc2VtLCBmYWxzZSwgZmFsc2UpYC4gU28gdGhlIGBmcmVlemVgIGZsYWcgd2UncmUgY2hhbmdpbmcgaXMgYGZhbHNlYCBoZXJlLiBUaGlzIGNoYW5nZSB3b3VsZCAqb25seSogYWZmZWN0IGBwZXJjcHVfcndzZW1fd2FpdGAgd2hlbiBgZnJlZXplYCBpcyBhY3R1YWxseSBzZXQgdG8gYHRydWVgLiBIbW0sIHdobyBldmVuIGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdGAgd2l0aCBgZnJlZXplPXRydWVgP1xuXG5BaGEhIExvb2tpbmcgYXQgdGhlIGNhbGxzLCBgX19wZXJjcHVfZG93bl9yZWFkYCBjYWxscyBgcGVyY3B1X3J3c2VtX3dhaXQoc2VtLCB0cnVlLCBmcmVlemUpYC4gU28sIHRoYXQncyB0aGUga2V5LiBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY3VycmVudCBjb2RlIHdoZXJlIHRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlLiBPa2F5LCB0cmFja2luZyB0aGlzIGJhY2ssIEkgc2VlIHRoYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgaXMgY2FsbGVkIGJ5IGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBfX3NiX3N0YXJ0X3dyaXRlYC4gRXhjZWxsZW50LiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50OiBgX19zYl9zdGFydF93cml0ZWAgaXMgdGhlIG1haW4gdGhpbmcgdG8gZm9jdXMgb24gaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5TbywgdGhlIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGZvY3VzZWQgb24gYF9fcGVyY3B1X2Rvd25fcmVhZGAsIGFzIEkgc3VzcGVjdGVkLiBOb3cgSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuIEkgd2lsbCBsb29rIGZvciBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGBfX3BlcmNwdV9kb3duX3JlYWRgIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgYGZyZWV6ZWAgZmxhZyBzZXQgdG8gYHRydWVgIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFuIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo1Mi42MzkyNjQwODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzg0NDkxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJjcHVfZG93bl9yZWFkLip0cnVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XFx0XFx0cmV0ID0gX19wZXJjcHVfZG93bl9yZWFkKHNlbSwgdHJ1ZSwgZmFsc2UpOyAvKiBVbmNvbmRpdGlvbmFsIG1lbW9yeSBiYXJyaWVyICovXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo1NS40Nzc3MTkyOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNDExMTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBsZXQncyBzZWUgaG93IGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCBhY3R1YWxseSB3b3Jrcy5cIiBJIHF1aWNrbHkgc2VlIHRoYXQgaXQgY2FsbHMgYF9fcGVyY3B1X2Rvd25fcmVhZGAuIFRoZW4sIEknbSB0aGlua2luZywgXCJyaWdodCwgYW5kIHdoYXQgYXJndW1lbnRzIGFyZSBiZWluZyBwYXNzZWQgdG8gdGhhdD9cIiBMb29raW5nIGF0IGl0IG5vdywgaXQncyBwcmV0dHkgY2xlYXI6IHRoZSBzZW1hcGhvcmUgKGBzZW1gKSwgdGhlIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGdvaW5nIHRvIHVzZSBgX19wZXJjcHVfZG93bl9yZWFkYCAoYGZhbHNlYCkgYW5kIHRoZSBgZnJlZXphYmxlYCBhcmd1bWVudC4gU28gaXQgbG9va3MgbGlrZSB3ZSdyZSBub3QgdXNpbmcgdGhlIGBfX3BlcmNwdV9kb3duX3JlYWRgIGZvciBvdXIgcHVycG9zZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgZmVlbCBvZiB3aGF0J3MgZ29pbmcgb24gYnkgbG9va2luZyBhdCB0aGUgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjowNC42MTE4MzQxNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTM0NzgwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD00Nj1leHRlcm4gYm9vbCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKiwgYm9vbCwgYm9vbCk7XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00Ny1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjQ4OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00OS1cXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZnJlZXphYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzYte1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Nzc6XFx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZhbHNlKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgyLXtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlxcdHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjowNi4xNjUzMjE0NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MTM3NTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9sbG93aW5nIHRoZSBmbG93IGhlcmUuIEkgc2VlIHRoYXQgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBpcyBjYWxsaW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZnJlZXplKWAuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gT2theSwgZ290IGl0LlxuXG5Ob3csIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBiZWNhdXNlIGBfX3NiX3N0YXJ0X3dyaXRlYCBjYWxscyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBUaGlzIGlzIHByb2JhYmx5IHNpZ25pZmljYW50IHRvIG15IGN1cnJlbnQgZGVidWdnaW5nIHNlc3Npb24gYW5kIGl0IG1pZ2h0IGJlIGEgYm90dGxlbmVjay4gU2luY2UgaXQgaXMsIEkgbmVlZCB0byBrbm93IHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsIHNpdGVzIG9mIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAgaW4gdGhlIGNvZGUuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIGRyYXdpbmcgYW55IGNvbmNsdXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjEzLjQ1NjcwMDQ5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzg4NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy9zdXBlci5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NiX3N0YXJ0X3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBsZXZlbClcXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMTgte1xcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaDoxOTpcXHRwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzYi1cXHUwMDNlc193cml0ZXJzLnJ3X3NlbSArIGxldmVsIC0gMSwgdHJ1ZSk7XFxuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oLTIwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzktXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJlZXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoxNC45ODQ2MDI3MjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExODcxMDU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgd3JpdGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5J3JlIGluaXRpYXRlZC4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBfX3NiX3N0YXJ0X3dyaXRlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gd2UncmUgdHJhY2tpbmcuIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGEgZmV3IG90aGVyIGtleSBmdW5jdGlvbnMg4oCTIGBzYl9zdGFydF93cml0ZWAsIGBzYl9zdGFydF9wYWdlZmF1bHRgLCBhbmQgYHNiX3N0YXJ0X2ludHdyaXRlYCDigJMgYWxsIGhlYXZpbHkgaW1wbGljYXRlZCB3aXRoaW4gdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykuIFRoYXQgYWxvbmUgbWFrZXMgdGhpcyBhIGNyaXRpY2FsIGFyZWEgdG8gdW5kZXJzdGFuZCwgYmVjYXVzZSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGluIFZGUyBhcmUgKmFsd2F5cyoga2V5LlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24uIFdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIHN3aXRjaGVzIGZyb20gc2V0dGluZyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBiZWhhdmlvci4gV2UncmUgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvY2sgc2VtYW50aWNzIHdpdGhpbiB0aGUga2VybmVsLCBpbXBhY3RpbmcgaG93IHRhc2tzIGFyZSBzY2hlZHVsZWQgYW5kIHBvdGVudGlhbGx5IHRoZWlyIGFiaWxpdHkgdG8gcmVzcG9uZCB0byBpbnRlcnJ1cHRzLiBUaGlzIGNoYW5nZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIHN5c3RlbSwgc28gaXQncyBhIGh1Z2UgY2FuZGlkYXRlIGZvciByZWdyZXNzaW9uIHRlc3RpbmcuXG5cbkNvbnNpZGVyaW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgc2hpZnQgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UnbGwgbmVlZCB0byB0aHJvdyBldmVyeXRoaW5nIHdlJ3ZlIGdvdCBhdCBpdC5cblxuQXMgZm9yIGZvY3VzIHN5bWJvbHMsIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIG9uZSBJJ2xsIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by5cblxuRmluYWxseSwgSSBkb24ndCBzZWUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IHNpbXBsZXIuIExldCdzIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCB0aGlzIGFuYWx5c2lzIGRvY3VtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzE3MTExMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcGVyY3B1X2Rvd25fcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3BlcmNwdV9kb3duX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjI2LjE3MTc0MDM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTkxNTYwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzIxODI3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1MTg3MDk3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuQEAgLTE1Nyw4ICsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcixcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZW0tXHUwMDNld2FpdGVycy5sb2NrKTtcbiBcbiBcdHdoaWxlICh3YWl0KSB7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcbi1cdFx0XHRcdCAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpO1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzIxODM0OTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MTg2ODY1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQZXItQ1BVIFJlYWQtV3JpdGUgU2VtYXBob3JlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGVyY3B1X3J3c2VtX3dhaXRgIHdpdGhpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgc2V0X2N1cnJlbnRfc3RhdGVgIGNhbGwuIEluaXRpYWxseSwgaXQgc2V0cyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEVgIHdpdGggYW4gb3B0aW9uYWwgYFRBU0tfRlJFRVpBQkxFYCBiaXQsIGRlcGVuZGluZyBvbiBhIGBmcmVlemVgIGZsYWcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzIHRvIGVpdGhlciBgKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKWAgaWYgYGZyZWV6ZWAgaXMgdHJ1ZSBvciBqdXN0IGBUQVNLX1VOSU5URVJSVVBUSUJMRWAgb3RoZXJ3aXNlLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBsb2NraW5nIGFuZCBzY2hlZHVsaW5nIG1vZGlmaWNhdGlvbiwgYSBjaGFuZ2UgaW4gaG93IGEgdGFzayB3YWl0cyBmb3IgYSByZXNvdXJjZS4gSW1wb3J0YW50bHksIHRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaGVyZS4gSXQncyBzb2xlbHkgYWJvdXQgdGFzayBzdGF0ZSwgYW5kIHNvIGFueSBjb25jZXJucywgbGlrZSBsb2NrZGVwIGlzc3Vlcywgc2NoZWR1bGluZyBpbXBhY3RzIG9yIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLCBhcmUgYWxsIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2V0Yy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6XG5cbmBgYGNcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfFxuLVx0XHRcdFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG5gYGBcblxuWWVhaCwgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHRob3VnaHQuIE5vIHdheSB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSBleGlzdGluZyBpbnN0cnVtZW50YXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjM4LjY5MDg3Mjg3NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 16:09:21 +0000 UTC FinishedAt: 2026-08-07 16:12:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "series_id": "879df8d7-8aa9-4e49-a747-3d940ed52963" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__percpu_down_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcbmluZGV4IGY3ZTE1MmM0MGQ2ZDAuLjU3ZTI0ZmRjMDIwMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcbkBAIC0xNTcsOCAmIzQzOzE1Nyw3IEBAIHN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlbS1cdTAwM2V3YWl0ZXJzLmxvY2spO1xuIFxuIFx0d2hpbGUgKHdhaXQpIHtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfFxuLVx0XHRcdFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwppbmRleCBmN2UxNTJjNDBkNmQwLi41N2UyNGZkYzAyMDM2IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYwpAQCAtMTU3LDggJiM0MzsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlciwKIAlzcGluX3VubG9ja19pcnEoJmFtcDtzZW0tJmd0O3dhaXRlcnMubG9jayk7CiAKIAl3aGlsZSAod2FpdCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlpZiAoIXNtcF9sb2FkX2FjcXVpcmUoJmFtcDt3cV9lbnRyeS5wcml2YXRlKSkKIAkJCWJyZWFrOwogCQlzY2hlZHVsZSgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBMb2NraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogYSBzdGF0ZSB0cmFuc2l0aW9uIGluIGBwZXJjcHVfcndzZW1fd2FpdGAuICBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIGlzIG1vZGlmeWluZyBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBJbnN0ZWFkIG9mIHVzaW5nIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCByZWdhcmRsZXNzIG9mIHRoZSBgZnJlZXplYCBmbGFnLCBpdCYjMzk7cyBub3cgY29uZGl0aW9uYWwuICBXaGVuIGBmcmVlemVgIGlzIHRydWUsIHRoZSBzdGF0ZSBiZWNvbWVzIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAsIG90aGVyd2lzZSBpdCByZW1haW5zIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAuCgpSaWdodCwgc28gZnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBmdW5kYW1lbnRhbCBsb2NraW5nIG1lY2hhbmlzbSBpdHNlbGYgd2l0aGluIHRoZSBrZXJuZWwuIEl0JiMzOTtzIG5vdCBqdXN0IGEgc3VwZXJmaWNpYWwgdHdlYWs7IGl0IGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIGBwZXJjcHVfcndzZW1fd2FpdGAuICBUaGlzIHN0YXRlIHRyYW5zaXRpb24sIHBhcnRpY3VsYXJseSB0aGUgc2hpZnQgdG8gYFRBU0tfSURMRWAgdW5kZXIgZnJlZXppbmcgY29uZGl0aW9ucywgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLgoKR2l2ZW4gaXRzIGltcGFjdCBvbiBhIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnQsIGBwZXJjcHVfcndzZW1fd2FpdGAsIEkga25vdyB0aGlzIGRlZmluaXRlbHkgbmVlZHMgYSBnb29kIGZ1enppbmcgcnVuLiAgV2UgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2UgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgdmFyaW91cyBzdHJlc3MgY29uZGl0aW9ucy4gSXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBwZXJjcHVfcndzZW1fd2FpdGAgZnVuY3Rpb24gaXRzZWxmIG5vdyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1X3J3c2VtX3dhaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTQwLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTQxOnN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTQyLVx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTE2OD1ib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3OC1cdHByZWVtcHRfZW5hYmxlKCk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxNzk6XHRwZXJjcHVfcndzZW1fd2FpdChzZW0sIC8qIC5yZWFkZXIgPSAqLyB0cnVlLCBmcmVlemUpO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTgwLVx0cHJlZW1wdF9kaXNhYmxlKCk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjI2PXZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0MS1cdFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI0MjpcdFx0cGVyY3B1X3J3c2VtX3dhaXQoc2VtLCAvKiAucmVhZGVyID0gKi8gZmFsc2UsIGZhbHNlKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0My1cdFx0Y29udGVuZGVkID0gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTUzCgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYHBlcmNwdV9yd3NlbV93YWl0YCBGdW5jdGlvbiBhbmQgaXRzIENhbGxlcnMqKgoKQWxyaWdodCwgc28gYHBlcmNwdV9yd3NlbV93YWl0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBvdXRzaWRlIGl0cyBkZWZpbmVkIHNjb3BlLiBOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzICp3aG8qIGNhbGxzIGl0LiBUaGUgdGV4dCBtZW50aW9ucyBpdCYjMzk7cyBjYWxsZWQgYnkgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGBwZXJjcHVfZG93bl93cml0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRob3NlIG5hbWVzIGFsb25lIHN1Z2dlc3Qgd2UgYXJlIGRlYWxpbmcgd2l0aCBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIG9wZXJhdGlvbnMuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRvIHRydWx5IGdyYXNwIHdoYXQmIzM5O3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgX19wZXJjcHVfZG93bl9yZWFkYCBhbmQgYHBlcmNwdV9kb3duX3dyaXRlYC4gVGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgaW52b2tlZCBieSBoaWdoZXItbGV2ZWwgY29kZS4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aG9zZSB0d28gZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTtyZSAqZG9pbmcqIGFuZCBob3cgdGhleSYjMzk7cmUgKnVzaW5nKiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGF0JiMzOTtsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcGVyY3B1X2Rvd25fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9mcmVlX3J3c2VtKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ3LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6NDg6c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ5LXtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTk3LVx0XHRwcmVlbXB0X2Rpc2FibGUoKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjk4Olx0XHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtOTktXHRcdHByZWVtcHRfZW5hYmxlKCk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MTQxPXN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE2Ny1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjE2ODpib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTY5LVx0XHRcdFx0Ym9vbCBmcmVlemUpXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNzAte1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTcxOlx0aWYgKF9fcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHNlbSkpXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNzItXHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4NC19XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxODU6RVhQT1JUX1NZTUJPTF9HUEwoX19wZXJjcHVfZG93bl9yZWFkKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ4PXN0YXRpYyBib29sIF9fcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtODMtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo4NDpzdGF0aWMgaW5saW5lIGJvb2wgX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9OTI9c3RhdGljIGJvb2wgX19wZXJjcHVfcndzZW1fdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcilcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMDItXHR9XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XHRyZXR1cm4gX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMDQtfVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTExOT1zdGF0aWMgaW50IHBlcmNwdV9yd3NlbV93YWtlX2Z1bmN0aW9uKHN0cnVjdCB3YWl0X3F1ZXVlX2VudHJ5ICp3cV9lbnRyeSxcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMjc6XHQvKiBjb25jdXJyZW50IGFnYWluc3QgcGVyY3B1X2Rvd25fd3JpdGUoKSwgY2FuIGdldCBzdG9sZW4gKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cdGlmICghX19wZXJjcHVfcndzZW1fdHJ5bG9jayhzZW0sIHJlYWRlcikpXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjI1LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjI3LXtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXHQgKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI0MDpcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0MS1cdFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDUtXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XHQvKiBzbXBfbWIoKSBpbXBsaWVkIGJ5IF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jaygpIG9uIHN1Y2Nlc3MgLS0gRCBtYXRjaGVzIEEgKi9cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0Ny1cbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNTgtfVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9kb3duX3dyaXRlKTtcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBJbXBsZW1lbnRhdGlvbioqCgpNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgd2UmIzM5O3ZlIGdvdCB0d28gZXhwb3J0ZWQgZnVuY3Rpb25zIGhlcmU6IGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBSaWdodCBhd2F5LCBteSBicmFpbiBnb2VzIHRvICYjMzQ7d2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBiZWluZyAqZXhwb3J0ZWQqPyYjMzQ7IEFyZSB0aGVyZSBhbnkgcHJlcmVxdWlzaXRlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCB0aGVpciBiZWhhdmlvciBvciBldmVuIHRoZWlyIGF2YWlsYWJpbGl0eT8KClRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZmlsZSYjMzk7cyBjb250ZW50cyBhcmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHVuY29uZGl0aW9uYWxseSwgb3IgaWYgaXRzIGluY2x1c2lvbiBpcyBjb250aW5nZW50IG9uIHRoZSBzZXR0aW5nIG9mIG9uZSBvciBtb3JlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIElmIHRoZXJlIGFyZSBjb25maWdzIGluIHBsYWNlLCB3aGF0IGFyZSB0aGV5PyBUaGF0IHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvcnRhYmlsaXR5IGFuZCBjb25kaXRpb25hbCB1c2Ugb2YgdGhlc2UgcGVyLUNQVSByZWFkLXdyaXRlIHNlbWFwaG9yZSBwcmltaXRpdmVzLiBUaGlzIGZpbGUgbGlrZWx5IGhvbGRzIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb21waWxlLXRpbWUgY29uZGl0aW9ucyBpcyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdS1yd3NlbS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2xvY2tpbmcvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9OT1DT05URVhUX0FOQUxZU0lTX3J3c2VtLm8gOj0geVxua2VybmVsL2xvY2tpbmcvTWFrZWZpbGUtMTAtXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZToxMTpvYmoteSAmIzQzOz0gbXV0ZXgubyBzZW1hcGhvcmUubyByd3NlbS5vIHBlcmNwdS1yd3NlbS5vXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZS0xMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBlci1DUFUgUmVhZC9Xcml0ZSBTZW1hcGhvcmUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIGJlaW5nIGNvbXBpbGVkIGluIHVuY29uZGl0aW9uYWxseSDigJMgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgKGBvYmoteSAmIzQzOz0gcGVyY3B1LXJ3c2VtLm9gKS4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgc28gaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIGJ1aWxkLiBUaGVuIEkgc2VlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYHBlcmNwdV9yd3NlbV93YWl0YC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbSB1c2VkIGJ5IGJvdGggYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGBwZXJjcHVfZG93bl93cml0ZWAuIFRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZSwgYXMgaXQgaW1wYWN0cyB0aGUgY29yZSByZWFkL3dyaXRlIHNlbWFwaG9yZSBmdW5jdGlvbmFsaXR5IGZvciBwZXItQ1BVIHZhcmlhYmxlcy4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBjb2RlIGhhbmRsZXMgYFRBU0tfSURMRWAgdmVyc3VzIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAgd2hlbiBgZnJlZXplYCBpcyBzZXQgdG8gdHJ1ZS4gTXkgaW50ZXJuYWwgYWxhcm1zIGFyZSBnb2luZyBvZmYg4oCTIGBmcmVlemVgIHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZWl0aGVyIGEgc3lzdGVtIHN1c3BlbmQvcmVzdW1lIG9yIG1heWJlIHNvbWUgY3JpdGljYWwgcGF0aCBkdXJpbmcgYSBkZWJ1Z2dpbmcgb3IgdHJhY2luZyBzY2VuYXJpby4gVGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIHdoZW4gYGZyZWV6ZWAgaXMgYWN0dWFsbHkgdHJ1ZS4gSXQgYXBwZWFycyB0aGF0IGBmcmVlemVgIGdldHMgaXRzIHZhbHVlIGluIGEgY2FsbCB0byBgX19wZXJjcHVfZG93bl9yZWFkYCAodGhlIGRpcmVjdCBjYWxsKSwgb3IgYHBlcmNwdV9kb3duX3JlYWRgIChhIGNhbGwgdGhhdCBpbmRpcmVjdGx5IGNhbGxzIGBfX3BlcmNwdV9kb3duX3JlYWRgLikKClRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgYF9fcGVyY3B1X2Rvd25fcmVhZGAgd2l0aCBgZnJlZXplPXRydWVgIG9yIGBwZXJjcHVfZG93bl9yZWFkYCB3aXRoIGBmcmVlemU9dHJ1ZWAuIFRyYWNpbmcgdGhvc2UgY2FsbHMgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgVEFTS19JRExFYCBhbmQgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLCBiZWNhdXNlIHRoYXQgY2FsbCBjaGFpbiAqaXMqIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQuKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05Ni1cdGVsc2VcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XHRcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cdHByZWVtcHRfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MDcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBQZXItQ1BVIFJlYWRlci9Xcml0ZXIgU2VtYXBob3JlcyoqCgpPa2F5LCBob2xkIG9uIGEgbWludXRlLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGl0JiMzOTtzIHRha2luZyBgYm9vbCB0cnksIGJvb2wgZnJlZXplYCBhcyBhcmd1bWVudHMuIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aG9zZSBmbGFncyBhcmUgZm9yLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhpcywgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGRlZmluaXRpb24gb2YgYHBlcmNwdV9kb3duX3JlYWRgLiBMZXQgbWUgcXVpY2tseSBqdW1wIG92ZXIgdG8gYGluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmhgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGhvdyB0aGVzZSBwZXItQ1BVIHJlYWRlci93cml0ZXIgc2VtYXBob3JlcyB3b3JrLCBhbmQgdGhvc2UgcGFyYW1ldGVycyBhcmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl9yZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTMyPWlzX3N0YXRpYyBzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSBuYW1lID0ge1x0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ1LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0NjpleHRlcm4gYm9vbCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKiwgYm9vbCwgYm9vbCk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ3LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0ODpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00OS1cdFx0XHRcdFx0ICAgICBib29sIGZyZWV6YWJsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTY2LVx0ZWxzZVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo2NzpcdFx0X19wZXJjcHVfZG93bl9yZWFkKHNlbSwgZmFsc2UsIGZyZWV6YWJsZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNjgtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzQtXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc1OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc2LXtcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Nzc6XHRwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZmFsc2UpO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OC19XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZyZWV6ZSk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODUtXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjg2OnN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODcte1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTEtXHQvKlxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo5MjpcdCAqIFNhbWUgYXMgaW4gcGVyY3B1X2Rvd25fcmVhZCgpLlxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05My1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXHRlbHNlXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjk3Olx0XHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWQoc2VtLCB0cnVlLCBmYWxzZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTgtXHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfdXBfcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTE3LVx0LypcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTE4Olx0ICogU2FtZSBhcyBpbiBwZXJjcHVfZG93bl9yZWFkKCkuXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTExOS1cdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTMyPURFRklORV9HVUFSRChwZXJjcHVfcmVhZCwgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKixcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTMzOlx0ICAgICBwZXJjcHVfZG93bl9yZWFkKF9UKSwgcGVyY3B1X3VwX3JlYWQoX1QpKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMzQ6REVGSU5FX0dVQVJEX0NPTkQocGVyY3B1X3JlYWQsIF90cnksIHBlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhfVCkpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzNS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgY29kZSBwYXRoLiBJIHNlZSB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhpcyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVhZC1zaWRlIGxvY2tpbmcgbWVjaGFuaXNtIHRoYXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgZnJlZXplLWF3YXJlLCBzcGVjaWZpY2FsbHkgb3BlcmF0aW5nIG9uIHBlci1DUFUgZGF0YS4mIzM0OyBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGRlc2NyaXB0aXZlOyBJIGhhdmUgYSBnb29kIGlkZWEgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbi4KCk5vdywgd2hlcmUgZG9lcyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGFjdHVhbGx5ICpnbyo/IEFoYSwgaXQgY2FsbHMgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSB3b3JrLiBTbywgdGhpcyB3cmFwcGVyIGxpa2VseSBoYW5kbGVzIHNvbWUgcHJlLSBvciBwb3N0LXByb2Nlc3NpbmcgZm9yIGZyZWV6ZSBoYW5kbGluZy4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyB0aGUgbW9yZSBpbnRlcmVzdGluZyBvbmU6IHdobyBhY3R1YWxseSAqdXNlcyogYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNydWNpYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aHkgdGhpcyBjb2RlIGV4aXN0cyBhbmQgd2hhdCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFyZS4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgb2YgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mcy9zdXBlci5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NiX3N0YXJ0X3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBsZXZlbClcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaC0xOC17XG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmg6MTk6XHRwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzYi1cdTAwM2VzX3dyaXRlcnMucndfc2VtICYjNDM7IGxldmVsIC0gMSwgdHJ1ZSk7XG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMjAtfVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc5LVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXHRcdFx0XHRcdCAgICAgIGJvb2wgZnJlZXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZGUyBXcml0ZSBQcm90ZWN0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGF0dGVudGlvbiBpcyBkcmF3biB0byBgX19zYl9zdGFydF93cml0ZWAuIFRoYXQgZnVuY3Rpb24gaXMgY2FsbGluZyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLCBhbmQgdGhhdCYjMzk7cyAqdGhlKiBjb3JlIG9mIHRoZSBWRlMmIzM5O3Mgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc20sIGlzbiYjMzk7dCBpdD8gYHNiX3N0YXJ0X3dyaXRlYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYWxsIHJlbHkgb24gdGhpcy4gU28sIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIGNsZWFybHkgYSBjcml0aWNhbCBwaWVjZSB3aXRoaW4gdGhlIFZGUy4KClRoZSBtZWF0IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLCBlc3BlY2lhbGx5IHNpbmNlIGBUQVNLX0lETEVgIGltcGFjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9ucyBhbmQgd2hvIGtub3dzIHdoYXQgb3RoZXIgdGFzayBzdGF0ZS1kZXBlbmRlbnQgY29kZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGlzc3Vlcywgc28gSSB0aGluayBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgY2hhbmdlcy4KCkxldCYjMzk7cyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGBwZXJjcHVfZG93bl93cml0ZWAsIGp1c3QgdG8gZ2V0IGEgYnJvYWRlciB2aWV3IG9mIGhvdyBpdCYjMzk7cyB1c2VkLiBUaGlzIGNoYW5nZSBsaWtlbHkgaGFzIHNvbWUgaW1wYWN0IG9uIGl0cyB1c2FnZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2xvY2tpbmcvcGVyY3B1LXJ3LXNlbWFwaG9yZS5yc3Q9MjM9VGhlIGxvY2sgaXMgbG9ja2VkIGZvciByZWFkIHdpdGggcGVyY3B1X2Rvd25fcmVhZCwgcGVyY3B1X3VwX3JlYWQgYW5kXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvcGVyY3B1LXJ3LXNlbWFwaG9yZS5yc3Q6MjQ6Zm9yIHdyaXRlIHdpdGggcGVyY3B1X2Rvd25fd3JpdGUsIHBlcmNwdV91cF93cml0ZS5cbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdC0yNS1cbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz0xODU9dm9pZCBoY2lfdWFydF9pbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTE5Ny1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjE5ODpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy0xOTktXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXHUwMDI2aHUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTU0OD1zdGF0aWMgdm9pZCBoY2lfdWFydF90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjYtXHRpZiAocHJvdG9fcmVhZHkpIHtcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjU2NzpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjgtXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXHUwMDI2aHUtXHUwMDNlZmxhZ3MpO1xuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTY3MD1zdGF0aWMgaW50IGhjaV91YXJ0X3JlZ2lzdGVyX2RldihzdHJ1Y3QgaGNpX3VhcnQgKmh1KVxuLS1cbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTcyOC1cdFx0QlRfRVJSKFwmIzM0O0NhbiYjMzk7dCByZWdpc3RlciBIQ0kgZGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jOjcyOTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2aHUtXHUwMDNlcHJvdG9fbG9jayk7XG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy03MzAtXHRcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19JTklULCBcdTAwMjZodS1cdTAwM2VmbGFncyk7XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTg4Nj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3dyaXRlcGFnZXNfZG93bl93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvZXh0NC9leHQ0LmgtMTg4Ny17XG5mcy9leHQ0L2V4dDQuaDoxODg4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc193cml0ZXBhZ2VzX3J3c2VtKTtcbmZzL2V4dDQvZXh0NC5oLTE4ODktXHRyZXR1cm4gbWVtYWxsb2Nfbm9mc19zYXZlKCk7XG4tLVxuZnMvbG9ja3MuYz0zMDk4PXN0YXRpYyB2b2lkICpsb2Nrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKVxuLS1cbmZzL2xvY2tzLmMtMzEwMy1cdGl0ZXItXHUwMDNlbGlfcG9zID0gKnBvcyAmIzQzOyAxO1xuZnMvbG9ja3MuYzozMTA0Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZmlsZV9yd3NlbSk7XG5mcy9sb2Nrcy5jLTMxMDUtXHRzcGluX2xvY2soXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xuLS1cbmZzL3Byb2Mva2NvcmUuYz0yNzI9c3RhdGljIGludCBrY29yZV91cGRhdGVfcmFtKHZvaWQpXG4tLVxuZnMvcHJvYy9rY29yZS5jLTI3OC1cbmZzL3Byb2Mva2NvcmUuYzoyNzk6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZrY2xpc3RfbG9jayk7XG5mcy9wcm9jL2tjb3JlLmMtMjgwLVx0aWYgKCF4Y2hnKFx1MDAyNmtjb3JlX25lZWRfdXBkYXRlLCAwKSlcbi0tXG5mcy9zdXBlci5jPTE3OTQ9c3RhdGljIHZvaWQgc2Jfd2FpdF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXG5mcy9zdXBlci5jLTE3OTUte1xuZnMvc3VwZXIuYzoxNzk2Olx0cGVyY3B1X2Rvd25fd3JpdGUoc2ItXHUwMDNlc193cml0ZXJzLnJ3X3NlbSAmIzQzOyBsZXZlbC0xKTtcbmZzL3N1cGVyLmMtMTc5Ny19XG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMjg9ZXh0ZXJuIGJvb2wgcGVyY3B1X2lzX3JlYWRfbG9ja2VkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMjk6ZXh0ZXJuIHZvaWQgcGVyY3B1X2Rvd25fd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKik7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzMC1leHRlcm4gdm9pZCBwZXJjcHVfdXBfd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKik7XG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMzY9REVGSU5FX0dVQVJEKHBlcmNwdV93cml0ZSwgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKixcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTM3Olx0ICAgICBwZXJjcHVfZG93bl93cml0ZShfVCksIHBlcmNwdV91cF93cml0ZShfVCkpXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzOC1cbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTEzMTY9dm9pZCBjZ3JvdXBfZmF2b3JfZHlubW9kcyhzdHJ1Y3QgY2dyb3VwX3Jvb3QgKnJvb3QsIGJvb2wgZmF2b3IpXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xMzMxLVx0ICovXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjEzMzI6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZjZ3JvdXBfdGhyZWFkZ3JvdXBfcndzZW0pO1xua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0xMzMzLVx0aWYgKGZhdm9yIFx1MDAyNlx1MDAyNiAhZmF2b3JpbmcpIHtcbi0tXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTI1MzI9dm9pZCBjZ3JvdXBfYXR0YWNoX2xvY2soZW51bSBjZ3JvdXBfYXR0YWNoX2xvY2tfbW9kZSBsb2NrX21vZGUsXG4tLVxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0yNTQwLVx0Y2FzZSBDR1JQX0FUVEFDSF9MT0NLX0dMT0JBTDpcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmM6MjU0MTpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2Y2dyb3VwX3RocmVhZGdyb3VwX3J3c2VtKTtcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMjU0Mi1cdFx0YnJlYWs7XG4tLVxua2VybmVsL2NwdS5jPTUwNj12b2lkIGNwdXNfd3JpdGVfbG9jayh2b2lkKVxua2VybmVsL2NwdS5jLTUwNy17XG5rZXJuZWwvY3B1LmM6NTA4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2Y3B1X2hvdHBsdWdfbG9jayk7XG5rZXJuZWwvY3B1LmMtNTA5LX1cbi0tXG5rZXJuZWwvZXZlbnRzL2h3X2JyZWFrcG9pbnQuYz0xMTU9c3RhdGljIHN0cnVjdCBtdXRleCAqYnBfY29uc3RyYWludHNfbG9jayhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApXG4tLVxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTMyLVx0fSBlbHNlIHtcbmtlcm5lbC9ldmVudHMvaHdfYnJlYWtwb2ludC5jOjEzMzpcdFx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2YnBfY3B1aW5mb19zZW0pO1xua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTM0LVx0fVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTEyNzI9cmVnaXN0ZXJfZm9yX2VhY2hfdm1hKHN0cnVjdCB1cHJvYmUgKnVwcm9iZSwgc3RydWN0IHVwcm9iZV9jb25zdW1lciAqbmV3KVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzctXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoxMjc4Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2ZHVwX21tYXBfc2VtKTtcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzktXHRpbmZvID0gYnVpbGRfbWFwX2luZm8odXByb2JlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyxcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jPTg1ND1fX2FjcXVpcmVzKHBjcHVfcndzZW0pXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTg1NS17XG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jOjg1NjpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnBjcHVfcndzZW0pO1xua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYy04NTctXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz00OD1zdGF0aWMgYm9vbCBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6ODQ6c3RhdGljIGlubGluZSBib29sIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtODUte1xuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTkyPXN0YXRpYyBib29sIF9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIpXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVx0fVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTAzOlx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTA0LX1cbi0tXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTI2LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3Olx0LyogY29uY3VycmVudCBhZ2FpbnN0IHBlcmNwdV9kb3duX3dyaXRlKCksIGNhbiBnZXQgc3RvbGVuICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjgtXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTIxMT1zdGF0aWMgYm9vbCByZWFkZXJzX2FjdGl2ZV9jaGVjayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuLS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNS1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjIyNjp2b2lkIF9fc2NoZWQgcGVyY3B1X2Rvd25fd3JpdGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjM5LVx0ICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDA6XHRpZiAoIV9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pKSB7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXHRcdHRyYWNlX2NvbnRlbnRpb25fYmVnaW4oc2VtLCBMQ0JfRl9QRVJDUFUgfCBMQ0JfRl9XUklURSk7XG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ1LVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQ2Olx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDctXG4tLVxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjI1OTpFWFBPUlRfU1lNQk9MX0dQTChwZXJjcHVfZG93bl93cml0ZSk7XG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNjAtXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz00NTgwPXN0YXRpYyB2b2lkIHNjeF9jZ3JvdXBfbG9jayh2b2lkKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4Mi0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo0NTgzOlx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy00NTg0LSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTkwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2Rpc2FibGUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxuLS1cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTkyOC1cdG11dGV4X2xvY2soXHUwMDI2c2N4X2VuYWJsZV9tdXRleCk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjU5Mjk6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZzY3hfZm9ya19yd3NlbSk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTU5MzAtXHRzY3hfY2dyb3VwX2xvY2soKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTYwNjA9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZGlzYWJsZShzdHJ1Y3Qgc2N4X3NjaGVkICpzY2gpXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy02MTA3LVx0ICovXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjYxMDg6XHRwZXJjcHVfZG93bl93cml0ZShcdTAwMjZzY3hfZm9ya19yd3NlbSk7XG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTYxMDktXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYz03MDkwPXN0YXRpYyB2b2lkIHNjeF9yb290X2VuYWJsZV93b3JrZm4oc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTcyNzMtXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzI3NDpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzI3NS1cbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTczNzctXHQgKi9cbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzM3ODpcdHBlcmNwdV9kb3duX3dyaXRlKFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzM3OS1cdHNjeF90YXNrX2l0ZXJfc3RhcnQoXHUwMDI2c3RpLCBOVUxMKTtcbi0tXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTc1MDg9c3RhdGljIHZvaWQgc2N4X3N1Yl9lbmFibGVfd29ya2ZuKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03NjA1LVxua2VybmVsL3NjaGVkL2V4dC9leHQuYzo3NjA2Olx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xua2VybmVsL3NjaGVkL2V4dC9leHQuYy03NjA3LVx0c2N4X2Nncm91cF9sb2NrKCk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yNTk9dm9pZCBtZW1faG90cGx1Z19iZWdpbih2b2lkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjYxLVx0Y3B1c19yZWFkX2xvY2soKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjYyOlx0cGVyY3B1X2Rvd25fd3JpdGUoXHUwMDI2bWVtX2hvdHBsdWdfbG9jayk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDY0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQZXItQ1BVIFJXU0VNIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBwZXJjcHVfZG93bl93cml0ZWAsIHdoaWNoLCBsZXQmIzM5O3MgYmUgaG9uZXN0LCBpcyB1c2VkIGFsbCBvdmVyIHRoZSBwbGFjZS4gVGhlIGNydXggb2YgdGhlIGNoYW5nZSBpcyB0aGlzOiBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHRhc2sgc3RhdGUgdG8gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIGR1cmluZyBhIGZyZWV6ZSwgaXQmIzM5O3Mgbm93IGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAuIFRoYXQmIzM5O3MgdGhlIHN1cmZhY2UtbGV2ZWwgZGlmZmVyZW5jZSwgYnV0IHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKUmlnaHQsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIGhvdyB0aGlzIGFsbCBjb25uZWN0cy4gVGhlIHJlbGV2YW50IHBhcnQgb2YgYHBlcmNwdV9kb3duX3dyaXRlYCBpcyB0aGF0IGl0IGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdChzZW0sIGZhbHNlLCBmYWxzZSlgLiBTbyB0aGUgYGZyZWV6ZWAgZmxhZyB3ZSYjMzk7cmUgY2hhbmdpbmcgaXMgYGZhbHNlYCBoZXJlLiBUaGlzIGNoYW5nZSB3b3VsZCAqb25seSogYWZmZWN0IGBwZXJjcHVfcndzZW1fd2FpdGAgd2hlbiBgZnJlZXplYCBpcyBhY3R1YWxseSBzZXQgdG8gYHRydWVgLiBIbW0sIHdobyBldmVuIGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdGAgd2l0aCBgZnJlZXplPXRydWVgPwoKQWhhISBMb29raW5nIGF0IHRoZSBjYWxscywgYF9fcGVyY3B1X2Rvd25fcmVhZGAgY2FsbHMgYHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgdHJ1ZSwgZnJlZXplKWAuIFNvLCB0aGF0JiMzOTtzIHRoZSBrZXkuIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjdXJyZW50IGNvZGUgd2hlcmUgdGhpcyBjb25kaXRpb24gY2FuIGJlIHRydWUuIE9rYXksIHRyYWNraW5nIHRoaXMgYmFjaywgSSBzZWUgdGhhdCBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyBjYWxsZWQgYnkgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCwgd2hpY2ggaXMgaW4gdHVybiBjYWxsZWQgYnkgYF9fc2Jfc3RhcnRfd3JpdGVgLiBFeGNlbGxlbnQuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50OiBgX19zYl9zdGFydF93cml0ZWAgaXMgdGhlIG1haW4gdGhpbmcgdG8gZm9jdXMgb24gaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LgoKU28sIHRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmb2N1c2VkIG9uIGBfX3BlcmNwdV9kb3duX3JlYWRgLCBhcyBJIHN1c3BlY3RlZC4gTm93IEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSB3aWxsIGxvb2sgZm9yIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgYF9fcGVyY3B1X2Rvd25fcmVhZGAgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBgZnJlZXplYCBmbGFnIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG92ZXJsb29rIGFuIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQuKnRydWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05Ni1cdGVsc2VcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XHRcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cdHByZWVtcHRfZW5hYmxlKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTY1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGxldCYjMzk7cyBzZWUgaG93IGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCBhY3R1YWxseSB3b3Jrcy4mIzM0OyBJIHF1aWNrbHkgc2VlIHRoYXQgaXQgY2FsbHMgYF9fcGVyY3B1X2Rvd25fcmVhZGAuIFRoZW4sIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7cmlnaHQsIGFuZCB3aGF0IGFyZ3VtZW50cyBhcmUgYmVpbmcgcGFzc2VkIHRvIHRoYXQ/JiMzNDsgTG9va2luZyBhdCBpdCBub3csIGl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhlIHNlbWFwaG9yZSAoYHNlbWApLCB0aGUgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgd2UmIzM5O3JlIGdvaW5nIHRvIHVzZSBgX19wZXJjcHVfZG93bl9yZWFkYCAoYGZhbHNlYCkgYW5kIHRoZSBgZnJlZXphYmxlYCBhcmd1bWVudC4gU28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbm90IHVzaW5nIHRoZSBgX19wZXJjcHVfZG93bl9yZWFkYCBmb3Igb3VyIHB1cnBvc2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGZlZWwgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBieSBsb29raW5nIGF0IHRoZSBkb2N1bWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NDY9ZXh0ZXJuIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosIGJvb2wsIGJvb2wpO1xuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00Ny1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NDg6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDktXHRcdFx0XHRcdCAgICAgYm9vbCBmcmVlemFibGUpXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03Ni17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc3Olx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZhbHNlKTtcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzgtfVxuLS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZyZWV6ZSk7XG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGZsb3cgaGVyZS4gSSBzZWUgdGhhdCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGlzIGNhbGxpbmcgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbi4gT2theSwgZ290IGl0LgoKTm93LCBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGJlY2F1c2UgYF9fc2Jfc3RhcnRfd3JpdGVgIGNhbGxzIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAuIFRoaXMgaXMgcHJvYmFibHkgc2lnbmlmaWNhbnQgdG8gbXkgY3VycmVudCBkZWJ1Z2dpbmcgc2Vzc2lvbiBhbmQgaXQgbWlnaHQgYmUgYSBib3R0bGVuZWNrLiBTaW5jZSBpdCBpcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgZWxzZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgd2lsbCBjaGVjayBmb3IgYW55IG90aGVyIGNhbGwgc2l0ZXMgb2YgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBpbiB0aGUgY29kZS4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIGl0cyB1c2FnZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZnMvc3VwZXIuaD0xNz1zdGF0aWMgaW5saW5lIHZvaWQgX19zYl9zdGFydF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMTgte1xuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oOjE5Olx0cGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc2ItXHUwMDNlc193cml0ZXJzLnJ3X3NlbSAmIzQzOyBsZXZlbCAtIDEsIHRydWUpO1xuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oLTIwLX1cbi0tXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTc1PXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXG4tLVxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6ODA6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgxLVx0XHRcdFx0XHQgICAgICBib29sIGZyZWV6ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwODQKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipEaXZpbmcgaW50byBLZXJuZWwgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHdyaXRlIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgdGhleSYjMzk7cmUgaW5pdGlhdGVkLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBfX3NiX3N0YXJ0X3dyaXRlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gd2UmIzM5O3JlIHRyYWNraW5nLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYSBmZXcgb3RoZXIga2V5IGZ1bmN0aW9ucyDigJMgYHNiX3N0YXJ0X3dyaXRlYCwgYHNiX3N0YXJ0X3BhZ2VmYXVsdGAsIGFuZCBgc2Jfc3RhcnRfaW50d3JpdGVgIOKAkyBhbGwgaGVhdmlseSBpbXBsaWNhdGVkIHdpdGhpbiB0aGUgVmlydHVhbCBGaWxlIFN5c3RlbSAoVkZTKS4gVGhhdCBhbG9uZSBtYWtlcyB0aGlzIGEgY3JpdGljYWwgYXJlYSB0byB1bmRlcnN0YW5kLCBiZWNhdXNlIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkgaW4gVkZTIGFyZSAqYWx3YXlzKiBrZXkuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24uIFdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIHN3aXRjaGVzIGZyb20gc2V0dGluZyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBiZWhhdmlvci4gV2UmIzM5O3JlIGVzc2VudGlhbGx5IGNoYW5naW5nIHRoZSBsb2NrIHNlbWFudGljcyB3aXRoaW4gdGhlIGtlcm5lbCwgaW1wYWN0aW5nIGhvdyB0YXNrcyBhcmUgc2NoZWR1bGVkIGFuZCBwb3RlbnRpYWxseSB0aGVpciBhYmlsaXR5IHRvIHJlc3BvbmQgdG8gaW50ZXJydXB0cy4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSByaXBwbGUgZWZmZWN0cyB0aHJvdWdob3V0IHRoZSBzeXN0ZW0sIHNvIGl0JiMzOTtzIGEgaHVnZSBjYW5kaWRhdGUgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4KCkNvbnNpZGVyaW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgc2hpZnQgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UmIzM5O2xsIG5lZWQgdG8gdGhyb3cgZXZlcnl0aGluZyB3ZSYjMzk7dmUgZ290IGF0IGl0LgoKQXMgZm9yIGZvY3VzIHN5bWJvbHMsIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIG9uZSBJJiMzOTtsbCB3YW50IHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8uCgpGaW5hbGx5LCBJIGRvbiYjMzk7dCBzZWUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IHNpbXBsZXIuIExldCYjMzk7cyB1c2UgYHNldC1yZXN1bHRzYCB0byBnZXQgdGhpcyBhbmFseXNpcyBkb2N1bWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19wZXJjcHVfZG93bl9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3BlcmNwdV9kb3duX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUga2VybmVsIGxvY2tpbmcgbWVjaGFuaXNtIChgcGVyY3B1X3J3c2VtX3dhaXRgKSB0byB1c2UgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCBpbnN0ZWFkIG9mIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoaXMgYWZmZWN0cyBsb2FkIGF2ZXJhZ2UgY2FsY3VsYXRpb24gYW5kIHRhc2sgc3RhdGUgaGFuZGxpbmcuIFRoZSBgZnJlZXplPXRydWVgIHBhdGggaXMgcHJpbWFyaWx5IHJlYWNoZWQgdmlhIGBfX3BlcmNwdV9kb3duX3JlYWRgIHRocm91Z2ggVkZTIHdyaXRlIHByb3RlY3Rpb24gbWVjaGFuaXNtcyAoYF9fc2Jfc3RhcnRfd3JpdGVgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YzY0NDliMDZmZTk2MGJiYTcxNzliMjdmOWNjMWFmMDRhMTViYWJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxNjoxMDo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMKQEAgLTE1Nyw4ICYjNDM7MTU3LDcgQEAgc3RhdGljIHZvaWQgcGVyY3B1X3J3c2VtX3dhaXQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIsCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VtLSZndDt3YWl0ZXJzLmxvY2spOwogCiAJd2hpbGUgKHdhaXQpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfAotCQkJCSAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpOwomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKCFzbXBfbG9hZF9hY3F1aXJlKCZhbXA7d3FfZW50cnkucHJpdmF0ZSkpCiAJCQlicmVhazsKIAkJc2NoZWR1bGUoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjcKCQkJCQkJCW91dHB1dDogMTkxCgkJCQkJCQl0aG91Z2h0czogMjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGVyY3B1X3J3c2VtX3dhaXRgIHdpdGhpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdGF0ZSBjaGFuZ2UsIHNwZWNpZmljYWxseSB0aGUgYHNldF9jdXJyZW50X3N0YXRlYCBjYWxsLiBJbml0aWFsbHksIGl0IHNldHMgdGhlIHRhc2sgc3RhdGUgdG8gYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCB3aXRoIGFuIG9wdGlvbmFsIGBUQVNLX0ZSRUVaQUJMRWAgYml0LCBkZXBlbmRpbmcgb24gYSBgZnJlZXplYCBmbGFnLiBUaGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhpcyB0byBlaXRoZXIgYChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSlgIGlmIGBmcmVlemVgIGlzIHRydWUgb3IganVzdCBgVEFTS19VTklOVEVSUlVQVElCTEVgIG90aGVyd2lzZS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhIGxvY2tpbmcgYW5kIHNjaGVkdWxpbmcgbW9kaWZpY2F0aW9uLCBhIGNoYW5nZSBpbiBob3cgYSB0YXNrIHdhaXRzIGZvciBhIHJlc291cmNlLiBJbXBvcnRhbnRseSwgdGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBwYXNzZWQgdG8gdXNlciBzcGFjZSwgb3IgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIEkmIzM5O20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBoZXJlLiBJdCYjMzk7cyBzb2xlbHkgYWJvdXQgdGFzayBzdGF0ZSwgYW5kIHNvIGFueSBjb25jZXJucywgbGlrZSBsb2NrZGVwIGlzc3Vlcywgc2NoZWR1bGluZyBpbXBhY3RzIG9yIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLCBhcmUgYWxsIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2V0Yy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgYWN0dWFsIGNvZGUgY2hhbmdlOgoKYGBgYwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSB8Ci0JCQkJICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpOwpgYGAKClllYWgsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGF0IEkgdGhvdWdodC4gTm8gd2F5IHRoaXMgcmVsYXRlcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSBleGlzdGluZyBpbnN0cnVtZW50YXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGFzayBzdGF0ZSBzZXQgZHVyaW5nIGBwZXJjcHVfcndzZW1fd2FpdGAgaW4gYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gSXQgY2hhbmdlcyB0aGUgc3RhdGUgZnJvbSBgVEFTS19VTklOVEVSUlVQVElCTEUgfCAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKWAgdG8gYGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRWAuIFRoaXMgaXMgYSBzY2hlZHVsaW5nIGFuZCBsb2NraW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3MsIHNjaGVkdWxpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgTE9DS0RFUCBvciBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1Ny42NTEyNTE0NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMzk2NTgzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19wZXJjcHVfZG93bl9yZWFkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGFzayBzdGF0ZSBzZXQgZHVyaW5nIGBwZXJjcHVfcndzZW1fd2FpdGAgaW4gYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gSXQgY2hhbmdlcyB0aGUgc3RhdGUgZnJvbSBgVEFTS19VTklOVEVSUlVQVElCTEUgfCAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKWAgdG8gYGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRWAuIFRoaXMgaXMgYSBzY2hlZHVsaW5nIGFuZCBsb2NraW5nIGNoYW5nZSB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzLCBvciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBkZWFkbG9ja3MsIHNjaGVkdWxpbmcgaXNzdWVzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgZGVidWdnaW5nIHRvb2xzIGxpa2UgTE9DS0RFUCBvciBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEwOjU3LjY1MTI1NjgzOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODE5NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGM2NDQ5YjA2ZmU5NjBiYmE3MTc5YjI3ZjljYzFhZjA0YTE1YmFiZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcXG5pbmRleCBmN2UxNTJjNDBkNmQwLi41N2UyNGZkYzAyMDM2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXFxuKysrIGIva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcXG5AQCAtMTU3LDggKzE1Nyw3IEBAIHN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlbS1cXHUwMDNld2FpdGVycy5sb2NrKTtcXG4gXFxuIFxcdHdoaWxlICh3YWl0KSB7XFxuLVxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcXG4tXFx0XFx0XFx0XFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuIFxcdFxcdGlmICghc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRzY2hlZHVsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1OC4wOTE3NDE5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODA3OTk5NTg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3BlcmNwdV9kb3duX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuQEAgLTE1Nyw4ICsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcixcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZW0tXHUwMDNld2FpdGVycy5sb2NrKTtcbiBcbiBcdHdoaWxlICh3YWl0KSB7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcbi1cdFx0XHRcdCAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpO1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMDo1OC4wOTE3NDMxNDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjM0NjI1MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBMb2NraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgc3RhdGUgdHJhbnNpdGlvbiBpbiBgcGVyY3B1X3J3c2VtX3dhaXRgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBpcyBtb2RpZnlpbmcgaG93IHRoZSB0YXNrIHN0YXRlIGlzIHNldC4gSW5zdGVhZCBvZiB1c2luZyBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgcmVnYXJkbGVzcyBvZiB0aGUgYGZyZWV6ZWAgZmxhZywgaXQncyBub3cgY29uZGl0aW9uYWwuICBXaGVuIGBmcmVlemVgIGlzIHRydWUsIHRoZSBzdGF0ZSBiZWNvbWVzIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAsIG90aGVyd2lzZSBpdCByZW1haW5zIGBUQVNLX1VOSU5URVJSVVBUSUJMRWAuXG5cblJpZ2h0LCBzbyBmdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIGZ1bmRhbWVudGFsIGxvY2tpbmcgbWVjaGFuaXNtIGl0c2VsZiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyBub3QganVzdCBhIHN1cGVyZmljaWFsIHR3ZWFrOyBpdCBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiBgcGVyY3B1X3J3c2VtX3dhaXRgLiAgVGhpcyBzdGF0ZSB0cmFuc2l0aW9uLCBwYXJ0aWN1bGFybHkgdGhlIHNoaWZ0IHRvIGBUQVNLX0lETEVgIHVuZGVyIGZyZWV6aW5nIGNvbmRpdGlvbnMsIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS5cblxuR2l2ZW4gaXRzIGltcGFjdCBvbiBhIGNyaXRpY2FsIGtlcm5lbCBjb21wb25lbnQsIGBwZXJjcHVfcndzZW1fd2FpdGAsIEkga25vdyB0aGlzIGRlZmluaXRlbHkgbmVlZHMgYSBnb29kIGZ1enppbmcgcnVuLiAgV2UgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2UgaW1wYWN0cyBjb25jdXJyZW5jeSBhbmQgcmVzcG9uc2l2ZW5lc3MgdW5kZXIgdmFyaW91cyBzdHJlc3MgY29uZGl0aW9ucy4gSXQgY291bGQgcG90ZW50aWFsbHkgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGVhZGxvY2tzLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggb3VyIGF0dGVudGlvbi4gTGV0J3MgZGVsdmUgaW50byB0aGUgYHBlcmNwdV9yd3NlbV93YWl0YCBmdW5jdGlvbiBpdHNlbGYgbm93IGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjA1LjMyNjM3MTg4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMDYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfcndzZW1fd2FpdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNDAtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTQxOnN0YXRpYyB2b2lkIHBlcmNwdV9yd3NlbV93YWl0KHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyLFxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE0Mi1cXHRcXHRcXHQgICAgICBib29sIGZyZWV6ZSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTE2OD1ib29sIF9fc2NoZWQgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgdHJ5LFxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTc4LVxcdHByZWVtcHRfZW5hYmxlKCk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTc5OlxcdHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgLyogLnJlYWRlciA9ICovIHRydWUsIGZyZWV6ZSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTgwLVxcdHByZWVtcHRfZGlzYWJsZSgpO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjI2PXZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQxLVxcdFxcdHRyYWNlX2NvbnRlbnRpb25fYmVnaW4oc2VtLCBMQ0JfRl9QRVJDUFUgfCBMQ0JfRl9XUklURSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQyOlxcdFxcdHBlcmNwdV9yd3NlbV93YWl0KHNlbSwgLyogLnJlYWRlciA9ICovIGZhbHNlLCBmYWxzZSk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQzLVxcdFxcdGNvbnRlbmRlZCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjA1LjM4MTY4OTExNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MDE2MzAzODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgdGhlIGBwZXJjcHVfcndzZW1fd2FpdGAgRnVuY3Rpb24gYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgc28gYHBlcmNwdV9yd3NlbV93YWl0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBleHBvc2VkIG91dHNpZGUgaXRzIGRlZmluZWQgc2NvcGUuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgKndobyogY2FsbHMgaXQuIFRoZSB0ZXh0IG1lbnRpb25zIGl0J3MgY2FsbGVkIGJ5IGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aG9zZSBuYW1lcyBhbG9uZSBzdWdnZXN0IHdlIGFyZSBkZWFsaW5nIHdpdGggcGVyLUNQVSByZWFkLXdyaXRlIHNlbWFwaG9yZSBvcGVyYXRpb25zLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUbyB0cnVseSBncmFzcCB3aGF0J3MgaGFwcGVuaW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBpbnZva2VkIGJ5IGhpZ2hlci1sZXZlbCBjb2RlLiBTbywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRob3NlIHR3byBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoZXkncmUgKmRvaW5nKiBhbmQgaG93IHRoZXkncmUgKnVzaW5nKiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGF0J2xsIHBhaW50IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBvdmVyYWxsIHBlci1DUFUgcmVhZC13cml0ZSBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTMsIk91dHB1dFRva2VucyI6NzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMC4yODMzMjI0OTlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwNDQ1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJjcHVfZG93bl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTQ2PUVYUE9SVF9TWU1CT0xfR1BMKHBlcmNwdV9mcmVlX3J3c2VtKTtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy00Ny1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo0ODpzdGF0aWMgYm9vbCBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTQ5LXtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jPTkyPXN0YXRpYyBib29sIF9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIpXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy05Ny1cXHRcXHRwcmVlbXB0X2Rpc2FibGUoKTtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzo5ODpcXHRcXHRyZXQgPSBfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTk5LVxcdFxcdHByZWVtcHRfZW5hYmxlKCk7XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xNDE9c3RhdGljIHZvaWQgcGVyY3B1X3J3c2VtX3dhaXQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCByZWFkZXIsXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xNjctXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTY4OmJvb2wgX19zY2hlZCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSwgYm9vbCB0cnksXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTY5LVxcdFxcdFxcdFxcdGJvb2wgZnJlZXplKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3MC17XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTcxOlxcdGlmIChfX3BlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzZW0pKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE3Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTE4NC19XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTg1OkVYUE9SVF9TWU1CT0xfR1BMKF9fcGVyY3B1X2Rvd25fcmVhZCk7XFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMC4zMzczNzE4ODdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDcyNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2Rvd25fd3JpdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9NDg9c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVxcdH1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XFx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEwNC19XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3OlxcdC8qIGNvbmN1cnJlbnQgYWdhaW5zdCBwZXJjcHVfZG93bl93cml0ZSgpLCBjYW4gZ2V0IHN0b2xlbiAqL1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMjUtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXFx0ICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQwOlxcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXFx0XFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0NS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XFx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ3LVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2Rvd25fd3JpdGUpO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTAuMzgyMTI1Nzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3Mzc1MDY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgUGVyLUNQVSBSZWFkLVdyaXRlIFNlbWFwaG9yZSBJbXBsZW1lbnRhdGlvbioqXG5cbk15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB3ZSd2ZSBnb3QgdHdvIGV4cG9ydGVkIGZ1bmN0aW9ucyBoZXJlOiBgX19wZXJjcHVfZG93bl9yZWFkYCBhbmQgYHBlcmNwdV9kb3duX3dyaXRlYC4gUmlnaHQgYXdheSwgbXkgYnJhaW4gZ29lcyB0byBcIndoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVpbmcgKmV4cG9ydGVkKj9cIiBBcmUgdGhlcmUgYW55IHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlaXIgYmVoYXZpb3Igb3IgZXZlbiB0aGVpciBhdmFpbGFiaWxpdHk/XG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZmlsZSdzIGNvbnRlbnRzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgdW5jb25kaXRpb25hbGx5LCBvciBpZiBpdHMgaW5jbHVzaW9uIGlzIGNvbnRpbmdlbnQgb24gdGhlIHNldHRpbmcgb2Ygb25lIG9yIG1vcmUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgdGhlcmUgYXJlIGNvbmZpZ3MgaW4gcGxhY2UsIHdoYXQgYXJlIHRoZXk/IFRoYXQgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG9ydGFiaWxpdHkgYW5kIGNvbmRpdGlvbmFsIHVzZSBvZiB0aGVzZSBwZXItQ1BVIHJlYWQtd3JpdGUgc2VtYXBob3JlIHByaW1pdGl2ZXMuIFRoaXMgZmlsZSBsaWtlbHkgaG9sZHMgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGUtdGltZSBjb25kaXRpb25zIGlzIGNydWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MTMuODU1ODc4ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODczMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1LXJ3c2VtLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9OT1DT05URVhUX0FOQUxZU0lTX3J3c2VtLm8gOj0geVxcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlLTEwLVxcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlOjExOm9iai15ICs9IG11dGV4Lm8gc2VtYXBob3JlLm8gcndzZW0ubyBwZXJjcHUtcndzZW0ub1xcbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlLTEyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMToxMy44OTk4NzI0MDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0MjI5ODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBlci1DUFUgUmVhZC9Xcml0ZSBTZW1hcGhvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgYmVpbmcgY29tcGlsZWQgaW4gdW5jb25kaXRpb25hbGx5IOKAkyB0aGF0J3MgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlIChgb2JqLXkgKz0gcGVyY3B1LXJ3c2VtLm9gKS4gTm8gY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaGVyZSwgc28gaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgYnVpbGQuIFRoZW4gSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgcGVyY3B1X3J3c2VtX3dhaXRgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGJlY2F1c2UgaXQncyB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZCBieSBib3RoIGBfX3BlcmNwdV9kb3duX3JlYWRgIGFuZCBgcGVyY3B1X2Rvd25fd3JpdGVgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGxvb2tpbmcgYXQgYSBmdW5kYW1lbnRhbCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBpc3N1ZSwgYXMgaXQgaW1wYWN0cyB0aGUgY29yZSByZWFkL3dyaXRlIHNlbWFwaG9yZSBmdW5jdGlvbmFsaXR5IGZvciBwZXItQ1BVIHZhcmlhYmxlcy5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGNvZGUgaGFuZGxlcyBgVEFTS19JRExFYCB2ZXJzdXMgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCB3aGVuIGBmcmVlemVgIGlzIHNldCB0byB0cnVlLiBNeSBpbnRlcm5hbCBhbGFybXMgYXJlIGdvaW5nIG9mZiDigJMgYGZyZWV6ZWAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBhIHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSBvciBtYXliZSBzb21lIGNyaXRpY2FsIHBhdGggZHVyaW5nIGEgZGVidWdnaW5nIG9yIHRyYWNpbmcgc2NlbmFyaW8uIFRoZSBrZXkgaXMgdW5kZXJzdGFuZGluZyB3aGVuIGBmcmVlemVgIGlzIGFjdHVhbGx5IHRydWUuIEl0IGFwcGVhcnMgdGhhdCBgZnJlZXplYCBnZXRzIGl0cyB2YWx1ZSBpbiBhIGNhbGwgdG8gYF9fcGVyY3B1X2Rvd25fcmVhZGAgKHRoZSBkaXJlY3QgY2FsbCksIG9yIGBwZXJjcHVfZG93bl9yZWFkYCAoYSBjYWxsIHRoYXQgaW5kaXJlY3RseSBjYWxscyBgX19wZXJjcHVfZG93bl9yZWFkYC4pXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hvIGlzIGNhbGxpbmcgYF9fcGVyY3B1X2Rvd25fcmVhZGAgd2l0aCBgZnJlZXplPXRydWVgIG9yIGBwZXJjcHVfZG93bl9yZWFkYCB3aXRoIGBmcmVlemU9dHJ1ZWAuIFRyYWNpbmcgdGhvc2UgY2FsbHMgd2lsbCBsaWtlbHkgcmV2ZWFsIHRoZSBleGFjdCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIGFuZCB3aHkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgVEFTS19JRExFYCBhbmQgYFRBU0tfVU5JTlRFUlJVUFRJQkxFYCBtYXR0ZXJzLiBUaGlzIGlzIHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLCBiZWNhdXNlIHRoYXQgY2FsbCBjaGFpbiAqaXMqIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTMxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjIxLjQ0MjE3NDAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjIxNzg5ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcGVyY3B1X2Rvd25fcmVhZC4qdHJ1ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD04Nj1zdGF0aWMgaW5saW5lIGJvb2wgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTk2LVxcdGVsc2VcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjk3OlxcdFxcdHJldCA9IF9fcGVyY3B1X2Rvd25fcmVhZChzZW0sIHRydWUsIGZhbHNlKTsgLyogVW5jb25kaXRpb25hbCBtZW1vcnkgYmFycmllciAqL1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTgtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjQuNjYzOTc1NTExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjgwNDM5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIFBlci1DUFUgUmVhZGVyL1dyaXRlciBTZW1hcGhvcmVzKipcblxuT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSSdtIGxvb2tpbmcgYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgYW5kIGl0J3MgdGFraW5nIGBib29sIHRyeSwgYm9vbCBmcmVlemVgIGFzIGFyZ3VtZW50cy4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhvc2UgZmxhZ3MgYXJlIGZvci4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMsIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBkZWZpbml0aW9uIG9mIGBwZXJjcHVfZG93bl9yZWFkYC4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oYCBhbmQgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFib3V0IGhvdyB0aGVzZSBwZXItQ1BVIHJlYWRlci93cml0ZXIgc2VtYXBob3JlcyB3b3JrLCBhbmQgdGhvc2UgcGFyYW1ldGVycyBhcmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjA3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguMDMyMDIyMjk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjUwOTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0zMj1pc19zdGF0aWMgc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTQ1LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NDY6ZXh0ZXJuIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosIGJvb2wsIGJvb2wpO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDctXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo0ODpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNDktXFx0XFx0XFx0XFx0XFx0ICAgICBib29sIGZyZWV6YWJsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNjYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Njc6XFx0XFx0X19wZXJjcHVfZG93bl9yZWFkKHNlbSwgZmFsc2UsIGZyZWV6YWJsZSk7IC8qIFVuY29uZGl0aW9uYWwgbWVtb3J5IGJhcnJpZXIgKi9cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTY4LVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc0LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6NzU6c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc2LXtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjc3OlxcdHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmYWxzZSk7XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OC19XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBmcmVlemUpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC04Mi17XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MzpcXHRwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZnJlZXplKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg0LX1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTg1LVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6ODY6c3RhdGljIGlubGluZSBib29sIHBlcmNwdV9kb3duX3JlYWRfdHJ5bG9jayhzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05MS1cXHQvKlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTI6XFx0ICogU2FtZSBhcyBpbiBwZXJjcHVfZG93bl9yZWFkKCkuXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05My1cXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XFx0XFx0cmV0ID0gX19wZXJjcHVfZG93bl9yZWFkKHNlbSwgdHJ1ZSwgZmFsc2UpOyAvKiBVbmNvbmRpdGlvbmFsIG1lbW9yeSBiYXJyaWVyICovXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMTI9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV91cF9yZWFkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTExNy1cXHQvKlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTE4OlxcdCAqIFNhbWUgYXMgaW4gcGVyY3B1X2Rvd25fcmVhZCgpLlxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTE5LVxcdCAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMzI9REVGSU5FX0dVQVJEKHBlcmNwdV9yZWFkLCBzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTMzOlxcdCAgICAgcGVyY3B1X2Rvd25fcmVhZChfVCksIHBlcmNwdV91cF9yZWFkKF9UKSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjEzNDpERUZJTkVfR1VBUkRfQ09ORChwZXJjcHVfcmVhZCwgX3RyeSwgcGVyY3B1X2Rvd25fcmVhZF90cnlsb2NrKF9UKSlcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTEzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MjguMDc4NTM4MzU2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTg1OTUzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUqKlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjZSB0aGlzIGNvZGUgcGF0aC4gSSBzZWUgd2UncmUgc3RhcnRpbmcgd2l0aCBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgdGhpcyBzdWdnZXN0cyBzb21lIGtpbmQgb2YgcmVhZC1zaWRlIGxvY2tpbmcgbWVjaGFuaXNtIHRoYXQncyBkZXNpZ25lZCB0byBiZSBmcmVlemUtYXdhcmUsIHNwZWNpZmljYWxseSBvcGVyYXRpbmcgb24gcGVyLUNQVSBkYXRhLlwiIFRoZSBuYW1lIGl0c2VsZiBpcyBwcmV0dHkgZGVzY3JpcHRpdmU7IEkgaGF2ZSBhIGdvb2QgaWRlYSBvZiB3aGF0J3MgZ29pbmcgb24uXG5cbk5vdywgd2hlcmUgZG9lcyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIGFjdHVhbGx5ICpnbyo/IEFoYSwgaXQgY2FsbHMgYHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpYC4gVGhhdCdzIHRoZSBjb3JlIHdvcmsuIFNvLCB0aGlzIHdyYXBwZXIgbGlrZWx5IGhhbmRsZXMgc29tZSBwcmUtIG9yIHBvc3QtcHJvY2Vzc2luZyBmb3IgZnJlZXplIGhhbmRsaW5nLiBOb3csIHRoZSBuZXh0IHF1ZXN0aW9uIGlzIHRoZSBtb3JlIGludGVyZXN0aW5nIG9uZTogd2hvIGFjdHVhbGx5ICp1c2VzKiBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgYmUgY3J1Y2lhbCB0byBmaWd1cmluZyBvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGlzIGNvZGUgZXhpc3RzIGFuZCB3aGF0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYXJlLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBvZiBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTY6MTE6MzIuMDc3MTM2MDE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzIzNjMyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmg9MTc9c3RhdGljIGlubGluZSB2b2lkIF9fc2Jfc3RhcnRfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGxldmVsKVxcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaC0xOC17XFxuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oOjE5OlxcdHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHNiLVxcdTAwM2VzX3dyaXRlcnMucndfc2VtICsgbGV2ZWwgLSAxLCB0cnVlKTtcXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC03OS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLFxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODEtXFx0XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBmcmVlemUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjMzLjgwMDc3NDA4OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDYxNTE4Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZGUyBXcml0ZSBQcm90ZWN0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYF9fc2Jfc3RhcnRfd3JpdGVgLiBUaGF0IGZ1bmN0aW9uIGlzIGNhbGxpbmcgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCwgYW5kIHRoYXQncyAqdGhlKiBjb3JlIG9mIHRoZSBWRlMncyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbSwgaXNuJ3QgaXQ/IGBzYl9zdGFydF93cml0ZWAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGFsbCByZWx5IG9uIHRoaXMuIFNvLCBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyBjbGVhcmx5IGEgY3JpdGljYWwgcGllY2Ugd2l0aGluIHRoZSBWRlMuXG5cblRoZSBtZWF0IG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIHRhc2sgc3RhdGUgaXMgc2V0LiBUaGUgcGF0Y2ggaXMgc3dhcHBpbmcgb3V0IGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBmb3IgYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYCB3aGVuIGBmcmVlemVgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzLCBlc3BlY2lhbGx5IHNpbmNlIGBUQVNLX0lETEVgIGltcGFjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9ucyBhbmQgd2hvIGtub3dzIHdoYXQgb3RoZXIgdGFzayBzdGF0ZS1kZXBlbmRlbnQgY29kZS4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlIGlzc3Vlcywgc28gSSB0aGluayBmdXp6aW5nIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIHRvIGNhdGNoIGFueSBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IgY2hhbmdlcy5cblxuTGV0J3MgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgcGVyY3B1X2Rvd25fd3JpdGVgLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiBob3cgaXQncyB1c2VkLiBUaGlzIGNoYW5nZSBsaWtlbHkgaGFzIHNvbWUgaW1wYWN0IG9uIGl0cyB1c2FnZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQzLjI2MjI5NDgwNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NzI0MDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9sb2NraW5nL3BlcmNwdS1ydy1zZW1hcGhvcmUucnN0PTIzPVRoZSBsb2NrIGlzIGxvY2tlZCBmb3IgcmVhZCB3aXRoIHBlcmNwdV9kb3duX3JlYWQsIHBlcmNwdV91cF9yZWFkIGFuZFxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdDoyNDpmb3Igd3JpdGUgd2l0aCBwZXJjcHVfZG93bl93cml0ZSwgcGVyY3B1X3VwX3dyaXRlLlxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9wZXJjcHUtcnctc2VtYXBob3JlLnJzdC0yNS1cXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jPTE4NT12b2lkIGhjaV91YXJ0X2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy0xOTctXFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM6MTk4OlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZodS1cXHUwMDNlcHJvdG9fbG9jayk7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXFx1MDAyNmh1LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz01NDg9c3RhdGljIHZvaWQgaGNpX3VhcnRfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy01NjYtXFx0aWYgKHByb3RvX3JlYWR5KSB7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmM6NTY3OlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZodS1cXHUwMDNlcHJvdG9fbG9jayk7XFxuZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMtNTY4LVxcdFxcdGNsZWFyX2JpdChIQ0lfVUFSVF9QUk9UT19SRUFEWSwgXFx1MDAyNmh1LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYz02NzA9c3RhdGljIGludCBoY2lfdWFydF9yZWdpc3Rlcl9kZXYoc3RydWN0IGhjaV91YXJ0ICpodSlcXG4tLVxcbmRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jLTcyOC1cXHRcXHRCVF9FUlIoXFxcIkNhbid0IHJlZ2lzdGVyIEhDSSBkZXZpY2VcXFwiKTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYzo3Mjk6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmh1LVxcdTAwM2Vwcm90b19sb2NrKTtcXG5kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYy03MzAtXFx0XFx0Y2xlYXJfYml0KEhDSV9VQVJUX1BST1RPX0lOSVQsIFxcdTAwMjZodS1cXHUwMDNlZmxhZ3MpO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTg4Nj1zdGF0aWMgaW5saW5lIGludCBleHQ0X3dyaXRlcGFnZXNfZG93bl93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2V4dDQvZXh0NC5oLTE4ODcte1xcbmZzL2V4dDQvZXh0NC5oOjE4ODg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNkVYVDRfU0Ioc2IpLVxcdTAwM2VzX3dyaXRlcGFnZXNfcndzZW0pO1xcbmZzL2V4dDQvZXh0NC5oLTE4ODktXFx0cmV0dXJuIG1lbWFsbG9jX25vZnNfc2F2ZSgpO1xcbi0tXFxuZnMvbG9ja3MuYz0zMDk4PXN0YXRpYyB2b2lkICpsb2Nrc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIGxvZmZfdCAqcG9zKVxcbi0tXFxuZnMvbG9ja3MuYy0zMTAzLVxcdGl0ZXItXFx1MDAzZWxpX3BvcyA9ICpwb3MgKyAxO1xcbmZzL2xvY2tzLmM6MzEwNDpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2ZmlsZV9yd3NlbSk7XFxuZnMvbG9ja3MuYy0zMTA1LVxcdHNwaW5fbG9jayhcXHUwMDI2YmxvY2tlZF9sb2NrX2xvY2spO1xcbi0tXFxuZnMvcHJvYy9rY29yZS5jPTI3Mj1zdGF0aWMgaW50IGtjb3JlX3VwZGF0ZV9yYW0odm9pZClcXG4tLVxcbmZzL3Byb2Mva2NvcmUuYy0yNzgtXFxuZnMvcHJvYy9rY29yZS5jOjI3OTpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2a2NsaXN0X2xvY2spO1xcbmZzL3Byb2Mva2NvcmUuYy0yODAtXFx0aWYgKCF4Y2hnKFxcdTAwMjZrY29yZV9uZWVkX3VwZGF0ZSwgMCkpXFxuLS1cXG5mcy9zdXBlci5jPTE3OTQ9c3RhdGljIHZvaWQgc2Jfd2FpdF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbGV2ZWwpXFxuZnMvc3VwZXIuYy0xNzk1LXtcXG5mcy9zdXBlci5jOjE3OTY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoc2ItXFx1MDAzZXNfd3JpdGVycy5yd19zZW0gKyBsZXZlbC0xKTtcXG5mcy9zdXBlci5jLTE3OTctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD0xMjg9ZXh0ZXJuIGJvb2wgcGVyY3B1X2lzX3JlYWRfbG9ja2VkKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6MTI5OmV4dGVybiB2b2lkIHBlcmNwdV9kb3duX3dyaXRlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICopO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtMTMwLWV4dGVybiB2b2lkIHBlcmNwdV91cF93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9MTM2PURFRklORV9HVUFSRChwZXJjcHVfd3JpdGUsIHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICosXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDoxMzc6XFx0ICAgICBwZXJjcHVfZG93bl93cml0ZShfVCksIHBlcmNwdV91cF93cml0ZShfVCkpXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC0xMzgtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTEzMTY9dm9pZCBjZ3JvdXBfZmF2b3JfZHlubW9kcyhzdHJ1Y3QgY2dyb3VwX3Jvb3QgKnJvb3QsIGJvb2wgZmF2b3IpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTEzMzEtXFx0ICovXFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYzoxMzMyOlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZjZ3JvdXBfdGhyZWFkZ3JvdXBfcndzZW0pO1xcbmtlcm5lbC9jZ3JvdXAvY2dyb3VwLmMtMTMzMy1cXHRpZiAoZmF2b3IgXFx1MDAyNlxcdTAwMjYgIWZhdm9yaW5nKSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jPTI1MzI9dm9pZCBjZ3JvdXBfYXR0YWNoX2xvY2soZW51bSBjZ3JvdXBfYXR0YWNoX2xvY2tfbW9kZSBsb2NrX21vZGUsXFxuLS1cXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jLTI1NDAtXFx0Y2FzZSBDR1JQX0FUVEFDSF9MT0NLX0dMT0JBTDpcXG5rZXJuZWwvY2dyb3VwL2Nncm91cC5jOjI1NDE6XFx0XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmNncm91cF90aHJlYWRncm91cF9yd3NlbSk7XFxua2VybmVsL2Nncm91cC9jZ3JvdXAuYy0yNTQyLVxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL2NwdS5jPTUwNj12b2lkIGNwdXNfd3JpdGVfbG9jayh2b2lkKVxcbmtlcm5lbC9jcHUuYy01MDcte1xcbmtlcm5lbC9jcHUuYzo1MDg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNmNwdV9ob3RwbHVnX2xvY2spO1xcbmtlcm5lbC9jcHUuYy01MDktfVxcbi0tXFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmM9MTE1PXN0YXRpYyBzdHJ1Y3QgbXV0ZXggKmJwX2NvbnN0cmFpbnRzX2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmJwKVxcbi0tXFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTMyLVxcdH0gZWxzZSB7XFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmM6MTMzOlxcdFxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZicF9jcHVpbmZvX3NlbSk7XFxua2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMtMTM0LVxcdH1cXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTEyNzI9cmVnaXN0ZXJfZm9yX2VhY2hfdm1hKHN0cnVjdCB1cHJvYmUgKnVwcm9iZSwgc3RydWN0IHVwcm9iZV9jb25zdW1lciAqbmV3KVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtMTI3Ny1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzoxMjc4OlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZkdXBfbW1hcF9zZW0pO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTEyNzktXFx0aW5mbyA9IGJ1aWxkX21hcF9pbmZvKHVwcm9iZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG4tLVxcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmM9ODU0PV9fYWNxdWlyZXMocGNwdV9yd3NlbSlcXG5rZXJuZWwvbG9ja2luZy9sb2NrdG9ydHVyZS5jLTg1NS17XFxua2VybmVsL2xvY2tpbmcvbG9ja3RvcnR1cmUuYzo4NTY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnBjcHVfcndzZW0pO1xcbmtlcm5lbC9sb2NraW5nL2xvY2t0b3J0dXJlLmMtODU3LVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9NDg9c3RhdGljIGJvb2wgX19wZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTgzLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jOjg0OnN0YXRpYyBpbmxpbmUgYm9vbCBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy04NS17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz05Mj1zdGF0aWMgYm9vbCBfX3BlcmNwdV9yd3NlbV90cnlsb2NrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sIGJvb2wgcmVhZGVyKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMTAyLVxcdH1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoxMDM6XFx0cmV0dXJuIF9fcGVyY3B1X2Rvd25fd3JpdGVfdHJ5bG9jayhzZW0pO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEwNC19XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYz0xMTk9c3RhdGljIGludCBwZXJjcHVfcndzZW1fd2FrZV9mdW5jdGlvbihzdHJ1Y3Qgd2FpdF9xdWV1ZV9lbnRyeSAqd3FfZW50cnksXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0xMjYtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MTI3OlxcdC8qIGNvbmN1cnJlbnQgYWdhaW5zdCBwZXJjcHVfZG93bl93cml0ZSgpLCBjYW4gZ2V0IHN0b2xlbiAqL1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTEyOC1cXHRpZiAoIV9fcGVyY3B1X3J3c2VtX3RyeWxvY2soc2VtLCByZWFkZXIpKVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM9MjExPXN0YXRpYyBib29sIHJlYWRlcnNfYWN0aXZlX2NoZWNrKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMjUtXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjI2OnZvaWQgX19zY2hlZCBwZXJjcHVfZG93bl93cml0ZShzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTIyNy17XFxuLS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yMzktXFx0ICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmM6MjQwOlxcdGlmICghX19wZXJjcHVfZG93bl93cml0ZV90cnlsb2NrKHNlbSkpIHtcXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYy0yNDEtXFx0XFx0dHJhY2VfY29udGVudGlvbl9iZWdpbihzZW0sIExDQl9GX1BFUkNQVSB8IExDQl9GX1dSSVRFKTtcXG4tLVxcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI0NS1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNDY6XFx0Lyogc21wX21iKCkgaW1wbGllZCBieSBfX3BlcmNwdV9kb3duX3dyaXRlX3RyeWxvY2soKSBvbiBzdWNjZXNzIC0tIEQgbWF0Y2hlcyBBICovXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjQ3LVxcbi0tXFxua2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMtMjU4LX1cXG5rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uYzoyNTk6RVhQT1JUX1NZTUJPTF9HUEwocGVyY3B1X2Rvd25fd3JpdGUpO1xcbmtlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jLTI2MC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NDU4MD1zdGF0aWMgdm9pZCBzY3hfY2dyb3VwX2xvY2sodm9pZClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4Mi0jaWZkZWYgQ09ORklHX0VYVF9HUk9VUF9TQ0hFRFxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NDU4MzpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2Nncm91cF9vcHNfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNDU4NC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NTkwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2Rpc2FibGUoc3RydWN0IHNjeF9zY2hlZCAqc2NoKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy01OTI4LVxcdG11dGV4X2xvY2soXFx1MDAyNnNjeF9lbmFibGVfbXV0ZXgpO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NTkyOTpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNTkzMC1cXHRzY3hfY2dyb3VwX2xvY2soKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NjA2MD1zdGF0aWMgdm9pZCBzY3hfcm9vdF9kaXNhYmxlKHN0cnVjdCBzY3hfc2NoZWQgKnNjaClcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNjEwNy1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjYxMDg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTYxMDktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jPTcwOTA9c3RhdGljIHZvaWQgc2N4X3Jvb3RfZW5hYmxlX3dvcmtmbihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbi0tXFxua2VybmVsL3NjaGVkL2V4dC9leHQuYy03MjczLVxcdCAqL1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM6NzI3NDpcXHRwZXJjcHVfZG93bl93cml0ZShcXHUwMDI2c2N4X2ZvcmtfcndzZW0pO1xcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzI3NS1cXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzM3Ny1cXHQgKi9cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjczNzg6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTczNzktXFx0c2N4X3Rhc2tfaXRlcl9zdGFydChcXHUwMDI2c3RpLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmM9NzUwOD1zdGF0aWMgdm9pZCBzY3hfc3ViX2VuYWJsZV93b3JrZm4oc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4tLVxcbmtlcm5lbC9zY2hlZC9leHQvZXh0LmMtNzYwNS1cXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jOjc2MDY6XFx0cGVyY3B1X2Rvd25fd3JpdGUoXFx1MDAyNnNjeF9mb3JrX3J3c2VtKTtcXG5rZXJuZWwvc2NoZWQvZXh0L2V4dC5jLTc2MDctXFx0c2N4X2Nncm91cF9sb2NrKCk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTI1OT12b2lkIG1lbV9ob3RwbHVnX2JlZ2luKHZvaWQpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2MS1cXHRjcHVzX3JlYWRfbG9jaygpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjYyOlxcdHBlcmNwdV9kb3duX3dyaXRlKFxcdTAwMjZtZW1faG90cGx1Z19sb2NrKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTI2My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjExOjQ1LjExOTU0MDk3NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTE5NzIwMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBQZXItQ1BVIFJXU0VNIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHBlcmNwdV9kb3duX3dyaXRlYCwgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgaXMgdXNlZCBhbGwgb3ZlciB0aGUgcGxhY2UuIFRoZSBjcnV4IG9mIHRoZSBjaGFuZ2UgaXMgdGhpczogaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSB0YXNrIHN0YXRlIHRvIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IFRBU0tfRlJFRVpBQkxFYCBkdXJpbmcgYSBmcmVlemUsIGl0J3Mgbm93IGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAuIFRoYXQncyB0aGUgc3VyZmFjZS1sZXZlbCBkaWZmZXJlbmNlLCBidXQgd2UgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cblJpZ2h0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBob3cgdGhpcyBhbGwgY29ubmVjdHMuIFRoZSByZWxldmFudCBwYXJ0IG9mIGBwZXJjcHVfZG93bl93cml0ZWAgaXMgdGhhdCBpdCBjYWxscyBgcGVyY3B1X3J3c2VtX3dhaXQoc2VtLCBmYWxzZSwgZmFsc2UpYC4gU28gdGhlIGBmcmVlemVgIGZsYWcgd2UncmUgY2hhbmdpbmcgaXMgYGZhbHNlYCBoZXJlLiBUaGlzIGNoYW5nZSB3b3VsZCAqb25seSogYWZmZWN0IGBwZXJjcHVfcndzZW1fd2FpdGAgd2hlbiBgZnJlZXplYCBpcyBhY3R1YWxseSBzZXQgdG8gYHRydWVgLiBIbW0sIHdobyBldmVuIGNhbGxzIGBwZXJjcHVfcndzZW1fd2FpdGAgd2l0aCBgZnJlZXplPXRydWVgP1xuXG5BaGEhIExvb2tpbmcgYXQgdGhlIGNhbGxzLCBgX19wZXJjcHVfZG93bl9yZWFkYCBjYWxscyBgcGVyY3B1X3J3c2VtX3dhaXQoc2VtLCB0cnVlLCBmcmVlemUpYC4gU28sIHRoYXQncyB0aGUga2V5LiBgX19wZXJjcHVfZG93bl9yZWFkYCBpcyB0aGUgb25seSBwbGFjZSBpbiB0aGUgY3VycmVudCBjb2RlIHdoZXJlIHRoaXMgY29uZGl0aW9uIGNhbiBiZSB0cnVlLiBPa2F5LCB0cmFja2luZyB0aGlzIGJhY2ssIEkgc2VlIHRoYXQgYF9fcGVyY3B1X2Rvd25fcmVhZGAgaXMgY2FsbGVkIGJ5IGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAsIHdoaWNoIGlzIGluIHR1cm4gY2FsbGVkIGJ5IGBfX3NiX3N0YXJ0X3dyaXRlYC4gRXhjZWxsZW50LiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50OiBgX19zYl9zdGFydF93cml0ZWAgaXMgdGhlIG1haW4gdGhpbmcgdG8gZm9jdXMgb24gaGVyZSwgYXQgbGVhc3QgaW5pdGlhbGx5LlxuXG5TbywgdGhlIGNoYW5nZSBpcyBkZWZpbml0ZWx5IGZvY3VzZWQgb24gYF9fcGVyY3B1X2Rvd25fcmVhZGAsIGFzIEkgc3VzcGVjdGVkLiBOb3cgSSBzaG91bGQgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcuIEkgd2lsbCBsb29rIGZvciBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIGBfX3BlcmNwdV9kb3duX3JlYWRgIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgYGZyZWV6ZWAgZmxhZyBzZXQgdG8gYHRydWVgIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFuIGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo1Mi42MzkyNjQwODdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzg0NDkxMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wZXJjcHVfZG93bl9yZWFkLip0cnVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oPTg2PXN0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfZG93bl9yZWFkX3RyeWxvY2soc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtOTYtXFx0ZWxzZVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6OTc6XFx0XFx0cmV0ID0gX19wZXJjcHVfZG93bl9yZWFkKHNlbSwgdHJ1ZSwgZmFsc2UpOyAvKiBVbmNvbmRpdGlvbmFsIG1lbW9yeSBiYXJyaWVyICovXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC05OC1cXHRwcmVlbXB0X2VuYWJsZSgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMTo1NS40Nzc3MTkyOThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTEzNDExMTgzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCoqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRocm91Z2ggdGhpcyBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXYWl0LCBsZXQncyBzZWUgaG93IGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsYCBhY3R1YWxseSB3b3Jrcy5cIiBJIHF1aWNrbHkgc2VlIHRoYXQgaXQgY2FsbHMgYF9fcGVyY3B1X2Rvd25fcmVhZGAuIFRoZW4sIEknbSB0aGlua2luZywgXCJyaWdodCwgYW5kIHdoYXQgYXJndW1lbnRzIGFyZSBiZWluZyBwYXNzZWQgdG8gdGhhdD9cIiBMb29raW5nIGF0IGl0IG5vdywgaXQncyBwcmV0dHkgY2xlYXI6IHRoZSBzZW1hcGhvcmUgKGBzZW1gKSwgdGhlIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHdlJ3JlIGdvaW5nIHRvIHVzZSBgX19wZXJjcHVfZG93bl9yZWFkYCAoYGZhbHNlYCkgYW5kIHRoZSBgZnJlZXphYmxlYCBhcmd1bWVudC4gU28gaXQgbG9va3MgbGlrZSB3ZSdyZSBub3QgdXNpbmcgdGhlIGBfX3BlcmNwdV9kb3duX3JlYWRgIGZvciBvdXIgcHVycG9zZS4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgZmVlbCBvZiB3aGF0J3MgZ29pbmcgb24gYnkgbG9va2luZyBhdCB0aGUgZG9jdW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5NjUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjowNC42MTE4MzQxNzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTM0NzgwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD00Nj1leHRlcm4gYm9vbCBfX3BlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKiwgYm9vbCwgYm9vbCk7XFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00Ny1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjQ4OnN0YXRpYyBpbmxpbmUgdm9pZCBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaC00OS1cXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgZnJlZXphYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaD03NT1zdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtKVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzYte1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg6Nzc6XFx0cGVyY3B1X2Rvd25fcmVhZF9pbnRlcm5hbChzZW0sIGZhbHNlKTtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTc4LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9ODA9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlKHN0cnVjdCBwZXJjcHVfcndfc2VtYXBob3JlICpzZW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgyLXtcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oOjgzOlxcdHBlcmNwdV9kb3duX3JlYWRfaW50ZXJuYWwoc2VtLCBmcmVlemUpO1xcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjowNi4xNjUzMjE0NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5MTM3NTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9sbG93aW5nIHRoZSBmbG93IGhlcmUuIEkgc2VlIHRoYXQgYHBlcmNwdV9kb3duX3JlYWRfZnJlZXphYmxlYCBpcyBjYWxsaW5nIGBwZXJjcHVfZG93bl9yZWFkX2ludGVybmFsKHNlbSwgZnJlZXplKWAuIFRoYXQncyB0aGUgY29yZSBmdW5jdGlvbi4gT2theSwgZ290IGl0LlxuXG5Ob3csIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBiZWNhdXNlIGBfX3NiX3N0YXJ0X3dyaXRlYCBjYWxscyBgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGVgLiBUaGlzIGlzIHByb2JhYmx5IHNpZ25pZmljYW50IHRvIG15IGN1cnJlbnQgZGVidWdnaW5nIHNlc3Npb24gYW5kIGl0IG1pZ2h0IGJlIGEgYm90dGxlbmVjay4gU2luY2UgaXQgaXMsIEkgbmVlZCB0byBrbm93IHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJIHdpbGwgY2hlY2sgZm9yIGFueSBvdGhlciBjYWxsIHNpdGVzIG9mIGBwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZWAgaW4gdGhlIGNvZGUuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiBpdHMgdXNhZ2UgYmVmb3JlIGRyYXdpbmcgYW55IGNvbmNsdXNpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU1MSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjEzLjQ1NjcwMDQ5MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzg4NTQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy9zdXBlci5oPTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NiX3N0YXJ0X3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBsZXZlbClcXG5pbmNsdWRlL2xpbnV4L2ZzL3N1cGVyLmgtMTgte1xcbmluY2x1ZGUvbGludXgvZnMvc3VwZXIuaDoxOTpcXHRwZXJjcHVfZG93bl9yZWFkX2ZyZWV6YWJsZShzYi1cXHUwMDNlc193cml0ZXJzLnJ3X3NlbSArIGxldmVsIC0gMSwgdHJ1ZSk7XFxuaW5jbHVkZS9saW51eC9mcy9zdXBlci5oLTIwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmg9NzU9c3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9kb3duX3JlYWQoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGVyY3B1LXJ3c2VtLmgtNzktXFxuaW5jbHVkZS9saW51eC9wZXJjcHUtcndzZW0uaDo4MDpzdGF0aWMgaW5saW5lIHZvaWQgcGVyY3B1X2Rvd25fcmVhZF9mcmVlemFibGUoc3RydWN0IHBlcmNwdV9yd19zZW1hcGhvcmUgKnNlbSxcXG5pbmNsdWRlL2xpbnV4L3BlcmNwdS1yd3NlbS5oLTgxLVxcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZnJlZXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoxNC45ODQ2MDI3MjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExODcxMDU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipEaXZpbmcgaW50byBLZXJuZWwgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgd3JpdGUgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGhvdyB0aGV5J3JlIGluaXRpYXRlZC4gSXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGBfX3NiX3N0YXJ0X3dyaXRlYCBpcyAqdGhlKiBtYWluIGVudHJ5IHBvaW50LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gd2UncmUgdHJhY2tpbmcuIEkgc2VlIGl0J3MgY2FsbGVkIGJ5IGEgZmV3IG90aGVyIGtleSBmdW5jdGlvbnMg4oCTIGBzYl9zdGFydF93cml0ZWAsIGBzYl9zdGFydF9wYWdlZmF1bHRgLCBhbmQgYHNiX3N0YXJ0X2ludHdyaXRlYCDigJMgYWxsIGhlYXZpbHkgaW1wbGljYXRlZCB3aXRoaW4gdGhlIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykuIFRoYXQgYWxvbmUgbWFrZXMgdGhpcyBhIGNyaXRpY2FsIGFyZWEgdG8gdW5kZXJzdGFuZCwgYmVjYXVzZSBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGluIFZGUyBhcmUgKmFsd2F5cyoga2V5LlxuXG5UaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2UsIHRob3VnaCwgbGllcyBpbiB0aGUgdGFzayBzdGF0ZSBtb2RpZmljYXRpb24uIFdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZSwgdGhlIHBhdGNoIHN3aXRjaGVzIGZyb20gc2V0dGluZyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgdG8gYFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFYC4gVGhpcyBpcyBhICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBzaGlmdCBpbiB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBiZWhhdmlvci4gV2UncmUgZXNzZW50aWFsbHkgY2hhbmdpbmcgdGhlIGxvY2sgc2VtYW50aWNzIHdpdGhpbiB0aGUga2VybmVsLCBpbXBhY3RpbmcgaG93IHRhc2tzIGFyZSBzY2hlZHVsZWQgYW5kIHBvdGVudGlhbGx5IHRoZWlyIGFiaWxpdHkgdG8gcmVzcG9uZCB0byBpbnRlcnJ1cHRzLiBUaGlzIGNoYW5nZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIHN5c3RlbSwgc28gaXQncyBhIGh1Z2UgY2FuZGlkYXRlIGZvciByZWdyZXNzaW9uIHRlc3RpbmcuXG5cbkNvbnNpZGVyaW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoaXMgc2hpZnQgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UnbGwgbmVlZCB0byB0aHJvdyBldmVyeXRoaW5nIHdlJ3ZlIGdvdCBhdCBpdC5cblxuQXMgZm9yIGZvY3VzIHN5bWJvbHMsIGBfX3BlcmNwdV9kb3duX3JlYWRgIGlzIG9uZSBJJ2xsIHdhbnQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0by5cblxuRmluYWxseSwgSSBkb24ndCBzZWUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZ3MgdGhhdCBhcHBseSB0byB0aGlzIHNlY3Rpb24sIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIHNvbWV3aGF0IHNpbXBsZXIuIExldCdzIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGdldCB0aGlzIGFuYWx5c2lzIGRvY3VtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDg0LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzE3MTExMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fcGVyY3B1X2Rvd25fcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGtlcm5lbCBsb2NraW5nIG1lY2hhbmlzbSAoYHBlcmNwdV9yd3NlbV93YWl0YCkgdG8gdXNlIGBUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRWAgaW5zdGVhZCBvZiBgVEFTS19VTklOVEVSUlVQVElCTEUgfCBUQVNLX0ZSRUVaQUJMRWAgd2hlbiBgZnJlZXplYCBpcyB0cnVlLiBUaGlzIGFmZmVjdHMgbG9hZCBhdmVyYWdlIGNhbGN1bGF0aW9uIGFuZCB0YXNrIHN0YXRlIGhhbmRsaW5nLiBUaGUgYGZyZWV6ZT10cnVlYCBwYXRoIGlzIHByaW1hcmlseSByZWFjaGVkIHZpYSBgX19wZXJjcHVfZG93bl9yZWFkYCB0aHJvdWdoIFZGUyB3cml0ZSBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgKGBfX3NiX3N0YXJ0X3dyaXRlYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3BlcmNwdV9kb3duX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBrZXJuZWwgbG9ja2luZyBtZWNoYW5pc20gKGBwZXJjcHVfcndzZW1fd2FpdGApIHRvIHVzZSBgVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEVgIGluc3RlYWQgb2YgYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgVEFTS19GUkVFWkFCTEVgIHdoZW4gYGZyZWV6ZWAgaXMgdHJ1ZS4gVGhpcyBhZmZlY3RzIGxvYWQgYXZlcmFnZSBjYWxjdWxhdGlvbiBhbmQgdGFzayBzdGF0ZSBoYW5kbGluZy4gVGhlIGBmcmVlemU9dHJ1ZWAgcGF0aCBpcyBwcmltYXJpbHkgcmVhY2hlZCB2aWEgYF9fcGVyY3B1X2Rvd25fcmVhZGAgdGhyb3VnaCBWRlMgd3JpdGUgcHJvdGVjdGlvbiBtZWNoYW5pc21zIChgX19zYl9zdGFydF93cml0ZWApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjI2LjE3MTc0MDM0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1MTkxNTYwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzIxODI3NzlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI1MTg3MDk3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0YXNrIHN0YXRlIHNldCBkdXJpbmcgYHBlcmNwdV9yd3NlbV93YWl0YCBpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCBjaGFuZ2VzIHRoZSBzdGF0ZSBmcm9tIGBUQVNLX1VOSU5URVJSVVBUSUJMRSB8IChmcmVlemUgPyBUQVNLX0ZSRUVaQUJMRSA6IDApYCB0byBgZnJlZXplID8gKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFYC4gVGhpcyBpcyBhIHNjaGVkdWxpbmcgYW5kIGxvY2tpbmcgY2hhbmdlIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGRlYWRsb2Nrcywgc2NoZWR1bGluZyBpc3N1ZXMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBMT0NLREVQIG9yIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhjNjQ0OWIwNmZlOTYwYmJhNzE3OWIyN2Y5Y2MxYWYwNGExNWJhYmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE2OjEwOjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmMgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuaW5kZXggZjdlMTUyYzQwZDZkMC4uNTdlMjRmZGMwMjAzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL3BlcmNwdS1yd3NlbS5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY1xuQEAgLTE1Nyw4ICsxNTcsNyBAQCBzdGF0aWMgdm9pZCBwZXJjcHVfcndzZW1fd2FpdChzdHJ1Y3QgcGVyY3B1X3J3X3NlbWFwaG9yZSAqc2VtLCBib29sIHJlYWRlcixcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZW0tXHUwMDNld2FpdGVycy5sb2NrKTtcbiBcbiBcdHdoaWxlICh3YWl0KSB7XG4tXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFIHxcbi1cdFx0XHRcdCAgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMCkpO1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoIXNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2d3FfZW50cnkucHJpdmF0ZSkpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdHNjaGVkdWxlKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxNjoxMjoyNi4xNzIxODM0OTlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1MTg2ODY1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQZXItQ1BVIFJlYWQtV3JpdGUgU2VtYXBob3JlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgcGVyY3B1X3J3c2VtX3dhaXRgIHdpdGhpbiBga2VybmVsL2xvY2tpbmcvcGVyY3B1LXJ3c2VtLmNgLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXRlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgc2V0X2N1cnJlbnRfc3RhdGVgIGNhbGwuIEluaXRpYWxseSwgaXQgc2V0cyB0aGUgdGFzayBzdGF0ZSB0byBgVEFTS19VTklOVEVSUlVQVElCTEVgIHdpdGggYW4gb3B0aW9uYWwgYFRBU0tfRlJFRVpBQkxFYCBiaXQsIGRlcGVuZGluZyBvbiBhIGBmcmVlemVgIGZsYWcuIFRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGlzIHRvIGVpdGhlciBgKFRBU0tfSURMRSB8IFRBU0tfRlJFRVpBQkxFKWAgaWYgYGZyZWV6ZWAgaXMgdHJ1ZSBvciBqdXN0IGBUQVNLX1VOSU5URVJSVVBUSUJMRWAgb3RoZXJ3aXNlLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYSBsb2NraW5nIGFuZCBzY2hlZHVsaW5nIG1vZGlmaWNhdGlvbiwgYSBjaGFuZ2UgaW4gaG93IGEgdGFzayB3YWl0cyBmb3IgYSByZXNvdXJjZS4gSW1wb3J0YW50bHksIHRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQncyBpbnRyb2R1Y2luZyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBvciBhbnkgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gSSdtIG5vdCBzZWVpbmcgYW55dGhpbmcgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgaGVyZS4gSXQncyBzb2xlbHkgYWJvdXQgdGFzayBzdGF0ZSwgYW5kIHNvIGFueSBjb25jZXJucywgbGlrZSBsb2NrZGVwIGlzc3Vlcywgc2NoZWR1bGluZyBpbXBhY3RzIG9yIGZyZWV6ZXIgaW50ZXJhY3Rpb25zLCBhcmUgYWxsIHdlbGwgd2l0aGluIHRoZSBzY29wZSBvZiBLQVNBTi9MT0NLREVQL2V0Yy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2U6XG5cbmBgYGNcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUgfFxuLVx0XHRcdFx0ICAoZnJlZXplID8gVEFTS19GUkVFWkFCTEUgOiAwKSk7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKGZyZWV6ZSA/IChUQVNLX0lETEUgfCBUQVNLX0ZSRUVaQUJMRSkgOiBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG5gYGBcblxuWWVhaCwgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHRob3VnaHQuIE5vIHdheSB0aGlzIHJlbGF0ZXMgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSBleGlzdGluZyBpbnN0cnVtZW50YXRpb24gc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDI3LCJPdXRwdXRUb2tlbnMiOjE5MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE2OjEyOjM4LjY5MDg3Mjg3NFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRhc2sgc3RhdGUgc2V0IGR1cmluZyBgcGVyY3B1X3J3c2VtX3dhaXRgIGluIGBrZXJuZWwvbG9ja2luZy9wZXJjcHUtcndzZW0uY2AuIEl0IGNoYW5nZXMgdGhlIHN0YXRlIGZyb20gYFRBU0tfVU5JTlRFUlJVUFRJQkxFIHwgKGZyZWV6ZSA/IFRBU0tfRlJFRVpBQkxFIDogMClgIHRvIGBmcmVlemUgPyAoVEFTS19JRExFIHwgVEFTS19GUkVFWkFCTEUpIDogVEFTS19VTklOVEVSUlVQVElCTEVgLiBUaGlzIGlzIGEgc2NoZWR1bGluZyBhbmQgbG9ja2luZyBjaGFuZ2UgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgZGVhZGxvY2tzLCBzY2hlZHVsaW5nIGlzc3Vlcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBsaWtlIExPQ0tERVAgb3IgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[1] Phase: Succeeded StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 16:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 16:12:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2] Phase: Succeeded StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 16:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 16:12:50 +0000 UTC FinishedAt: 2026-08-07 16:12:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow47vcz/series-workflow47vcz-convert-artifact-1935295962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 16:13:00 +0000 UTC FinishedAt: 2026-08-07 16:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 16:13:00 +0000 UTC FinishedAt: 2026-08-07 16:29:55 +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:*09c44b2c-7a80-4a4c-b0c5-80746b9e0046,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-workflow47vcz/series-workflow47vcz-convert-artifact-1935295962/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": "7fd61dde-d13f-4582-8225-ab093f619860", "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-workflow47vcz/series-workflow47vcz-build-action-277379720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 16:13:00 +0000 UTC FinishedAt: 2026-08-07 16:29:45 +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:*09c44b2c-7a80-4a4c-b0c5-80746b9e0046,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-workflow47vcz/series-workflow47vcz-convert-artifact-1935295962/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": "7fd61dde-d13f-4582-8225-ab093f619860", "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-workflow47vcz/series-workflow47vcz-build-action-277379720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 16:29:55 +0000 UTC FinishedAt: 2026-08-07 16:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 16:29:55 +0000 UTC FinishedAt: 2026-08-07 16:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 16:29:55 +0000 UTC FinishedAt: 2026-08-07 16:30:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 16:29:55 +0000 UTC FinishedAt: 2026-08-07 16:29:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow47vcz/series-workflow47vcz-convert-artifact-2129655093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 16:30:05 +0000 UTC FinishedAt: 2026-08-07 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 16:30:05 +0000 UTC FinishedAt: 2026-08-07 16:32:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7fd61dde-d13f-4582-8225-ab093f619860,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-workflow47vcz/series-workflow47vcz-build-action-277379720/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-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 16:32:29 +0000 UTC FinishedAt: 2026-08-07 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 16:32:29 +0000 UTC FinishedAt: 2026-08-07 16:32:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 16:32:29 +0000 UTC FinishedAt: 2026-08-07 16:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 16:32:29 +0000 UTC FinishedAt: 2026-08-07 16:49:15 +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:*09c44b2c-7a80-4a4c-b0c5-80746b9e0046,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-workflow47vcz/series-workflow47vcz-convert-artifact-2129655093/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": "54622faf-4f5a-480c-90c1-62c73e7f6b14", "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-workflow47vcz/series-workflow47vcz-build-action-326903361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 16:32:29 +0000 UTC FinishedAt: 2026-08-07 16:49:05 +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:*09c44b2c-7a80-4a4c-b0c5-80746b9e0046,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-workflow47vcz/series-workflow47vcz-convert-artifact-2129655093/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": "54622faf-4f5a-480c-90c1-62c73e7f6b14", "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-workflow47vcz/series-workflow47vcz-build-action-326903361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 16:49:15 +0000 UTC FinishedAt: 2026-08-07 16:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 16:49:15 +0000 UTC FinishedAt: 2026-08-07 16:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 16:49:15 +0000 UTC FinishedAt: 2026-08-07 16:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 16:49:15 +0000 UTC FinishedAt: 2026-08-07 16:51: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:*54622faf-4f5a-480c-90c1-62c73e7f6b14,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-workflow47vcz/series-workflow47vcz-build-action-326903361/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-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"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:*7fd61dde-d13f-4582-8225-ab093f619860,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*54622faf-4f5a-480c-90c1-62c73e7f6b14,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-workflow47vcz/series-workflow47vcz-build-action-277379720/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-workflow47vcz/series-workflow47vcz-build-action-326903361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 16:51:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 16:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"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-workflow47vcz/series-workflow47vcz-convert-artifact-2781724698/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 16:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 16:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 16:51:15 +0000 UTC FinishedAt: 2026-08-07 16:51:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 16:51:25 +0000 UTC FinishedAt: 2026-08-07 19:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow47vcz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__percpu_down_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","series_id":"879df8d7-8aa9-4e49-a747-3d940ed52963","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 16:51:25 +0000 UTC FinishedAt: 2026-08-07 19:53:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7fd61dde-d13f-4582-8225-ab093f619860,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*54622faf-4f5a-480c-90c1-62c73e7f6b14,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-workflow47vcz/series-workflow47vcz-build-action-277379720/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-workflow47vcz/series-workflow47vcz-build-action-326903361/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-workflow47vcz/series-workflow47vcz-convert-artifact-2781724698/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,}