Name: series-workflowm55lt Phase: Succeeded StartedAt: 2026-08-03 20:14:55 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[0] Phase: Succeeded StartedAt: 2026-08-03 20:14:55 +0000 UTC FinishedAt: 2026-08-03 20:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 20:14:55 +0000 UTC FinishedAt: 2026-08-03 20:36:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "5f0df253-87d5-42be-b3f8-c23c2bf6cd24" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_netdev_event", "iucv_sock_create", "iucv_sock_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9uZXRkZXZfZXZlbnQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uMDM0MDM5YzUwOTQxOCAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjIxMyw2ICYjNDM7MjIxMyw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9HT0lOR19ET1dOOlxuJiM0MztcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4gXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0XHRcdGlmICgoaXVjdi1cdTAwM2Voc19kZXYgPT0gZXZlbnRfZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0yMjIzLDYgJiM0MzsyMjI0LDcgQEAgc3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiBcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1x0XHRyZWFkX3VubG9ja19iaChcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfRE9XTjpcbiBcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9uZXRkZXZfZXZlbnQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLjAzNDAzOWM1MDk0MTggMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIyMTMsNiAmIzQzOzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9SRUJPT1Q6CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKJiM0MzsJCXJlYWRfbG9ja19iaCgmYW1wO2l1Y3Zfc2tfbGlzdC5sb2NrKTsKIAkJc2tfZm9yX2VhY2goc2ssICZhbXA7aXVjdl9za19saXN0LmhlYWQpIHsKIAkJCWl1Y3YgPSBpdWN2X3NrKHNrKTsKIAkJCWlmICgoaXVjdi0mZ3Q7aHNfZGV2ID09IGV2ZW50X2RldikgJmFtcDsmYW1wOwpAQCAtMjIyMyw2ICYjNDM7MjIyNCw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiAJCQl9CiAJCX0KJiM0MzsJCXJlYWRfdW5sb2NrX2JoKCZhbXA7aXVjdl9za19saXN0LmxvY2spOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgYWRkZWQgYHJlYWRfbG9ja19iaGAgYW5kIGByZWFkX3VubG9ja19iaGAgYXJvdW5kIGEgbG9vcCB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYCZhbXA7aXVjdl9za19saXN0LmhlYWRgIHdpdGhpbiB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBSaWdodCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBsb2NraW5nIHRvIHByb3RlY3QgdGhhdCBsaW5rZWQgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsZXQgbWUgdGhpbmsuLi4gSVVDVi4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUgSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMuIEdpdmVuIHRoYXQgaXQgaW52b2x2ZXMgYSBmYWlybHkgc3BlY2lmaWMgcHJvdG9jb2wsIGEga2V5IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgbWlnaHQgYmUgc3BlY2lmaWMgdG8gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gY2hlY2suIEkgcmVtZW1iZXIgcmVhZGluZyBhYm91dCBpdCBzb21ld2hlcmUsIHNvIGl0IHNob3VsZCBiZSBvYnZpb3VzIGZyb20gdGhlIEtjb25maWcgZmlsZSBpZiB0aGlzIGlzIGNvbmRpdGlvbmFsIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGFyZ2V0IEVudmlyb25tZW50KioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhc2sgaGluZ2VzIG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gR29vZCBzdGFydGluZyBwb2ludC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBzeXprYWxsZXJgIHN1cHBvcnRzIGZ1enppbmcgb24gdGhhdCBhcmNoaXRlY3R1cmUuIEl0IGRvZXMsIHNwZWNpZmljYWxseSBgczM5MHhgLiBTbywgdGhhdCYjMzk7cyBwb3NpdGl2ZS4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gTm93LCBRRU1VICpkb2VzKiBzdXBwb3J0IGBzMzkweGAgZW11bGF0aW9uLCBzbyB0aGF0IGluaXRpYWwgY29uY2VybiBpcyBwb3RlbnRpYWxseSBtaXRpZ2F0ZWQuCgpHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQsIGxldCYjMzk7cyBub3cgY29uc2lkZXIgdGhhdCB0aGUgcHJvbXB0IHJlZmVyZW5jZXMgYSBzcGVjaWZpYyBuZXR3b3JrIGNvbXBvbmVudCBgQUZfSVVDVmAuIElzIHRoYXQgZnV6emVkPyBUaGF0IGlzIGEgc29ja2V0IGZhbWlseSwgc28gdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGBBRl9JVUNWYCBpdHNlbGYuIExldCYjMzk7cyBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gc3RhcnQgb3VyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIElVQ1YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGBJVUNWYCBmZWF0dXJlIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVVDViwgb2J2aW91c2x5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZGVmaW5lZCBpbiB0aGF0IGZpbGUg4oCTIHRoaW5ncyBsaWtlIGBDT05GSUdfSVVDVmAsIHBvdGVudGlhbGx5IHdpdGggZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBpZiBpdCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTQtXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnOjU6XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xubmV0L2l1Y3YvS2NvbmZpZy02LVx0aGVscFxuLS1cbm5ldC9pdWN2L0tjb25maWctMTAtXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1Zcbm5ldC9pdWN2L0tjb25maWctMTItXHRkZXBlbmRzIG9uIFMzOTBcbm5ldC9pdWN2L0tjb25maWc6MTM6XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1Zcbm5ldC9pdWN2L0tjb25maWc6MTQ6XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG5uZXQvaXVjdi9LY29uZmlnLTE1LVx0aGVscFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbm5ldC9pdWN2L0tjb25maWctMTctXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEFGSVVDViBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQsIHRoaXMgYEFGSVVDVmAgdGhpbmcsIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQsIHJpZ2h0PyBXYWl0IGEgbWludXRlLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IFllcywgSSBjYW4gY29uZmlybSB0aGF0IFFFTVUgZG9lcyBpbmRlZWQgZW11bGF0ZSBzMzkweC4gT2theSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuIElzIHRoaXMgYWN0dWFsbHkgd29ydGggZnV6emluZz8gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc29ja2V0LWJhc2VkIHByb3RvY29sLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLgoKSGFuZyBvbuKApiBsb29raW5nIGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCwgdGhhdCYjMzk7cyBhIG5ldGRldiBub3RpZmllciEgSXTigJlzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXZlbnQgb2NjdXJzLiBBbmQgdGhlIGNvbW1pdCBJJiMzOTttIHJldmlld2luZyBhZGRzIGxvY2tpbmcgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE5vdywgaXMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBMZXQmIzM5O3Mgc2Vl4oCmIE9rYXksIGl0JiMzOTtzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7YWZpdWN2X25ldGRldl9ub3RpZmllcilgLiBPa2F5LCBnb29kLiBTbywgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGV2ZW50IG9jY3VycywgdGhpbmdzIGxpa2UgYE5FVERFVl9SRUJPT1RgIG9yIGBORVRERVZfR09JTkdfRE9XTmAsIGl0IGl0ZXJhdGVzIG92ZXIgYGl1Y3Zfc2tfbGlzdC5oZWFkYC4gRGVmaW5pdGVseSByZWFjaGFibGUhCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQUZJVUNWYCBpcyB0aGUgbWFpbiBvbmUsIHJpZ2h0PyBPa2F5LCBzbyBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24gYW4geDg2IHN5c3RlbT8gTm8sIGl0ICpkZXBlbmRzIG9uIFMzOTAqIGV4cGxpY2l0bHkuIFNpbmNlIHN5emthbGxlciBydW5zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBhbmQgczM5MHggaXMgb25lIG9mIHRoZW0sIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIE9rYXksIHdlJiMzOTt2ZSBnb3QgdG8gbGlzdCBgQUZJVUNWYCBhcyAqdGhlKiBjb25maWcuIFdhaXQsIGRvZXMgYEFGSVVDVmAgKnJlcXVpcmUqIGBJVUNWYD8gYEFGSVVDVmAganVzdCBkZXBlbmRzIG9uIGBTMzkwYC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRklVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxuLS1cbm5ldC9pdWN2L0tjb25maWctMTAtXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1Zcbm5ldC9pdWN2L0tjb25maWctMTItXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSBmdWxsIGBBRklVQ1ZgIGNvbmZpZywmIzM0OyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYy4gYEFGSVVDVmAgaXMgbGlrZWx5IGFuIGFjcm9ueW0sIHNwZWNpZmljIHRvIHRoaXMgZXhwZXJ0JiMzOTtzIHdvcmssIGFuZCB0aGUgaW50ZXJlc3QgaXMgdG8gaW5zcGVjdCB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYSBjb21wbGV4IHN5c3RlbSB3aXRoIGEgc29waGlzdGljYXRlZCBjb25maWcgdGhhdCYjMzk7cyBjcml0aWNhbCB0byB0aGUgdGFzayBhdCBoYW5kLiBUaGUgcHJvbXB0IGlzbiYjMzk7dCBhc2tpbmcgZm9yIGFuYWx5c2lzLCBzbyBJJiMzOTttIG5vdCBnb2luZyB0byBzcGVjdWxhdGUgYWJvdXQgd2hhdCBgQUZJVUNWYCAqaXMqLiBJIHdhbnQgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYEFGSVVDVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCB3YWl0LCB0aGlzIGRvZXNuJiMzOTt0IGV4aXN0IGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRha2luZyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYWNjb3VudC4gQWgsIHllcywgaXQgbGl2ZXMgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LCBzbyBpdCYjMzk7cyB0aWVkIHRvIHRoZSBuZXR3b3JrIHN1YnN5c3RlbSwgb2YgY291cnNlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMganVzdCBgQUZJVUNWYCBlbm91Z2g/IEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBkb2VzIGFwcGVhciBzby4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZnVuY3Rpb24gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFzIHRoZSBuZXh0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIHJlYWN0aW5nIHRvIG5ldHdvcmsgZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfbmV0ZGV2X2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMTY3PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkgbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwMy0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDQ6ICogYWZpdWN2X25ldGRldl9ldmVudDogaGFuZGxlIG5ldGRldiBub3RpZmllciBjaGFpbiBldmVudHNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjA1LSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDY6c3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjA3LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzc9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzg6XHQubm90aWZpZXJfY2FsbCA9IGFmaXVjdl9uZXRkZXZfZXZlbnQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIE5ldHdvcmtpbmcgQ29kZSoqCgpPa2F5LCBzbyB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIGZsYWdnZWQgZm9yIG1vZGlmaWNhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIHBlcmhhcHMgYXMgcmVsYXRlZCBvciBzdXBwb3J0aW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2suCgpHaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBldmVudHMgYW5kLCBwcmVzdW1hYmx5LCBJVUNWIHNvY2tldHMsIG15IGludHVpdGlvbiBsZWFucyB0b3dhcmRzIGZvY3VzaW5nIG9uIHRoZSBzb2NrZXQgY3JlYXRpb24gYW5kIGJpbmRpbmcgcHJvY2Vzcy4gSWYgdGhlIHNvY2tldCBzZXR1cCBpcyBpbnRlZ3JhbCB0byB0aGVzZSBuZXR3b3JrIGV2ZW50cywgdGhlbiBjaGFuZ2VzIHRoZXJlIGNvdWxkIGRlZmluaXRlbHkgaW1wYWN0IHRoaW5ncy4KCkkmIzM5O2xsIHNwZWNpZmljYWxseSBjaGVjayBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2luY2UgdGhleSYjMzk7cmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJ4oCZbSB0aGlua2luZyB0aG9zZSBjb3VsZCBiZSB1c2VkIHRvIHNldCB1cCBzb2NrZXRzIHRvIHVzZSB0aGlzIGxpc3Qgb2Ygc29ja2V0cyB3ZeKAmXJlIGxvb2tpbmcgYXQsIHJpZ2h0PwoKU28sIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIHNvY2tldHMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQuIEdvdHRhIHNlZSBob3cgdGhlIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB0byBgYWZpdWN2X25ldGRldl9ldmVudGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjYxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYyLVx0XHRcdCAgICBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTItXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5MzpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipTb2NrZXQgQ3JlYXRpb24gaW4gdGhlIElVQ1YgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBJVUNWIHNvY2tldCBBUEkgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZvdW5kYXRpb25hbCBhc3BlY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIGFuZCBiaW5kaW5nIHBoYXNlcy4gSXQgbG9va3MgbGlrZSBgaXVjdl9zb2NrX2NyZWF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHRoZSBlcXVpdmFsZW50IG9mIGEgYHNvY2tldCgpYCBjYWxsIGluIG90aGVyIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIHNldHRpbmcgdXAgYSBjb21tdW5pY2F0aW9uIGVuZHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBwYXJhbWV0ZXJzIGxhdGVyIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBJVUNWIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IHdoYXQgb3B0aW9ucywgaWYgYW55LCB0aGUgY3JlYXRpb24gZnVuY3Rpb24gZ2l2ZXMuIEZvbGxvd2luZyB1cCBvbiB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYmluZGluZyBwcm9jZWR1cmUgd291bGQgYmUuIEkgaW1hZ2luZSB0aGVyZSYjMzk7cyBhIGZ1bmN0aW9uIGxpa2UgYGl1Y3Zfc29ja19iaW5kYCwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHNlbWFudGljLCB0aGF0IHdpbGwgYXNzb2NpYXRlIHRoZSBjcmVhdGVkIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgSVVDViBuZXR3b3JrLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyBJIGNhbiBkZWZpbmUgdGhlIGVuZHBvaW50cyBvciBpZGVudGlmaWVycyB1c2VkIHRvIGRlZmluZSB0aGUgc29ja2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGUgc29ja2V0cyB0byBjb21tdW5pY2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4MS0vKiBCaW5kIGFuIHVuYm91bmQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTgyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgzLVx0XHRcdCAgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNDQtXHQucmVsZWFzZVx0PSBpdWN2X3NvY2tfcmVsZWFzZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjQ1Olx0LmJpbmRcdFx0PSBpdWN2X3NvY2tfYmluZCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQ2LVx0LmNvbm5lY3RcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQUZfSVVDViBMb2NraW5nIGFuZCBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBsb2NraW5nIHRvIHRoZSBgYWZpdWN2X25ldGRldl9ldmVudGAgZnVuY3Rpb24uIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoYXQgc3ltYm9sLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGNyZWF0ZSBhIHNwZWNpZmljIHNjZW5hcmlvLiBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdHJpZ2dlciB0aGUgbmV3IGxvY2sgaXMgdG8gY3JlYXRlIGFuIEFGX0lVQ1Ygc29ja2V0IGFuZCB0aGVuIGdlbmVyYXRlIGEgbmV0d29yayBkZXZpY2UgZXZlbnQuIEJyaW5naW5nIGFuIGludGVyZmFjZSBkb3duIHNob3VsZCBkbyB0aGUgdHJpY2suIFRoYXQgbWVhbnMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldCBmb3IgbXkgZXhhbWluYXRpb24uCgpOb3csIGxldCYjMzk7cyBzZWUuLi4gZ2V0dGluZyBhbiBBRl9JVUNWIHNvY2tldCBjcmVhdGVkIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBsb29rIGF0IGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCB0b28uIFRob3NlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIHNvY2tldCBpbml0aWFsaXplZCBhbmQgb24gdGhlIHN5c3RlbS4KCkFoYSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGhvdyB0aGUgc29ja2V0IGdldHMgb250byB0aGUgYGl1Y3Zfc2tfbGlzdGAuIFRoYXQgbGlzdCBpcyBjbGVhcmx5IHRoZSB0YXJnZXQgb2YgYSBsb2NrLCBzbyB3aGVuIHRoYXQgaGFwcGVucyB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgcG9pbnQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHNvY2tldCBpcyBhZGRlZCB0byBgaXVjdl9za19saXN0YC4gVGhhdCBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9za19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz05NT1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo5NzpzdGF0aWMgc3RydWN0IGl1Y3Zfc29ja19saXN0IGl1Y3Zfc2tfbGlzdCA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5ODpcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05OS1cdC5hdXRvYmluZF9uYW1lID0gQVRPTUlDX0lOSVQoMClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjY4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19pdWN2X2dldF9zb2NrX2J5X25hbWUoY2hhciAqbm0pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNzI6XHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjczLVx0XHRpZiAoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSwgbm0sIDgpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzI5Olx0aXVjdl9zb2NrX3VubGluayhcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMzAtXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTA1LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjUwNjpcdGl1Y3Zfc29ja19saW5rKFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwNy1cdHJldHVybiBzaztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTY4PXN0YXRpYyB2b2lkIF9faXVjdl9hdXRvX25hbWUoc3RydWN0IGl1Y3Zfc29jayAqaXVjdilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTcyLVx0c2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1NzM6XHRcdCAgXCYjMzQ7JTA4eFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aXVjdl9za19saXN0LmF1dG9iaW5kX25hbWUpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzQtXHR3aGlsZSAoX19pdWN2X2dldF9zb2NrX2J5X25hbWUobmFtZSkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzUtXHRcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwmIzM0OyUwOHhcJiMzNDssXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTc2Olx0XHRcdCAgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aXVjdl9za19saXN0LmF1dG9iaW5kX25hbWUpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzctXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDItXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjAzOlx0d3JpdGVfbG9ja19iaChcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjA0LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTctXHQvKiBSZWxlYXNlIHRoZSBzb2NrZXQgbGlzdCBsb2NrICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU4Olx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTktZG9uZTpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NzpcdHdyaXRlX2xvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3OC1cdF9faXVjdl9hdXRvX25hbWUoaXVjdik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc5Olx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02ODAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYxOS1cdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYyMDpcdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYyMS1cdGl1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjItXHRzayA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYyMzpcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjI0LVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9MSVNURU4gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzItXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMzOlx0cmVhZF91bmxvY2soXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzQtXHRpZiAoIWl1Y3YpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNTg9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNzktXHRzayA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MDpcdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MTpcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODItXHRcdGlmICh0cmFuc19oZHItXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTA4LVx0XHRzb2NrX2hvbGQoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMDk6XHRyZWFkX3VubG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjExMC1cdGlmICghaXVjdilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIwNj1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjE1LVx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjE2Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMTc6XHRcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTgtXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjI2LVx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNzpcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFGSVVDViBTb2NrZXQgU3VwcG9ydCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBjZW50ZXJlZCBhcm91bmQgdGhlIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBoYW5kbGluZyBuZXRkZXYgZXZlbnRzLCB3aGljaCBtYWtlcyBpdCB0aGUgY3J1Y2lhbCBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2VlbSBpbXBvcnRhbnQgZm9yIHNvY2tldCBjcmVhdGlvbiwgc28gSSYjMzk7bGwga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50LCBidXQgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhcm91bmQgYGFmaXVjdl9uZXRkZXZfZXZlbnRgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHMzOTB4IGFyY2hpdGVjdHVyZS4gR29vZCB0byBrbm93LCBhcyB0aGF0IGNvbnN0cmFpbnMgdGhlIHNjb3BlLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lICppZiogdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBgQUZJVUNWYC4gVGhlIGRlcGVuZGVuY3kgY2hlY2sgbGVhZHMgbWUgdG8gZmluZCB0aGF0IGBRRVRIX0wzYCBvciBgSVVDVmAgc2VlbSB0byBiZSByZWxldmFudC4gVGhlIGxpbmUgYGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVmAgbWVhbnMgaXQgZGVmYXVsdHMgdG8gbW9kdWxhciAoYG1gKSBpZiBlaXRoZXIgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgZW5hYmxlZC4KCkxvb2tpbmcgYmFjayBhdCB0aGUgS2NvbmZpZywgYEFGSVVDVmAgaXMgZGVzY3JpYmVkIGFzICYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLiYjMzQ7IFNvLCBzaW1wbHkgZW5hYmxpbmcgYEFGSVVDVmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHdoaWNoIGNvbXBpbGVzIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBubyBvdGhlciBhY3Rpb25zLCBiZWNhdXNlIGl0IGlzIG1hbnVhbGx5IHNlbGVjdGFibGUgYmVjYXVzZSBpdCBoYXMgYSBwcm9tcHQuIEkgY2FuIGVuYWJsZSBgQUZJVUNWYCBhbmQgdGhlIG1vZHVsZSB3aWxsIGJlIGVuYWJsZWQuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGBJVUNWYCBpZiBJIGRvbiYjMzk7dCB3YW50IHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVVDVilcdCYjNDM7PSBpdWN2Lm9cbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcdCYjNDM7PSBhZl9pdWN2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRklVQ1YgUGF0Y2gqKgoKT2theSwgc28gYENPTkZJR19BRklVQ1ZgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgZmlybSB1cCBteSB0aGlua2luZy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlOiB0aGUgYWRkaXRpb24gb2YgdGhlIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBgc2tfZm9yX2VhY2hgIGxvb3Agd2l0aGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCYjMzk7cyBwcm90ZWN0aW5nIHRoZSBsaXN0IGl0ZXJhdGlvbi4gSSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NrIGlzIG1pc3NpbmcuCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGlzIHRyaWdnZXJlZCBieSBuZXR3b3JrIGRldmljZSBldmVudHMgbGlrZSBgTkVUREVWX1JFQk9PVGAgYW5kIGBORVRERVZfR09JTkdfRE9XTmAuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IHRob3NlIGVtdWxhdGluZyBzMzkweCB3aXRoIFFFTVUuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGZvY3VzIGdvZXMgaW1tZWRpYXRlbHkgdG8gdGhlIGtleSBzeW1ib2xzLCBgYWZpdWN2X25ldGRldl9ldmVudGAgKG9idmlvdXNseSksIGJ1dCBhbHNvIGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCBhcyB0aGV5IGFyZSByZWxhdGVkLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBgYWZpdWN2X25ldGRldl9ldmVudGAgaXMgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGlubGluZWQuIEJ1dCB3YWl0LCBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBJdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXJgLiBUaGF0IG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHJlYWNoYWJsZSB2aWEgdGhlIHN5bWJvbC4gYGl1Y3Zfc29ja19jcmVhdGVgIGFuZCBgaXVjdl9zb2NrX2JpbmRgIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy4KCkEgcXVpY2sgY3Jvc3MtY2hlY2s6IGBBRklVQ1ZgIHJlcXVpcmVzIGBORVRgLiBDb25maXJtZWQ6IGl0IHJlc2lkZXMgaW4gYG5ldC9gIGFuZCBgbmV0L2l1Y3YvS2NvbmZpZ2Agd2hpY2ggaXMgc291cmNlZCBmcm9tIGBuZXQvS2NvbmZpZ2AuIEFuZCB5ZXMsIGBTMzkwYCBpcyBhbiBhcmNoaXRlY3R1cmUsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHNwZWNpZnkgdGhhdCBpbiBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIHdlIGRlZmluaXRlbHkgc2hvdWxkIHNwZWNpZnkgYEFGSVVDVmAuCgpMZXQgbWUgY29uZmlybSB0aGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZC4gWWVzLiBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2VmdWw/IE5vcGUsIGBhZml1Y3ZfaHNfcmN2YCBpc24mIzM5O3QgdG91Y2hlZCwgdGhlIGJ1ZyB3YXMgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X25ldGRldl9ldmVudCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfbmV0ZGV2X2V2ZW50JiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBpdGVyYXRpb24gb2YgYGl1Y3Zfc2tfbGlzdC5oZWFkYCBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VIHMzOTB4IGVtdWxhdGlvbikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRkZXYgZXZlbnQgaGFuZGxlciBhbmQgc29ja2V0IGNyZWF0aW9uL2JpbmRpbmcgdG8gdHJpZ2dlciB0aGUgbGlzdCBpdGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNDo1NC43OTE3NTcwNzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzcyMDY5MTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gICAgXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gICAgXCJpdWN2X3NvY2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNDo1NC43OTE3NjIxODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzM1ODQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDozNDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4wMzQwMzljNTA5NDE4IDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMjEzLDYgKzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIFxcdGNhc2UgTkVUREVWX1JFQk9PVDpcXG4gXFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcXG4rXFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxuIFxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG4gXFx0XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiBcXHRcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZWhzX2RldiA9PSBldmVudF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIyMjMsNiArMjIyNCw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuIFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0RPV046XFxuIFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM0OjU1LjI0OTk5NTA3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMjYyNDM2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9uZXRkZXZfZXZlbnRcIixcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBpdGVyYXRpb24gb2YgYGl1Y3Zfc2tfbGlzdC5oZWFkYCBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VIHMzOTB4IGVtdWxhdGlvbikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRkZXYgZXZlbnQgaGFuZGxlciBhbmQgc29ja2V0IGNyZWF0aW9uL2JpbmRpbmcgdG8gdHJpZ2dlciB0aGUgbGlzdCBpdGVyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4wMzQwMzljNTA5NDE4IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMjEzLDYgKzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfUkVCT09UOlxuIFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcbitcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4gXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0XHRcdGlmICgoaXVjdi1cdTAwM2Voc19kZXYgPT0gZXZlbnRfZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0yMjIzLDYgKzIyMjQsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiBcdFx0XHR9XG4gXHRcdH1cbitcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTUuMjQ5OTk2ODk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNTIzMzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBgcmVhZF9sb2NrX2JoYCBhbmQgYHJlYWRfdW5sb2NrX2JoYCBhcm91bmQgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBgXHUwMDI2aXVjdl9za19saXN0LmhlYWRgIHdpdGhpbiB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBSaWdodCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB0aGV5J3JlIGludHJvZHVjaW5nIGxvY2tpbmcgdG8gcHJvdGVjdCB0aGF0IGxpbmtlZCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0IG1lIHRoaW5rLi4uIElVQ1YuLi4gcmlnaHQsIHRoYXQncyB0aGUgSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMuIEdpdmVuIHRoYXQgaXQgaW52b2x2ZXMgYSBmYWlybHkgc3BlY2lmaWMgcHJvdG9jb2wsIGEga2V5IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgbWlnaHQgYmUgc3BlY2lmaWMgdG8gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEknbGwganVtcCBvdmVyIHRvIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjaGVjay4gSSByZW1lbWJlciByZWFkaW5nIGFib3V0IGl0IHNvbWV3aGVyZSwgc28gaXQgc2hvdWxkIGJlIG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGlmIHRoaXMgaXMgY29uZGl0aW9uYWwgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTkuNDU1MjMzMTQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODMzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMy1cXHRkZXBlbmRzIG9uIFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTkuNTM3MDcxNDcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NDg2NTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhc2sgaGluZ2VzIG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gR29vZCBzdGFydGluZyBwb2ludC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBzeXprYWxsZXJgIHN1cHBvcnRzIGZ1enppbmcgb24gdGhhdCBhcmNoaXRlY3R1cmUuIEl0IGRvZXMsIHNwZWNpZmljYWxseSBgczM5MHhgLiBTbywgdGhhdCdzIHBvc2l0aXZlLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBhdm9pZGluZyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBOb3csIFFFTVUgKmRvZXMqIHN1cHBvcnQgYHMzOTB4YCBlbXVsYXRpb24sIHNvIHRoYXQgaW5pdGlhbCBjb25jZXJuIGlzIHBvdGVudGlhbGx5IG1pdGlnYXRlZC5cblxuR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0LCBsZXQncyBub3cgY29uc2lkZXIgdGhhdCB0aGUgcHJvbXB0IHJlZmVyZW5jZXMgYSBzcGVjaWZpYyBuZXR3b3JrIGNvbXBvbmVudCBgQUZfSVVDVmAuIElzIHRoYXQgZnV6emVkPyBUaGF0IGlzIGEgc29ja2V0IGZhbWlseSwgc28gdGhhdCdzIGEga2V5IGRldGFpbC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBgQUZfSVVDVmAgaXRzZWxmLiBMZXQncyBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gc3RhcnQgb3VyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MDMuNzIxOTM5MTUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTMwMjM5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MDMuOTg3MjQ4ODU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNjQ3Njg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgYElVQ1ZgIGZlYXR1cmUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFRvIGRvIHRoYXQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgdGhlIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVVDViwgb2J2aW91c2x5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBkZWZpbmVkIGluIHRoYXQgZmlsZSDigJMgdGhpbmdzIGxpa2UgYENPTkZJR19JVUNWYCwgcG90ZW50aWFsbHkgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGlmIGl0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTowNy4wMjM3Mjg2MThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNzM1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaXVjdi9LY29uZmlnOjI6Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy00LVxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG5uZXQvaXVjdi9LY29uZmlnOjU6XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxcbm5ldC9pdWN2L0tjb25maWc6MTE6Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMTItXFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZzoxMzpcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjE0OlxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctMTUtXFx0aGVscFxcbm5ldC9pdWN2L0tjb25maWc6MTY6XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbm5ldC9pdWN2L0tjb25maWctMTctXFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjA3LjA4OTEwNzkzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzg5MjQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQUZJVUNWIE5ldHdvcmsgRHJpdmVyKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHRoaXMgYEFGSVVDVmAgdGhpbmcsIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCwgcmlnaHQ/IFdhaXQgYSBtaW51dGUsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gWWVzLCBJIGNhbiBjb25maXJtIHRoYXQgUUVNVSBkb2VzIGluZGVlZCBlbXVsYXRlIHMzOTB4LiBPa2F5LCB0aGF0J3MgcHJvbWlzaW5nLiBJcyB0aGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmc/IFllcywgaXQgbG9va3MgbGlrZSBpdCdzIGEgc29ja2V0LWJhc2VkIHByb3RvY29sLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5IYW5nIG9u4oCmIGxvb2tpbmcgYXQgYGFmaXVjdl9uZXRkZXZfZXZlbnRgLCB0aGF0J3MgYSBuZXRkZXYgbm90aWZpZXIhIEl04oCZcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGV2ZW50IG9jY3Vycy4gQW5kIHRoZSBjb21taXQgSSdtIHJldmlld2luZyBhZGRzIGxvY2tpbmcgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE5vdywgaXMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBMZXQncyBzZWXigKYgT2theSwgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggYHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyKWAuIE9rYXksIGdvb2QuIFNvLCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXZlbnQgb2NjdXJzLCB0aGluZ3MgbGlrZSBgTkVUREVWX1JFQk9PVGAgb3IgYE5FVERFVl9HT0lOR19ET1dOYCwgaXQgaXRlcmF0ZXMgb3ZlciBgaXVjdl9za19saXN0LmhlYWRgLiBEZWZpbml0ZWx5IHJlYWNoYWJsZSFcblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQUZJVUNWYCBpcyB0aGUgbWFpbiBvbmUsIHJpZ2h0PyBPa2F5LCBzbyBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24gYW4geDg2IHN5c3RlbT8gTm8sIGl0ICpkZXBlbmRzIG9uIFMzOTAqIGV4cGxpY2l0bHkuIFNpbmNlIHN5emthbGxlciBydW5zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBhbmQgczM5MHggaXMgb25lIG9mIHRoZW0sIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIE9rYXksIHdlJ3ZlIGdvdCB0byBsaXN0IGBBRklVQ1ZgIGFzICp0aGUqIGNvbmZpZy4gV2FpdCwgZG9lcyBgQUZJVUNWYCAqcmVxdWlyZSogYElVQ1ZgPyBgQUZJVUNWYCBqdXN0IGRlcGVuZHMgb24gYFMzOTBgLiBMZXQncyBqdXN0IGRvdWJsZSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjE0LjMyODAzNTA5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDU1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxcbi0tXFxubmV0L2l1Y3YvS2NvbmZpZy0xMC1cXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gUzM5MFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNC4zOTAyNDUzMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0OTkyMTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQUZJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgXCJMZXQncyBzZWUgdGhlIGZ1bGwgYEFGSVVDVmAgY29uZmlnLFwiIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMuIGBBRklVQ1ZgIGlzIGxpa2VseSBhbiBhY3JvbnltLCBzcGVjaWZpYyB0byB0aGlzIGV4cGVydCdzIHdvcmssIGFuZCB0aGUgaW50ZXJlc3QgaXMgdG8gaW5zcGVjdCB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24uIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IGEgY29tcGxleCBzeXN0ZW0gd2l0aCBhIHNvcGhpc3RpY2F0ZWQgY29uZmlnIHRoYXQncyBjcml0aWNhbCB0byB0aGUgdGFzayBhdCBoYW5kLiBUaGUgcHJvbXB0IGlzbid0IGFza2luZyBmb3IgYW5hbHlzaXMsIHNvIEknbSBub3QgZ29pbmcgdG8gc3BlY3VsYXRlIGFib3V0IHdoYXQgYEFGSVVDVmAgKmlzKi4gSSB3YW50IHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNy43NDAxNzE3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNy43NDAzNTA5OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4ODQ5MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBBRklVQ1ZgIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQgd2FpdCwgdGhpcyBkb2Vzbid0IGV4aXN0IGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGFraW5nIHRoZSBkZXBlbmRlbmNpZXMgaW50byBhY2NvdW50LiBBaCwgeWVzLCBpdCBsaXZlcyB3aXRoaW4gdGhlIGBuZXQvYCBkaXJlY3RvcnksIHNvIGl0J3MgdGllZCB0byB0aGUgbmV0d29yayBzdWJzeXN0ZW0sIG9mIGNvdXJzZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMganVzdCBgQUZJVUNWYCBlbm91Z2g/IEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBkb2VzIGFwcGVhciBzby4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBhcyB0aGUgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyByZWFjdGluZyB0byBuZXR3b3JrIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjEuMTI4ODQ0Mjc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjE2Nz1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5IG4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwMy0vKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjA0OiAqIGFmaXVjdl9uZXRkZXZfZXZlbnQ6IGhhbmRsZSBuZXRkZXYgbm90aWZpZXIgY2hhaW4gZXZlbnRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMDUtICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDY6c3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwNy1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzc9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjM4OlxcdC5ub3RpZmllcl9jYWxsID0gYWZpdWN2X25ldGRldl9ldmVudCxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyMS4xOTQxNDYzMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MTAwNzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gdGhlIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoYXQncyBiZWVuIGZsYWdnZWQgZm9yIG1vZGlmaWNhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIHBlcmhhcHMgYXMgcmVsYXRlZCBvciBzdXBwb3J0aW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2suXG5cbkdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgZXZlbnRzIGFuZCwgcHJlc3VtYWJseSwgSVVDViBzb2NrZXRzLCBteSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgc29ja2V0IGNyZWF0aW9uIGFuZCBiaW5kaW5nIHByb2Nlc3MuIElmIHRoZSBzb2NrZXQgc2V0dXAgaXMgaW50ZWdyYWwgdG8gdGhlc2UgbmV0d29yayBldmVudHMsIHRoZW4gY2hhbmdlcyB0aGVyZSBjb3VsZCBkZWZpbml0ZWx5IGltcGFjdCB0aGluZ3MuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGNoZWNrIGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCBzaW5jZSB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSeKAmW0gdGhpbmtpbmcgdGhvc2UgY291bGQgYmUgdXNlZCB0byBzZXQgdXAgc29ja2V0cyB0byB1c2UgdGhpcyBsaXN0IG9mIHNvY2tldHMgd2XigJlyZSBsb29raW5nIGF0LCByaWdodD9cblxuU28sIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIHNvY2tldHMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQuIEdvdHRhIHNlZSBob3cgdGhlIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB0byBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyNS4yNTUxNTcwNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDcyMTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjI0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjE6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYyLVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjkyLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTM6XFx0LmNyZWF0ZVxcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyNS4zNjk4ODI3MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODEzNDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU29ja2V0IENyZWF0aW9uIGluIHRoZSBJVUNWIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIElVQ1Ygc29ja2V0IEFQSSBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMsIHNwZWNpZmljYWxseSB0aGUgY3JlYXRpb24gYW5kIGJpbmRpbmcgcGhhc2VzLiBJdCBsb29rcyBsaWtlIGBpdWN2X3NvY2tfY3JlYXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHNvY2tldCBpbml0aWFsaXphdGlvbiwgdGhlIGVxdWl2YWxlbnQgb2YgYSBgc29ja2V0KClgIGNhbGwgaW4gb3RoZXIgZW52aXJvbm1lbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBnYXRld2F5IGZvciBzZXR0aW5nIHVwIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBwYXJhbWV0ZXJzIGxhdGVyIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBJVUNWIHN0cnVjdHVyZXMuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgYXQgd2hhdCBvcHRpb25zLCBpZiBhbnksIHRoZSBjcmVhdGlvbiBmdW5jdGlvbiBnaXZlcy4gRm9sbG93aW5nIHVwIG9uIHRoYXQsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpbmRpbmcgcHJvY2VkdXJlIHdvdWxkIGJlLiBJIGltYWdpbmUgdGhlcmUncyBhIGZ1bmN0aW9uIGxpa2UgYGl1Y3Zfc29ja19iaW5kYCwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHNlbWFudGljLCB0aGF0IHdpbGwgYXNzb2NpYXRlIHRoZSBjcmVhdGVkIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgSVVDViBuZXR3b3JrLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IEkgY2FuIGRlZmluZSB0aGUgZW5kcG9pbnRzIG9yIGlkZW50aWZpZXJzIHVzZWQgdG8gZGVmaW5lIHRoZSBzb2NrZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBzb2NrZXRzIHRvIGNvbW11bmljYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjguNjA4MDIwMTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk4MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgxLS8qIEJpbmQgYW4gdW5ib3VuZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTgyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4My1cXHRcXHRcXHQgIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI0NC1cXHQucmVsZWFzZVxcdD0gaXVjdl9zb2NrX3JlbGVhc2UsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNDU6XFx0LmJpbmRcXHRcXHQ9IGl1Y3Zfc29ja19iaW5kLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQ2LVxcdC5jb25uZWN0XFx0PSBpdWN2X3NvY2tfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjguNjg2MDA3OTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTc5NzU3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQUZfSVVDViBMb2NraW5nIGFuZCBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgbG9ja2luZyB0byB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IHN5bWJvbC4gVG8gcHJvcGVybHkgdGVzdCB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGNyZWF0ZSBhIHNwZWNpZmljIHNjZW5hcmlvLiBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdHJpZ2dlciB0aGUgbmV3IGxvY2sgaXMgdG8gY3JlYXRlIGFuIEFGX0lVQ1Ygc29ja2V0IGFuZCB0aGVuIGdlbmVyYXRlIGEgbmV0d29yayBkZXZpY2UgZXZlbnQuIEJyaW5naW5nIGFuIGludGVyZmFjZSBkb3duIHNob3VsZCBkbyB0aGUgdHJpY2suIFRoYXQgbWVhbnMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldCBmb3IgbXkgZXhhbWluYXRpb24uXG5cbk5vdywgbGV0J3Mgc2VlLi4uIGdldHRpbmcgYW4gQUZfSVVDViBzb2NrZXQgY3JlYXRlZCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgbG9vayBhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgdG9vLiBUaG9zZSB3aWxsIGJlIGNydWNpYWwgZm9yIGdldHRpbmcgYSBzb2NrZXQgaW5pdGlhbGl6ZWQgYW5kIG9uIHRoZSBzeXN0ZW0uXG5cbkFoYSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGhvdyB0aGUgc29ja2V0IGdldHMgb250byB0aGUgYGl1Y3Zfc2tfbGlzdGAuIFRoYXQgbGlzdCBpcyBjbGVhcmx5IHRoZSB0YXJnZXQgb2YgYSBsb2NrLCBzbyB3aGVuIHRoYXQgaGFwcGVucyB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgcG9pbnQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHNvY2tldCBpcyBhZGRlZCB0byBgaXVjdl9za19saXN0YC4gVGhhdCBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTozMi44NDM5ODgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDM4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc2tfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTk1PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk4OlxcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTktXFx0LmF1dG9iaW5kX25hbWUgPSBBVE9NSUNfSU5JVCgwKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTI2OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjcyOlxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3My1cXHRcXHRpZiAoIW1lbWNtcChcXHUwMDI2aXVjdl9zayhzayktXFx1MDAzZXNyY19uYW1lLCBubSwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzI0PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMyOTpcXHRpdWN2X3NvY2tfdW5saW5rKFxcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzMwLVxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTA1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MDY6XFx0aXVjdl9zb2NrX2xpbmsoXFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MDctXFx0cmV0dXJuIHNrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTcyLVxcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU3MzpcXHRcXHQgIFxcXCIlMDh4XFxcIiwgYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNml1Y3Zfc2tfbGlzdC5hdXRvYmluZF9uYW1lKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU3NC1cXHR3aGlsZSAoX19pdWN2X2dldF9zb2NrX2J5X25hbWUobmFtZSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTc1LVxcdFxcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCIlMDh4XFxcIixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTc2OlxcdFxcdFxcdCAgYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNml1Y3Zfc2tfbGlzdC5hdXRvYmluZF9uYW1lKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU3Ny1cXHR9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjAyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MDM6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDQtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjU3LVxcdC8qIFJlbGVhc2UgdGhlIHNvY2tldCBsaXN0IGxvY2sgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU4OlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTktZG9uZTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3OlxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVxcdF9faXVjdl9hdXRvX25hbWUoaXVjdik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3OTpcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjgwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjE5LVxcdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MjA6XFx0cmVhZF9sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjEtXFx0aXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjItXFx0c2sgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjIzOlxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjQtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzItXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMzOlxcdHJlYWRfdW5sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzQtXFx0aWYgKCFpdWN2KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNTg9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3OS1cXHRzayA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODA6XFx0cmVhZF9sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODE6XFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgyLVxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTA4LVxcdFxcdHNvY2tfaG9sZChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMDk6XFx0cmVhZF91bmxvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjExMC1cXHRpZiAoIWl1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIwNj1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTUtXFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIxNjpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIxNzpcXHRcXHRza19mb3JfZWFjaChzaywgXFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTgtXFx0XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjYtXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI3OlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjMyLjk2NDAzNjM5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjQxNzE4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEFGSVVDViBTb2NrZXQgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgYWZpdWN2X25ldGRldl9ldmVudGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgbmV0ZGV2IGV2ZW50cywgd2hpY2ggbWFrZXMgaXQgdGhlIGNydWNpYWwgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBJJ20gYWxzbyBub3RpbmcgdGhhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2VlbSBpbXBvcnRhbnQgZm9yIHNvY2tldCBjcmVhdGlvbiwgc28gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsZXZhbnQsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGFyb3VuZCBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIHdoaWNoIG1lYW5zIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHMzOTB4IGFyY2hpdGVjdHVyZS4gR29vZCB0byBrbm93LCBhcyB0aGF0IGNvbnN0cmFpbnMgdGhlIHNjb3BlLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lICppZiogdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBgQUZJVUNWYC4gVGhlIGRlcGVuZGVuY3kgY2hlY2sgbGVhZHMgbWUgdG8gZmluZCB0aGF0IGBRRVRIX0wzYCBvciBgSVVDVmAgc2VlbSB0byBiZSByZWxldmFudC4gVGhlIGxpbmUgYGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVmAgbWVhbnMgaXQgZGVmYXVsdHMgdG8gbW9kdWxhciAoYG1gKSBpZiBlaXRoZXIgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgZW5hYmxlZC5cblxuTG9va2luZyBiYWNrIGF0IHRoZSBLY29uZmlnLCBgQUZJVUNWYCBpcyBkZXNjcmliZWQgYXMgXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuXCIgU28sIHNpbXBseSBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudCwgd2hpY2ggY29tcGlsZXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgd2lsbCBiZSBlbmFibGVkIHdpdGggbm8gb3RoZXIgYWN0aW9ucywgYmVjYXVzZSBpdCBpcyBtYW51YWxseSBzZWxlY3RhYmxlIGJlY2F1c2UgaXQgaGFzIGEgcHJvbXB0LiBJIGNhbiBlbmFibGUgYEFGSVVDVmAgYW5kIHRoZSBtb2R1bGUgd2lsbCBiZSBlbmFibGVkLiBJIGRvbid0IG5lZWQgdG8gZW5hYmxlIGBJVUNWYCBpZiBJIGRvbid0IHdhbnQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6NDAuNjA1NzU3NTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMzMTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXFx0Kz0gaXVjdi5vXFxubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVxcdCs9IGFmX2l1Y3Yub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTo0MC42ODUwOTQxODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1NTI0NjcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUZJVUNWIFBhdGNoKipcblxuT2theSwgc28gYENPTkZJR19BRklVQ1ZgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCdzIHN0ZXAgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBmaXJtIHVwIG15IHRoaW5raW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhlIGFkZGl0aW9uIG9mIHRoZSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHNrX2Zvcl9lYWNoYCBsb29wIHdpdGhpbiBgYWZpdWN2X25ldGRldl9ldmVudGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeDsgaXQncyBwcm90ZWN0aW5nIHRoZSBsaXN0IGl0ZXJhdGlvbi4gSSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NrIGlzIG1pc3NpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgZGV2aWNlIGV2ZW50cyBsaWtlIGBORVRERVZfUkVCT09UYCBhbmQgYE5FVERFVl9HT0lOR19ET1dOYC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZW11bGF0aW5nIHMzOTB4IHdpdGggUUVNVS4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBmb2N1cyBnb2VzIGltbWVkaWF0ZWx5IHRvIHRoZSBrZXkgc3ltYm9scywgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIChvYnZpb3VzbHkpLCBidXQgYWxzbyBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgYXMgdGhleSBhcmUgcmVsYXRlZC5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBgYWZpdWN2X25ldGRldl9ldmVudGAgaXMgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgaW5saW5lZC4gQnV0IHdhaXQsIGl0J3MgKm5vdCogaW5saW5lZC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXJgLiBUaGF0IG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHJlYWNoYWJsZSB2aWEgdGhlIHN5bWJvbC4gYGl1Y3Zfc29ja19jcmVhdGVgIGFuZCBgaXVjdl9zb2NrX2JpbmRgIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy5cblxuQSBxdWljayBjcm9zcy1jaGVjazogYEFGSVVDVmAgcmVxdWlyZXMgYE5FVGAuIENvbmZpcm1lZDogaXQgcmVzaWRlcyBpbiBgbmV0L2AgYW5kIGBuZXQvaXVjdi9LY29uZmlnYCB3aGljaCBpcyBzb3VyY2VkIGZyb20gYG5ldC9LY29uZmlnYC4gQW5kIHllcywgYFMzOTBgIGlzIGFuIGFyY2hpdGVjdHVyZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWZ5IHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIb3dldmVyLCB3ZSBkZWZpbml0ZWx5IHNob3VsZCBzcGVjaWZ5IGBBRklVQ1ZgLlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZC4gWWVzLiBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2VmdWw/IE5vcGUsIGBhZml1Y3ZfaHNfcmN2YCBpc24ndCB0b3VjaGVkLCB0aGUgYnVnIHdhcyBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTo0OC4zNDAzNDM2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjA4MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X25ldGRldl9ldmVudFwiLFxuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gICAgXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gICAgXCJpdWN2X3NvY2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm55lt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 20:14:55 +0000 UTC FinishedAt: 2026-08-03 20:35:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFIUCV" ], "series_id": "5f0df253-87d5-42be-b3f8-c23c2bf6cd24" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "afiucv_netdev_event", "iucv_sock_create", "iucv_sock_bind" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9uZXRkZXZfZXZlbnQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pdWN2L2FmX2l1Y3YuYyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xuaW5kZXggZWEwNDdiYWI2NWU3Yy4uMDM0MDM5YzUwOTQxOCAxMDA2NDRcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5AQCAtMjIxMyw2ICYjNDM7MjIxMyw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4gXHRzd2l0Y2ggKGV2ZW50KSB7XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9HT0lOR19ET1dOOlxuJiM0MztcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4gXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0XHRcdGlmICgoaXVjdi1cdTAwM2Voc19kZXYgPT0gZXZlbnRfZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0yMjIzLDYgJiM0MzsyMjI0LDcgQEAgc3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiBcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1x0XHRyZWFkX3VubG9ja19iaChcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfRE9XTjpcbiBcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGSVVDViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FmaXVjdl9uZXRkZXZfZXZlbnQmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfYmluZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jCmluZGV4IGVhMDQ3YmFiNjVlN2MuLjAzNDAzOWM1MDk0MTggMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXVjdi9hZl9pdWN2LmMKQEAgLTIyMTMsNiAmIzQzOzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIE5FVERFVl9SRUJPT1Q6CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKJiM0MzsJCXJlYWRfbG9ja19iaCgmYW1wO2l1Y3Zfc2tfbGlzdC5sb2NrKTsKIAkJc2tfZm9yX2VhY2goc2ssICZhbXA7aXVjdl9za19saXN0LmhlYWQpIHsKIAkJCWl1Y3YgPSBpdWN2X3NrKHNrKTsKIAkJCWlmICgoaXVjdi0mZ3Q7aHNfZGV2ID09IGV2ZW50X2RldikgJmFtcDsmYW1wOwpAQCAtMjIyMyw2ICYjNDM7MjIyNCw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiAJCQl9CiAJCX0KJiM0MzsJCXJlYWRfdW5sb2NrX2JoKCZhbXA7aXVjdl9za19saXN0LmxvY2spOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSYjMzk7dmUgYWRkZWQgYHJlYWRfbG9ja19iaGAgYW5kIGByZWFkX3VubG9ja19iaGAgYXJvdW5kIGEgbG9vcCB0aGF0IGl0ZXJhdGVzIHRocm91Z2ggYCZhbXA7aXVjdl9za19saXN0LmhlYWRgIHdpdGhpbiB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBSaWdodCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBsb2NraW5nIHRvIHByb3RlY3QgdGhhdCBsaW5rZWQgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQgcHJldmVudHMgcmFjZSBjb25kaXRpb25zLgoKTm93LCBsZXQgbWUgdGhpbmsuLi4gSVVDVi4uLiByaWdodCwgdGhhdCYjMzk7cyB0aGUgSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMuIEdpdmVuIHRoYXQgaXQgaW52b2x2ZXMgYSBmYWlybHkgc3BlY2lmaWMgcHJvdG9jb2wsIGEga2V5IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgbWlnaHQgYmUgc3BlY2lmaWMgdG8gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gY2hlY2suIEkgcmVtZW1iZXIgcmVhZGluZyBhYm91dCBpdCBzb21ld2hlcmUsIHNvIGl0IHNob3VsZCBiZSBvYnZpb3VzIGZyb20gdGhlIEtjb25maWcgZmlsZSBpZiB0aGlzIGlzIGNvbmRpdGlvbmFsIG9yIG5vdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2l1Y3YvS2NvbmZpZzoyOmNvbmZpZyBJVUNWXG5uZXQvaXVjdi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGFyZ2V0IEVudmlyb25tZW50KioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhc2sgaGluZ2VzIG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gR29vZCBzdGFydGluZyBwb2ludC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBzeXprYWxsZXJgIHN1cHBvcnRzIGZ1enppbmcgb24gdGhhdCBhcmNoaXRlY3R1cmUuIEl0IGRvZXMsIHNwZWNpZmljYWxseSBgczM5MHhgLiBTbywgdGhhdCYjMzk7cyBwb3NpdGl2ZS4gSG93ZXZlciwgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgYXZvaWRpbmcgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGhhcmR3YXJlIGVtdWxhdGlvbi4gTm93LCBRRU1VICpkb2VzKiBzdXBwb3J0IGBzMzkweGAgZW11bGF0aW9uLCBzbyB0aGF0IGluaXRpYWwgY29uY2VybiBpcyBwb3RlbnRpYWxseSBtaXRpZ2F0ZWQuCgpHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIHN1cHBvcnQsIGxldCYjMzk7cyBub3cgY29uc2lkZXIgdGhhdCB0aGUgcHJvbXB0IHJlZmVyZW5jZXMgYSBzcGVjaWZpYyBuZXR3b3JrIGNvbXBvbmVudCBgQUZfSVVDVmAuIElzIHRoYXQgZnV6emVkPyBUaGF0IGlzIGEgc29ja2V0IGZhbWlseSwgc28gdGhhdCYjMzk7cyBhIGtleSBkZXRhaWwuIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGBBRl9JVUNWYCBpdHNlbGYuIExldCYjMzk7cyBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gc3RhcnQgb3VyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQUZfSVVDViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMTUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIElVQ1YgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGBJVUNWYCBmZWF0dXJlIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlLCB0aGUgYG5ldC9pdWN2L0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVVDViwgb2J2aW91c2x5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgZGVmaW5lZCBpbiB0aGF0IGZpbGUg4oCTIHRoaW5ncyBsaWtlIGBDT05GSUdfSVVDVmAsIHBvdGVudGlhbGx5IHdpdGggZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byB1bmRlcnN0YW5kIGl0cyBjdXJyZW50IHN0YXRlIGFuZCBpZiBpdCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxubmV0L2l1Y3YvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnLTQtXHRkZWZfdHJpc3RhdGUgeSBpZiBTMzkwXG5uZXQvaXVjdi9LY29uZmlnOjU6XHRwcm9tcHQgXCYjMzQ7SVVDViBzdXBwb3J0IChTMzkwIC0gei9WTSBvbmx5KVwmIzM0O1xubmV0L2l1Y3YvS2NvbmZpZy02LVx0aGVscFxuLS1cbm5ldC9pdWN2L0tjb25maWctMTAtXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1Zcbm5ldC9pdWN2L0tjb25maWctMTItXHRkZXBlbmRzIG9uIFMzOTBcbm5ldC9pdWN2L0tjb25maWc6MTM6XHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1Zcbm5ldC9pdWN2L0tjb25maWc6MTQ6XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG5uZXQvaXVjdi9LY29uZmlnLTE1LVx0aGVscFxubmV0L2l1Y3YvS2NvbmZpZzoxNjpcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBBRl9JVUNWIHNvY2tldCBhcHBsaWNhdGlvbnNcbm5ldC9pdWN2L0tjb25maWctMTctXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEFGSVVDViBOZXR3b3JrIERyaXZlcioqCgpPa2F5LCBzbyB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQsIHRoaXMgYEFGSVVDVmAgdGhpbmcsIHRoYXQmIzM5O3MgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQsIHJpZ2h0PyBXYWl0IGEgbWludXRlLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIFFFTVUgZW52aXJvbm1lbnQ/IFllcywgSSBjYW4gY29uZmlybSB0aGF0IFFFTVUgZG9lcyBpbmRlZWQgZW11bGF0ZSBzMzkweC4gT2theSwgdGhhdCYjMzk7cyBwcm9taXNpbmcuIElzIHRoaXMgYWN0dWFsbHkgd29ydGggZnV6emluZz8gWWVzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgc29ja2V0LWJhc2VkIHByb3RvY29sLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLgoKSGFuZyBvbuKApiBsb29raW5nIGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCwgdGhhdCYjMzk7cyBhIG5ldGRldiBub3RpZmllciEgSXTigJlzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXZlbnQgb2NjdXJzLiBBbmQgdGhlIGNvbW1pdCBJJiMzOTttIHJldmlld2luZyBhZGRzIGxvY2tpbmcgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE5vdywgaXMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBMZXQmIzM5O3Mgc2Vl4oCmIE9rYXksIGl0JiMzOTtzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZhbXA7YWZpdWN2X25ldGRldl9ub3RpZmllcilgLiBPa2F5LCBnb29kLiBTbywgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGV2ZW50IG9jY3VycywgdGhpbmdzIGxpa2UgYE5FVERFVl9SRUJPT1RgIG9yIGBORVRERVZfR09JTkdfRE9XTmAsIGl0IGl0ZXJhdGVzIG92ZXIgYGl1Y3Zfc2tfbGlzdC5oZWFkYC4gRGVmaW5pdGVseSByZWFjaGFibGUhCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQUZJVUNWYCBpcyB0aGUgbWFpbiBvbmUsIHJpZ2h0PyBPa2F5LCBzbyBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24gYW4geDg2IHN5c3RlbT8gTm8sIGl0ICpkZXBlbmRzIG9uIFMzOTAqIGV4cGxpY2l0bHkuIFNpbmNlIHN5emthbGxlciBydW5zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBhbmQgczM5MHggaXMgb25lIG9mIHRoZW0sIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIE9rYXksIHdlJiMzOTt2ZSBnb3QgdG8gbGlzdCBgQUZJVUNWYCBhcyAqdGhlKiBjb25maWcuIFdhaXQsIGRvZXMgYEFGSVVDVmAgKnJlcXVpcmUqIGBJVUNWYD8gYEFGSVVDVmAganVzdCBkZXBlbmRzIG9uIGBTMzkwYC4gTGV0JiMzOTtzIGp1c3QgZG91YmxlIGNoZWNrIGZvciBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRklVQ1YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxuLS1cbm5ldC9pdWN2L0tjb25maWctMTAtXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1Zcbm5ldC9pdWN2L0tjb25maWctMTItXHRkZXBlbmRzIG9uIFMzOTBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEFGSVVDViBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgJiMzNDtMZXQmIzM5O3Mgc2VlIHRoZSBmdWxsIGBBRklVQ1ZgIGNvbmZpZywmIzM0OyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzcGVjaWZpYy4gYEFGSVVDVmAgaXMgbGlrZWx5IGFuIGFjcm9ueW0sIHNwZWNpZmljIHRvIHRoaXMgZXhwZXJ0JiMzOTtzIHdvcmssIGFuZCB0aGUgaW50ZXJlc3QgaXMgdG8gaW5zcGVjdCB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcHJvYmFibHkgYSBjb21wbGV4IHN5c3RlbSB3aXRoIGEgc29waGlzdGljYXRlZCBjb25maWcgdGhhdCYjMzk7cyBjcml0aWNhbCB0byB0aGUgdGFzayBhdCBoYW5kLiBUaGUgcHJvbXB0IGlzbiYjMzk7dCBhc2tpbmcgZm9yIGFuYWx5c2lzLCBzbyBJJiMzOTttIG5vdCBnb2luZyB0byBzcGVjdWxhdGUgYWJvdXQgd2hhdCBgQUZJVUNWYCAqaXMqLiBJIHdhbnQgdGhlIGZ1bGwgcGljdHVyZSwgYWxsIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXVjdi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFxuICAxMTpcdGNvbmZpZyBBRklVQ1ZcbiAgMTI6XHRcdGRlcGVuZHMgb24gUzM5MFxuICAxMzpcdFx0ZGVmX3RyaXN0YXRlIG0gaWYgUUVUSF9MMyB8fCBJVUNWXG4gIDE0Olx0XHRwcm9tcHQgXCYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXCYjMzQ7XG4gIDE1Olx0XHRoZWxwXG4gIDE2Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXG4gIDE3Olx0XHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cbiAgMTg6XHRcdCAgSGlwZXJTb2NrZXRzLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYEFGSVVDVmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCB3YWl0LCB0aGlzIGRvZXNuJiMzOTt0IGV4aXN0IGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRha2luZyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYWNjb3VudC4gQWgsIHllcywgaXQgbGl2ZXMgd2l0aGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LCBzbyBpdCYjMzk7cyB0aWVkIHRvIHRoZSBuZXR3b3JrIHN1YnN5c3RlbSwgb2YgY291cnNlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMganVzdCBgQUZJVUNWYCBlbm91Z2g/IEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBkb2VzIGFwcGVhciBzby4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgZXhhbWluZSB0aGUgZnVuY3Rpb24gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFzIHRoZSBuZXh0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIHJlYWN0aW5nIHRvIG5ldHdvcmsgZXZlbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZml1Y3ZfbmV0ZGV2X2V2ZW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz0yMTY3PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkgbilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwMy0vKlxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDQ6ICogYWZpdWN2X25ldGRldl9ldmVudDogaGFuZGxlIG5ldGRldiBub3RpZmllciBjaGFpbiBldmVudHNcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjA1LSAqL1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDY6c3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjA3LVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzc9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyID0ge1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMzg6XHQubm90aWZpZXJfY2FsbCA9IGFmaXVjdl9uZXRkZXZfZXZlbnQsXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJVUNWIE5ldHdvcmtpbmcgQ29kZSoqCgpPa2F5LCBzbyB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uIGlzIHRoZSBvbmUgdGhhdCYjMzk7cyBiZWVuIGZsYWdnZWQgZm9yIG1vZGlmaWNhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIHBlcmhhcHMgYXMgcmVsYXRlZCBvciBzdXBwb3J0aW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2suCgpHaXZlbiB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbmV0d29yayBldmVudHMgYW5kLCBwcmVzdW1hYmx5LCBJVUNWIHNvY2tldHMsIG15IGludHVpdGlvbiBsZWFucyB0b3dhcmRzIGZvY3VzaW5nIG9uIHRoZSBzb2NrZXQgY3JlYXRpb24gYW5kIGJpbmRpbmcgcHJvY2Vzcy4gSWYgdGhlIHNvY2tldCBzZXR1cCBpcyBpbnRlZ3JhbCB0byB0aGVzZSBuZXR3b3JrIGV2ZW50cywgdGhlbiBjaGFuZ2VzIHRoZXJlIGNvdWxkIGRlZmluaXRlbHkgaW1wYWN0IHRoaW5ncy4KCkkmIzM5O2xsIHNwZWNpZmljYWxseSBjaGVjayBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2luY2UgdGhleSYjMzk7cmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJ4oCZbSB0aGlua2luZyB0aG9zZSBjb3VsZCBiZSB1c2VkIHRvIHNldCB1cCBzb2NrZXRzIHRvIHVzZSB0aGlzIGxpc3Qgb2Ygc29ja2V0cyB3ZeKAmXJlIGxvb2tpbmcgYXQsIHJpZ2h0PwoKU28sIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIHNvY2tldHMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQuIEdvdHRhIHNlZSBob3cgdGhlIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB0byBgYWZpdWN2X25ldGRldl9ldmVudGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTIyNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXVjdl9zb2NrX29wcyA9IHtcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI2MC1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjYxOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYyLVx0XHRcdCAgICBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjI5MD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgaXVjdl9zb2NrX2ZhbWlseV9vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyOTItXHQub3duZXJcdD0gVEhJU19NT0RVTEUsXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjI5MzpcdC5jcmVhdGVcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjk0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipTb2NrZXQgQ3JlYXRpb24gaW4gdGhlIElVQ1YgQ29udGV4dCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBJVUNWIHNvY2tldCBBUEkgaGVyZS4gTXkgZm9jdXMgaXMgb24gdGhlIGZvdW5kYXRpb25hbCBhc3BlY3RzLCBzcGVjaWZpY2FsbHkgdGhlIGNyZWF0aW9uIGFuZCBiaW5kaW5nIHBoYXNlcy4gSXQgbG9va3MgbGlrZSBgaXVjdl9zb2NrX2NyZWF0ZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBzb2NrZXQgaW5pdGlhbGl6YXRpb24sIHRoZSBlcXVpdmFsZW50IG9mIGEgYHNvY2tldCgpYCBjYWxsIGluIG90aGVyIGVudmlyb25tZW50cy4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIHNldHRpbmcgdXAgYSBjb21tdW5pY2F0aW9uIGVuZHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBwYXJhbWV0ZXJzIGxhdGVyIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBJVUNWIHN0cnVjdHVyZXMuIEkmIzM5O2xsIGFsc28gd2FudCB0byBsb29rIGF0IHdoYXQgb3B0aW9ucywgaWYgYW55LCB0aGUgY3JlYXRpb24gZnVuY3Rpb24gZ2l2ZXMuIEZvbGxvd2luZyB1cCBvbiB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgYmluZGluZyBwcm9jZWR1cmUgd291bGQgYmUuIEkgaW1hZ2luZSB0aGVyZSYjMzk7cyBhIGZ1bmN0aW9uIGxpa2UgYGl1Y3Zfc29ja19iaW5kYCwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHNlbWFudGljLCB0aGF0IHdpbGwgYXNzb2NpYXRlIHRoZSBjcmVhdGVkIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgSVVDViBuZXR3b3JrLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyBJIGNhbiBkZWZpbmUgdGhlIGVuZHBvaW50cyBvciBpZGVudGlmaWVycyB1c2VkIHRvIGRlZmluZSB0aGUgc29ja2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGUgc29ja2V0cyB0byBjb21tdW5pY2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXVjdi9hZl9pdWN2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4MS0vKiBCaW5kIGFuIHVuYm91bmQgc29ja2V0ICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTgyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgzLVx0XHRcdCAgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNDQtXHQucmVsZWFzZVx0PSBpdWN2X3NvY2tfcmVsZWFzZSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjQ1Olx0LmJpbmRcdFx0PSBpdWN2X3NvY2tfYmluZCxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQ2LVx0LmNvbm5lY3RcdD0gaXVjdl9zb2NrX2Nvbm5lY3QsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgQUZfSVVDViBMb2NraW5nIGFuZCBFdmVudCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGFkZGluZyBsb2NraW5nIHRvIHRoZSBgYWZpdWN2X25ldGRldl9ldmVudGAgZnVuY3Rpb24uIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoYXQgc3ltYm9sLiBUbyBwcm9wZXJseSB0ZXN0IHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGNyZWF0ZSBhIHNwZWNpZmljIHNjZW5hcmlvLiBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdHJpZ2dlciB0aGUgbmV3IGxvY2sgaXMgdG8gY3JlYXRlIGFuIEFGX0lVQ1Ygc29ja2V0IGFuZCB0aGVuIGdlbmVyYXRlIGEgbmV0d29yayBkZXZpY2UgZXZlbnQuIEJyaW5naW5nIGFuIGludGVyZmFjZSBkb3duIHNob3VsZCBkbyB0aGUgdHJpY2suIFRoYXQgbWVhbnMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldCBmb3IgbXkgZXhhbWluYXRpb24uCgpOb3csIGxldCYjMzk7cyBzZWUuLi4gZ2V0dGluZyBhbiBBRl9JVUNWIHNvY2tldCBjcmVhdGVkIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBsb29rIGF0IGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCB0b28uIFRob3NlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgZ2V0dGluZyBhIHNvY2tldCBpbml0aWFsaXplZCBhbmQgb24gdGhlIHN5c3RlbS4KCkFoYSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGhvdyB0aGUgc29ja2V0IGdldHMgb250byB0aGUgYGl1Y3Zfc2tfbGlzdGAuIFRoYXQgbGlzdCBpcyBjbGVhcmx5IHRoZSB0YXJnZXQgb2YgYSBsb2NrLCBzbyB3aGVuIHRoYXQgaGFwcGVucyB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgcG9pbnQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHNvY2tldCBpcyBhZGRlZCB0byBgaXVjdl9za19saXN0YC4gVGhhdCBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXVjdl9za19saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvYWZfaXVjdi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pdWN2L2FmX2l1Y3YuYz05NT1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5KTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cbm5ldC9pdWN2L2FmX2l1Y3YuYzo5NzpzdGF0aWMgc3RydWN0IGl1Y3Zfc29ja19saXN0IGl1Y3Zfc2tfbGlzdCA9IHtcbm5ldC9pdWN2L2FmX2l1Y3YuYzo5ODpcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYy05OS1cdC5hdXRvYmluZF9uYW1lID0gQVRPTUlDX0lOSVQoMClcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjY4PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX19pdWN2X2dldF9zb2NrX2J5X25hbWUoY2hhciAqbm0pXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3MS1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoyNzI6XHRza19mb3JfZWFjaChzaywgXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjczLVx0XHRpZiAoIW1lbWNtcChcdTAwMjZpdWN2X3NrKHNrKS1cdTAwM2VzcmNfbmFtZSwgbm0sIDgpKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz0zMjQ9c3RhdGljIHZvaWQgaXVjdl9zb2NrX2tpbGwoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXG5uZXQvaXVjdi9hZl9pdWN2LmM6MzI5Olx0aXVjdl9zb2NrX3VubGluayhcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMzAtXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYz00NjY9c3RhdGljIHN0cnVjdCBzb2NrICppdWN2X3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvLCBnZnBfdCBwcmlvLCBpbnQga2Vybilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTA1LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjUwNjpcdGl1Y3Zfc29ja19saW5rKFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTUwNy1cdHJldHVybiBzaztcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTY4PXN0YXRpYyB2b2lkIF9faXVjdl9hdXRvX25hbWUoc3RydWN0IGl1Y3Zfc29jayAqaXVjdilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTcyLVx0c2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1NzM6XHRcdCAgXCYjMzQ7JTA4eFwmIzM0OywgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aXVjdl9za19saXN0LmF1dG9iaW5kX25hbWUpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzQtXHR3aGlsZSAoX19pdWN2X2dldF9zb2NrX2J5X25hbWUobmFtZSkpIHtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzUtXHRcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFwmIzM0OyUwOHhcJiMzNDssXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTc2Olx0XHRcdCAgYXRvbWljX2luY19yZXR1cm4oXHUwMDI2aXVjdl9za19saXN0LmF1dG9iaW5kX25hbWUpKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy01NzctXHR9XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTU4Mj1zdGF0aWMgaW50IGl1Y3Zfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDItXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjAzOlx0d3JpdGVfbG9ja19iaChcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtNjA0LVxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTctXHQvKiBSZWxlYXNlIHRoZSBzb2NrZXQgbGlzdCBsb2NrICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU4Olx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTktZG9uZTpcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9NjY1PXN0YXRpYyBpbnQgaXVjdl9zb2NrX2F1dG9iaW5kKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc2LVxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3NzpcdHdyaXRlX2xvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTY3OC1cdF9faXVjdl9hdXRvX25hbWUoaXVjdik7XG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc5Olx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbm5ldC9pdWN2L2FmX2l1Y3YuYy02ODAtXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYxOS1cdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYyMDpcdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMTYyMS1cdGl1Y3YgPSBOVUxMO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjItXHRzayA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MTYyMzpcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZClcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjI0LVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gSVVDVl9MSVNURU4gXHUwMDI2XHUwMDI2XG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzItXHRcdH1cbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMzOlx0cmVhZF91bmxvY2soXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzQtXHRpZiAoIWl1Y3YpXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNTg9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2l1Y3YvYWZfaXVjdi5jLTIwNzktXHRzayA9IE5VTEw7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MDpcdHJlYWRfbG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjA4MTpcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIwODItXHRcdGlmICh0cmFuc19oZHItXHUwMDNlZmxhZ3MgPT0gQUZfSVVDVl9GTEFHX1NZTikge1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTA4LVx0XHRzb2NrX2hvbGQoc2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMDk6XHRyZWFkX3VubG9jayhcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XG5uZXQvaXVjdi9hZl9pdWN2LmMtMjExMC1cdGlmICghaXVjdilcbi0tXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIwNj1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjE1LVx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjE2Olx0XHRyZWFkX2xvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMTc6XHRcdHNrX2Zvcl9lYWNoKHNrLCBcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTgtXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuLS1cbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjI2LVx0XHR9XG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIyNzpcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjIyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFGSVVDViBTb2NrZXQgU3VwcG9ydCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBjZW50ZXJlZCBhcm91bmQgdGhlIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBjZW50cmFsIHBvaW50IGZvciBoYW5kbGluZyBuZXRkZXYgZXZlbnRzLCB3aGljaCBtYWtlcyBpdCB0aGUgY3J1Y2lhbCBzeW1ib2wgdG8gaW52ZXN0aWdhdGUuIEkmIzM5O20gYWxzbyBub3RpbmcgdGhhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2VlbSBpbXBvcnRhbnQgZm9yIHNvY2tldCBjcmVhdGlvbiwgc28gSSYjMzk7bGwga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50LCBidXQgdGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byBiZSBhcm91bmQgYGFmaXVjdl9uZXRkZXZfZXZlbnRgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBDbGVhcmx5LCBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYCwgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHMzOTB4IGFyY2hpdGVjdHVyZS4gR29vZCB0byBrbm93LCBhcyB0aGF0IGNvbnN0cmFpbnMgdGhlIHNjb3BlLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lICppZiogdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBgQUZJVUNWYC4gVGhlIGRlcGVuZGVuY3kgY2hlY2sgbGVhZHMgbWUgdG8gZmluZCB0aGF0IGBRRVRIX0wzYCBvciBgSVVDVmAgc2VlbSB0byBiZSByZWxldmFudC4gVGhlIGxpbmUgYGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVmAgbWVhbnMgaXQgZGVmYXVsdHMgdG8gbW9kdWxhciAoYG1gKSBpZiBlaXRoZXIgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgZW5hYmxlZC4KCkxvb2tpbmcgYmFjayBhdCB0aGUgS2NvbmZpZywgYEFGSVVDVmAgaXMgZGVzY3JpYmVkIGFzICYjMzQ7QUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpLiYjMzQ7IFNvLCBzaW1wbHkgZW5hYmxpbmcgYEFGSVVDVmAgc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHdoaWNoIGNvbXBpbGVzIGBuZXQvaXVjdi9hZl9pdWN2LmNgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCB3aWxsIGJlIGVuYWJsZWQgd2l0aCBubyBvdGhlciBhY3Rpb25zLCBiZWNhdXNlIGl0IGlzIG1hbnVhbGx5IHNlbGVjdGFibGUgYmVjYXVzZSBpdCBoYXMgYSBwcm9tcHQuIEkgY2FuIGVuYWJsZSBgQUZJVUNWYCBhbmQgdGhlIG1vZHVsZSB3aWxsIGJlIGVuYWJsZWQuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGBJVUNWYCBpZiBJIGRvbiYjMzk7dCB3YW50IHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthZl9pdWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2l1Y3YvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSVVDVilcdCYjNDM7PSBpdWN2Lm9cbm5ldC9pdWN2L01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0FGSVVDVilcdCYjNDM7PSBhZl9pdWN2Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyMzUKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBRklVQ1YgUGF0Y2gqKgoKT2theSwgc28gYENPTkZJR19BRklVQ1ZgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCYjMzk7cyBzdGVwIHRocm91Z2ggdGhpcyBwYXRjaCBhbmQgZmlybSB1cCBteSB0aGlua2luZy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlOiB0aGUgYWRkaXRpb24gb2YgdGhlIHJlYWQgbG9jay91bmxvY2sgYXJvdW5kIHRoZSBgc2tfZm9yX2VhY2hgIGxvb3Agd2l0aGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4OyBpdCYjMzk7cyBwcm90ZWN0aW5nIHRoZSBsaXN0IGl0ZXJhdGlvbi4gSSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NrIGlzIG1pc3NpbmcuCgpMb29raW5nIGF0IHRoZSBjb250ZXh0LCB0aGlzIGlzIHRyaWdnZXJlZCBieSBuZXR3b3JrIGRldmljZSBldmVudHMgbGlrZSBgTkVUREVWX1JFQk9PVGAgYW5kIGBORVRERVZfR09JTkdfRE9XTmAuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IHRob3NlIGVtdWxhdGluZyBzMzkweCB3aXRoIFFFTVUuIFRoYXQgbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IGZvY3VzIGdvZXMgaW1tZWRpYXRlbHkgdG8gdGhlIGtleSBzeW1ib2xzLCBgYWZpdWN2X25ldGRldl9ldmVudGAgKG9idmlvdXNseSksIGJ1dCBhbHNvIGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCBhcyB0aGV5IGFyZSByZWxhdGVkLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBgYWZpdWN2X25ldGRldl9ldmVudGAgaXMgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGlubGluZWQuIEJ1dCB3YWl0LCBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBJdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXJgLiBUaGF0IG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHJlYWNoYWJsZSB2aWEgdGhlIHN5bWJvbC4gYGl1Y3Zfc29ja19jcmVhdGVgIGFuZCBgaXVjdl9zb2NrX2JpbmRgIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy4KCkEgcXVpY2sgY3Jvc3MtY2hlY2s6IGBBRklVQ1ZgIHJlcXVpcmVzIGBORVRgLiBDb25maXJtZWQ6IGl0IHJlc2lkZXMgaW4gYG5ldC9gIGFuZCBgbmV0L2l1Y3YvS2NvbmZpZ2Agd2hpY2ggaXMgc291cmNlZCBmcm9tIGBuZXQvS2NvbmZpZ2AuIEFuZCB5ZXMsIGBTMzkwYCBpcyBhbiBhcmNoaXRlY3R1cmUsIHNvIHdlIGRvbiYjMzk7dCBoYXZlIHRvIHNwZWNpZnkgdGhhdCBpbiBgRW5hYmxlQ29uZmlnc2AuIEhvd2V2ZXIsIHdlIGRlZmluaXRlbHkgc2hvdWxkIHNwZWNpZnkgYEFGSVVDVmAuCgpMZXQgbWUgY29uZmlybSB0aGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZC4gWWVzLiBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2VmdWw/IE5vcGUsIGBhZml1Y3ZfaHNfcmN2YCBpc24mIzM5O3QgdG91Y2hlZCwgdGhlIGJ1ZyB3YXMgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAyMDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZJVUNWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZpdWN2X25ldGRldl9ldmVudCYjMzQ7LAogICAgJiMzNDtpdWN2X3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19iaW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRklVQ1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZml1Y3ZfbmV0ZGV2X2V2ZW50JiMzNDssCiAgICAmIzM0O2l1Y3Zfc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7aXVjdl9zb2NrX2JpbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBpdGVyYXRpb24gb2YgYGl1Y3Zfc2tfbGlzdC5oZWFkYCBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VIHMzOTB4IGVtdWxhdGlvbikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRkZXYgZXZlbnQgaGFuZGxlciBhbmQgc29ja2V0IGNyZWF0aW9uL2JpbmRpbmcgdG8gdHJpZ2dlciB0aGUgbGlzdCBpdGVyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNDo1NC43OTE3NTcwNzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzcyMDY5MTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gICAgXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gICAgXCJpdWN2X3NvY2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNDo1NC43OTE3NjIxODVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzM1ODQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAyMDozNDo1MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmNcXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4wMzQwMzljNTA5NDE4IDEwMDY0NFxcbi0tLSBhL25ldC9pdWN2L2FmX2l1Y3YuY1xcbisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuY1xcbkBAIC0yMjEzLDYgKzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbiBcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIFxcdGNhc2UgTkVUREVWX1JFQk9PVDpcXG4gXFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcXG4rXFx0XFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxuIFxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpIHtcXG4gXFx0XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbiBcXHRcXHRcXHRpZiAoKGl1Y3YtXFx1MDAzZWhzX2RldiA9PSBldmVudF9kZXYpIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIyMjMsNiArMjIyNCw3IEBAIHN0YXRpYyBpbnQgYWZpdWN2X25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXFxuIFxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFx0XFx0cmVhZF91bmxvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0RPV046XFxuIFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM0OjU1LjI0OTk5NTA3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMjYyNDM2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGSVVDVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmaXVjdl9uZXRkZXZfZXZlbnRcIixcbiAgICBcIml1Y3Zfc29ja19jcmVhdGVcIixcbiAgICBcIml1Y3Zfc29ja19iaW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBtaXNzaW5nIHJlYWQgbG9ja3MgYXJvdW5kIHRoZSBpdGVyYXRpb24gb2YgYGl1Y3Zfc2tfbGlzdC5oZWFkYCBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQUZfSVVDViBzb2NrZXQgZmFtaWx5LCB3aGljaCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChRRU1VIHMzOTB4IGVtdWxhdGlvbikuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRkZXYgZXZlbnQgaGFuZGxlciBhbmQgc29ja2V0IGNyZWF0aW9uL2JpbmRpbmcgdG8gdHJpZ2dlciB0aGUgbGlzdCBpdGVyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzN2U0YjIzZTEzZWQ5NmYwZWVhNjRhOTVkZWY3MDQ0NDI5YjQzODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzIDIwOjM0OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvYWZfaXVjdi5jIGIvbmV0L2l1Y3YvYWZfaXVjdi5jXG5pbmRleCBlYTA0N2JhYjY1ZTdjLi4wMzQwMzljNTA5NDE4IDEwMDY0NFxuLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jXG4rKysgYi9uZXQvaXVjdi9hZl9pdWN2LmNcbkBAIC0yMjEzLDYgKzIyMTMsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0c3dpdGNoIChldmVudCkge1xuIFx0Y2FzZSBORVRERVZfUkVCT09UOlxuIFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcbitcdFx0cmVhZF9sb2NrX2JoKFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcbiBcdFx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XG4gXHRcdFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xuIFx0XHRcdGlmICgoaXVjdi1cdTAwM2Voc19kZXYgPT0gZXZlbnRfZGV2KSBcdTAwMjZcdTAwMjZcbkBAIC0yMjIzLDYgKzIyMjQsNyBAQCBzdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiBcdFx0XHR9XG4gXHRcdH1cbitcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTUuMjQ5OTk2ODk3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNTIzMzEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2l1Y3YvYWZfaXVjdi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBgcmVhZF9sb2NrX2JoYCBhbmQgYHJlYWRfdW5sb2NrX2JoYCBhcm91bmQgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBgXHUwMDI2aXVjdl9za19saXN0LmhlYWRgIHdpdGhpbiB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBSaWdodCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyB0aGV5J3JlIGludHJvZHVjaW5nIGxvY2tpbmcgdG8gcHJvdGVjdCB0aGF0IGxpbmtlZCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlOyBpdCBwcmV2ZW50cyByYWNlIGNvbmRpdGlvbnMuXG5cbk5vdywgbGV0IG1lIHRoaW5rLi4uIElVQ1YuLi4gcmlnaHQsIHRoYXQncyB0aGUgSUJNIHovVk0gY29tbXVuaWNhdGlvbiBwcm90b2NvbC4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBjb250ZXh0IG9mIHRoaXMuIEdpdmVuIHRoYXQgaXQgaW52b2x2ZXMgYSBmYWlybHkgc3BlY2lmaWMgcHJvdG9jb2wsIGEga2V5IHF1ZXN0aW9uIHRoYXQgcG9wcyB1cCBpbiBteSBtaW5kIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSXQgbWlnaHQgYmUgc3BlY2lmaWMgdG8gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuIEknbGwganVtcCBvdmVyIHRvIGBuZXQvaXVjdi9LY29uZmlnYCB0byBjaGVjay4gSSByZW1lbWJlciByZWFkaW5nIGFib3V0IGl0IHNvbWV3aGVyZSwgc28gaXQgc2hvdWxkIGJlIG9idmlvdXMgZnJvbSB0aGUgS2NvbmZpZyBmaWxlIGlmIHRoaXMgaXMgY29uZGl0aW9uYWwgb3Igbm90LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTkuNDU1MjMzMTQ2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxODMzMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJVUNWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9pdWN2L0tjb25maWc6Mjpjb25maWcgSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMy1cXHRkZXBlbmRzIG9uIFMzOTBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzQ6NTkuNTM3MDcxNDcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NDg2NTE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRhcmdldCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIHRhc2sgaGluZ2VzIG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gR29vZCBzdGFydGluZyBwb2ludC4gVGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGBzeXprYWxsZXJgIHN1cHBvcnRzIGZ1enppbmcgb24gdGhhdCBhcmNoaXRlY3R1cmUuIEl0IGRvZXMsIHNwZWNpZmljYWxseSBgczM5MHhgLiBTbywgdGhhdCdzIHBvc2l0aXZlLiBIb3dldmVyLCB0aGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBhdm9pZGluZyBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBOb3csIFFFTVUgKmRvZXMqIHN1cHBvcnQgYHMzOTB4YCBlbXVsYXRpb24sIHNvIHRoYXQgaW5pdGlhbCBjb25jZXJuIGlzIHBvdGVudGlhbGx5IG1pdGlnYXRlZC5cblxuR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0LCBsZXQncyBub3cgY29uc2lkZXIgdGhhdCB0aGUgcHJvbXB0IHJlZmVyZW5jZXMgYSBzcGVjaWZpYyBuZXR3b3JrIGNvbXBvbmVudCBgQUZfSVVDVmAuIElzIHRoYXQgZnV6emVkPyBUaGF0IGlzIGEgc29ja2V0IGZhbWlseSwgc28gdGhhdCdzIGEga2V5IGRldGFpbC4gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciBgQUZfSVVDVmAgaXRzZWxmLiBMZXQncyBjaGVjayBgbmV0L2l1Y3YvS2NvbmZpZ2AgdG8gc3RhcnQgb3VyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MDMuNzIxOTM5MTUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTMwMjM5NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGX0lVQ1ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2l1Y3YvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MDMuOTg3MjQ4ODU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzNjQ3Njg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkNoZWNraW5nIHRoZSBJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgYElVQ1ZgIGZlYXR1cmUgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIFRvIGRvIHRoYXQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSwgdGhlIGBuZXQvaXVjdi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gSVVDViwgb2J2aW91c2x5LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBkZWZpbmVkIGluIHRoYXQgZmlsZSDigJMgdGhpbmdzIGxpa2UgYENPTkZJR19JVUNWYCwgcG90ZW50aWFsbHkgd2l0aCBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiYXNlIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUgYW5kIGlmIGl0IGlzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTowNy4wMjM3Mjg2MThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUzNzM1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvaXVjdi9LY29uZmlnOjI6Y29uZmlnIElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZy00LVxcdGRlZl90cmlzdGF0ZSB5IGlmIFMzOTBcXG5uZXQvaXVjdi9LY29uZmlnOjU6XFx0cHJvbXB0IFxcXCJJVUNWIHN1cHBvcnQgKFMzOTAgLSB6L1ZNIG9ubHkpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5uZXQvaXVjdi9LY29uZmlnLTEwLVxcbm5ldC9pdWN2L0tjb25maWc6MTE6Y29uZmlnIEFGSVVDVlxcbm5ldC9pdWN2L0tjb25maWctMTItXFx0ZGVwZW5kcyBvbiBTMzkwXFxubmV0L2l1Y3YvS2NvbmZpZzoxMzpcXHRkZWZfdHJpc3RhdGUgbSBpZiBRRVRIX0wzIHx8IElVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnOjE0OlxcdHByb21wdCBcXFwiQUZfSVVDViBTb2NrZXQgc3VwcG9ydCAoUzM5MCAtIHovVk0gYW5kIEhpcGVyU29ja2V0cyB0cmFuc3BvcnQpXFxcIlxcbm5ldC9pdWN2L0tjb25maWctMTUtXFx0aGVscFxcbm5ldC9pdWN2L0tjb25maWc6MTY6XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIEFGX0lVQ1Ygc29ja2V0IGFwcGxpY2F0aW9uc1xcbm5ldC9pdWN2L0tjb25maWctMTctXFx0ICBiYXNlZCBvbiB6L1ZNIGludGVyLXVzZXIgY29tbXVuaWNhdGlvbiB2ZWhpY2xlIG9yIGJhc2VkIG9uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjA3LjA4OTEwNzkzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMzg5MjQzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQUZJVUNWIE5ldHdvcmsgRHJpdmVyKipcblxuT2theSwgc28gdGhlIGNvZGUgSSdtIGxvb2tpbmcgYXQsIHRoaXMgYEFGSVVDVmAgdGhpbmcsIHRoYXQncyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZCwgcmlnaHQ/IFdhaXQgYSBtaW51dGUsIGlzIHRoaXMgY29kZSBldmVuICpyZWFjaGFibGUqIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gWWVzLCBJIGNhbiBjb25maXJtIHRoYXQgUUVNVSBkb2VzIGluZGVlZCBlbXVsYXRlIHMzOTB4LiBPa2F5LCB0aGF0J3MgcHJvbWlzaW5nLiBJcyB0aGlzIGFjdHVhbGx5IHdvcnRoIGZ1enppbmc/IFllcywgaXQgbG9va3MgbGlrZSBpdCdzIGEgc29ja2V0LWJhc2VkIHByb3RvY29sLCB3aGljaCBpcyBwZXJmZWN0IGZvciBmdXp6aW5nLlxuXG5IYW5nIG9u4oCmIGxvb2tpbmcgYXQgYGFmaXVjdl9uZXRkZXZfZXZlbnRgLCB0aGF0J3MgYSBuZXRkZXYgbm90aWZpZXIhIEl04oCZcyBjYWxsZWQgd2hlbiBhIG5ldHdvcmsgZGV2aWNlIGV2ZW50IG9jY3Vycy4gQW5kIHRoZSBjb21taXQgSSdtIHJldmlld2luZyBhZGRzIGxvY2tpbmcgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIE5vdywgaXMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGFjdHVhbGx5ICpyZWFjaGFibGUqPyBMZXQncyBzZWXigKYgT2theSwgaXQncyByZWdpc3RlcmVkIHRocm91Z2ggYHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyKWAuIE9rYXksIGdvb2QuIFNvLCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXZlbnQgb2NjdXJzLCB0aGluZ3MgbGlrZSBgTkVUREVWX1JFQk9PVGAgb3IgYE5FVERFVl9HT0lOR19ET1dOYCwgaXQgaXRlcmF0ZXMgb3ZlciBgaXVjdl9za19saXN0LmhlYWRgLiBEZWZpbml0ZWx5IHJlYWNoYWJsZSFcblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQUZJVUNWYCBpcyB0aGUgbWFpbiBvbmUsIHJpZ2h0PyBPa2F5LCBzbyBgQUZJVUNWYCBkZXBlbmRzIG9uIGBTMzkwYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24gYW4geDg2IHN5c3RlbT8gTm8sIGl0ICpkZXBlbmRzIG9uIFMzOTAqIGV4cGxpY2l0bHkuIFNpbmNlIHN5emthbGxlciBydW5zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzLCBhbmQgczM5MHggaXMgb25lIG9mIHRoZW0sIHRoZW4gdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIE9rYXksIHdlJ3ZlIGdvdCB0byBsaXN0IGBBRklVQ1ZgIGFzICp0aGUqIGNvbmZpZy4gV2FpdCwgZG9lcyBgQUZJVUNWYCAqcmVxdWlyZSogYElVQ1ZgPyBgQUZJVUNWYCBqdXN0IGRlcGVuZHMgb24gYFMzOTBgLiBMZXQncyBqdXN0IGRvdWJsZSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjE0LjMyODAzNTA5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDU1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGSVVDVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L0tjb25maWc9Mj1jb25maWcgSVVDVlxcbi0tXFxubmV0L2l1Y3YvS2NvbmZpZy0xMC1cXG5uZXQvaXVjdi9LY29uZmlnOjExOmNvbmZpZyBBRklVQ1ZcXG5uZXQvaXVjdi9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gUzM5MFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNC4zOTAyNDUzMTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0OTkyMTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgQUZJVUNWIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgXCJMZXQncyBzZWUgdGhlIGZ1bGwgYEFGSVVDVmAgY29uZmlnLFwiIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgc3BlY2lmaWMuIGBBRklVQ1ZgIGlzIGxpa2VseSBhbiBhY3JvbnltLCBzcGVjaWZpYyB0byB0aGlzIGV4cGVydCdzIHdvcmssIGFuZCB0aGUgaW50ZXJlc3QgaXMgdG8gaW5zcGVjdCB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24uIEknbSBhc3N1bWluZyBpdCdzIHByb2JhYmx5IGEgY29tcGxleCBzeXN0ZW0gd2l0aCBhIHNvcGhpc3RpY2F0ZWQgY29uZmlnIHRoYXQncyBjcml0aWNhbCB0byB0aGUgdGFzayBhdCBoYW5kLiBUaGUgcHJvbXB0IGlzbid0IGFza2luZyBmb3IgYW5hbHlzaXMsIHNvIEknbSBub3QgZ29pbmcgdG8gc3BlY3VsYXRlIGFib3V0IHdoYXQgYEFGSVVDVmAgKmlzKi4gSSB3YW50IHRoZSBmdWxsIHBpY3R1cmUsIGFsbCB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1MDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNy43NDAxNzE3NzVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pdWN2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgQUZJVUNWXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDEzOlxcdFxcdGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVlxcbiAgMTQ6XFx0XFx0cHJvbXB0IFxcXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydClcXFwiXFxuICAxNTpcXHRcXHRoZWxwXFxuICAxNjpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgQUZfSVVDViBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxNzpcXHRcXHQgIGJhc2VkIG9uIHovVk0gaW50ZXItdXNlciBjb21tdW5pY2F0aW9uIHZlaGljbGUgb3IgYmFzZWQgb25cXG4gIDE4OlxcdFxcdCAgSGlwZXJTb2NrZXRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToxNy43NDAzNTA5OTVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4ODQ5MDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBBRklVQ1ZgIGlzIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQgd2FpdCwgdGhpcyBkb2Vzbid0IGV4aXN0IGluIGlzb2xhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGFraW5nIHRoZSBkZXBlbmRlbmNpZXMgaW50byBhY2NvdW50LiBBaCwgeWVzLCBpdCBsaXZlcyB3aXRoaW4gdGhlIGBuZXQvYCBkaXJlY3RvcnksIHNvIGl0J3MgdGllZCB0byB0aGUgbmV0d29yayBzdWJzeXN0ZW0sIG9mIGNvdXJzZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogaXMganVzdCBgQUZJVUNWYCBlbm91Z2g/IEFmdGVyIGEgYnJpZWYgcmV2aWV3LCBpdCBkb2VzIGFwcGVhciBzby4gRXhjZWxsZW50LlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gYW5kIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBhcyB0aGUgbmV4dCBzdGVwLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyByZWFjdGluZyB0byBuZXR3b3JrIGV2ZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjEuMTI4ODQ0Mjc1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI5NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjE2Nz1zdGF0aWMgdm9pZCBhZml1Y3ZfaHNfY2FsbGJhY2tfdHhub3RpZnkoc3RydWN0IHNvY2sgKnNrLCBlbnVtIGl1Y3ZfdHhfbm90aWZ5IG4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwMy0vKlxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjA0OiAqIGFmaXVjdl9uZXRkZXZfZXZlbnQ6IGhhbmRsZSBuZXRkZXYgbm90aWZpZXIgY2hhaW4gZXZlbnRzXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMDUtICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyMDY6c3RhdGljIGludCBhZml1Y3ZfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIwNy1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIyMzc9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhZml1Y3ZfbmV0ZGV2X25vdGlmaWVyID0ge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjM4OlxcdC5ub3RpZmllcl9jYWxsID0gYWZpdWN2X25ldGRldl9ldmVudCxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjIzOS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyMS4xOTQxNDYzMzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MTAwNzQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElVQ1YgTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gdGhlIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBmdW5jdGlvbiBpcyB0aGUgb25lIHRoYXQncyBiZWVuIGZsYWdnZWQgZm9yIG1vZGlmaWNhdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGFyZSB0aGVyZSAqb3RoZXIqIGZ1bmN0aW9ucyBpbiB0aGlzIGFyZWEgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8sIHBlcmhhcHMgYXMgcmVsYXRlZCBvciBzdXBwb3J0aW5nIGNvZGU/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2suXG5cbkdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG5ldHdvcmsgZXZlbnRzIGFuZCwgcHJlc3VtYWJseSwgSVVDViBzb2NrZXRzLCBteSBpbnR1aXRpb24gbGVhbnMgdG93YXJkcyBmb2N1c2luZyBvbiB0aGUgc29ja2V0IGNyZWF0aW9uIGFuZCBiaW5kaW5nIHByb2Nlc3MuIElmIHRoZSBzb2NrZXQgc2V0dXAgaXMgaW50ZWdyYWwgdG8gdGhlc2UgbmV0d29yayBldmVudHMsIHRoZW4gY2hhbmdlcyB0aGVyZSBjb3VsZCBkZWZpbml0ZWx5IGltcGFjdCB0aGluZ3MuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGNoZWNrIGBpdWN2X3NvY2tfY3JlYXRlYCBhbmQgYGl1Y3Zfc29ja19iaW5kYCBzaW5jZSB0aGV5J3JlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSeKAmW0gdGhpbmtpbmcgdGhvc2UgY291bGQgYmUgdXNlZCB0byBzZXQgdXAgc29ja2V0cyB0byB1c2UgdGhpcyBsaXN0IG9mIHNvY2tldHMgd2XigJlyZSBsb29raW5nIGF0LCByaWdodD9cblxuU28sIHRpbWUgdG8gZGl2ZSBpbnRvIGBuZXQvaXVjdi9hZl9pdWN2LmNgIHRvIGxvb2sgYXQgaG93IHRoZXNlIHNvY2tldHMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQuIEdvdHRhIHNlZSBob3cgdGhlIGxvdy1sZXZlbCBzb2NrZXQgb3BlcmF0aW9ucyBmaXQgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyB0byBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyNS4yNTUxNTcwNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDcyMTE3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L2FmX2l1Y3YuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmM9MjI0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpdWN2X3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyNjAtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNjE6c3RhdGljIGludCBpdWN2X3NvY2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjYyLVxcdFxcdFxcdCAgICBpbnQga2VybilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjkwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpdWN2X3NvY2tfZmFtaWx5X29wcyA9IHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjkyLVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyOTM6XFx0LmNyZWF0ZVxcdD0gaXVjdl9zb2NrX2NyZWF0ZSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI5NC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNToyNS4zNjk4ODI3MTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzODEzNDUwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqU29ja2V0IENyZWF0aW9uIGluIHRoZSBJVUNWIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIElVQ1Ygc29ja2V0IEFQSSBoZXJlLiBNeSBmb2N1cyBpcyBvbiB0aGUgZm91bmRhdGlvbmFsIGFzcGVjdHMsIHNwZWNpZmljYWxseSB0aGUgY3JlYXRpb24gYW5kIGJpbmRpbmcgcGhhc2VzLiBJdCBsb29rcyBsaWtlIGBpdWN2X3NvY2tfY3JlYXRlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHNvY2tldCBpbml0aWFsaXphdGlvbiwgdGhlIGVxdWl2YWxlbnQgb2YgYSBgc29ja2V0KClgIGNhbGwgaW4gb3RoZXIgZW52aXJvbm1lbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRoZSBnYXRld2F5IGZvciBzZXR0aW5nIHVwIGEgY29tbXVuaWNhdGlvbiBlbmRwb2ludC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGl0cyBwYXJhbWV0ZXJzIGxhdGVyIHRvIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBJVUNWIHN0cnVjdHVyZXMuIEknbGwgYWxzbyB3YW50IHRvIGxvb2sgYXQgd2hhdCBvcHRpb25zLCBpZiBhbnksIHRoZSBjcmVhdGlvbiBmdW5jdGlvbiBnaXZlcy4gRm9sbG93aW5nIHVwIG9uIHRoYXQsIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGJpbmRpbmcgcHJvY2VkdXJlIHdvdWxkIGJlLiBJIGltYWdpbmUgdGhlcmUncyBhIGZ1bmN0aW9uIGxpa2UgYGl1Y3Zfc29ja19iaW5kYCwgb3Igc29tZXRoaW5nIHdpdGggYSBzaW1pbGFyIHNlbWFudGljLCB0aGF0IHdpbGwgYXNzb2NpYXRlIHRoZSBjcmVhdGVkIHNvY2tldCB3aXRoIGEgc3BlY2lmaWMgYWRkcmVzcyBvciBpZGVudGlmaWVyIHdpdGhpbiB0aGUgSVVDViBuZXR3b3JrLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IEkgY2FuIGRlZmluZSB0aGUgZW5kcG9pbnRzIG9yIGlkZW50aWZpZXJzIHVzZWQgdG8gZGVmaW5lIHRoZSBzb2NrZXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBzb2NrZXRzIHRvIGNvbW11bmljYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjguNjA4MDIwMTAyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzk4MTc5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpdWN2X3NvY2tfYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTgxLS8qIEJpbmQgYW4gdW5ib3VuZCBzb2NrZXQgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTgyOnN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU4My1cXHRcXHRcXHQgIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz0yMjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGl1Y3Zfc29ja19vcHMgPSB7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjI0NC1cXHQucmVsZWFzZVxcdD0gaXVjdl9zb2NrX3JlbGVhc2UsXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIyNDU6XFx0LmJpbmRcXHRcXHQ9IGl1Y3Zfc29ja19iaW5kLFxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMjQ2LVxcdC5jb25uZWN0XFx0PSBpdWN2X3NvY2tfY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6MjguNjg2MDA3OTI3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTc5NzU3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQUZfSVVDViBMb2NraW5nIGFuZCBFdmVudCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhZGRpbmcgbG9ja2luZyB0byB0aGUgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGZ1bmN0aW9uLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGF0IHN5bWJvbC4gVG8gcHJvcGVybHkgdGVzdCB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGNyZWF0ZSBhIHNwZWNpZmljIHNjZW5hcmlvLiBJIHRoaW5rIHRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gdHJpZ2dlciB0aGUgbmV3IGxvY2sgaXMgdG8gY3JlYXRlIGFuIEFGX0lVQ1Ygc29ja2V0IGFuZCB0aGVuIGdlbmVyYXRlIGEgbmV0d29yayBkZXZpY2UgZXZlbnQuIEJyaW5naW5nIGFuIGludGVyZmFjZSBkb3duIHNob3VsZCBkbyB0aGUgdHJpY2suIFRoYXQgbWVhbnMgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldCBmb3IgbXkgZXhhbWluYXRpb24uXG5cbk5vdywgbGV0J3Mgc2VlLi4uIGdldHRpbmcgYW4gQUZfSVVDViBzb2NrZXQgY3JlYXRlZCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgbG9vayBhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgdG9vLiBUaG9zZSB3aWxsIGJlIGNydWNpYWwgZm9yIGdldHRpbmcgYSBzb2NrZXQgaW5pdGlhbGl6ZWQgYW5kIG9uIHRoZSBzeXN0ZW0uXG5cbkFoYSwgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIGhvdyB0aGUgc29ja2V0IGdldHMgb250byB0aGUgYGl1Y3Zfc2tfbGlzdGAuIFRoYXQgbGlzdCBpcyBjbGVhcmx5IHRoZSB0YXJnZXQgb2YgYSBsb2NrLCBzbyB3aGVuIHRoYXQgaGFwcGVucyB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZXhhY3QgcG9pbnQgaW4gdGhlIGNvZGUgd2hlcmUgdGhlIHNvY2tldCBpcyBhZGRlZCB0byBgaXVjdl9za19saXN0YC4gVGhhdCBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTozMi44NDM5ODgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMDM4MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml1Y3Zfc2tfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXVjdi9hZl9pdWN2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2l1Y3YvYWZfaXVjdi5jPTk1PXN0YXRpYyB2b2lkIGFmaXVjdl9oc19jYWxsYmFja190eG5vdGlmeShzdHJ1Y3Qgc29jayAqc2ssIGVudW0gaXVjdl90eF9ub3RpZnkpO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy05Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6OTc6c3RhdGljIHN0cnVjdCBpdWN2X3NvY2tfbGlzdCBpdWN2X3NrX2xpc3QgPSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjk4OlxcdC5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKGl1Y3Zfc2tfbGlzdC5sb2NrKSxcXG5uZXQvaXVjdi9hZl9pdWN2LmMtOTktXFx0LmF1dG9iaW5kX25hbWUgPSBBVE9NSUNfSU5JVCgwKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTI2OD1zdGF0aWMgc3RydWN0IHNvY2sgKl9faXVjdl9nZXRfc29ja19ieV9uYW1lKGNoYXIgKm5tKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3MS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjcyOlxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTI3My1cXHRcXHRpZiAoIW1lbWNtcChcXHUwMDI2aXVjdl9zayhzayktXFx1MDAzZXNyY19uYW1lLCBubSwgOCkpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MzI0PXN0YXRpYyB2b2lkIGl1Y3Zfc29ja19raWxsKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0zMjgtXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjMyOTpcXHRpdWN2X3NvY2tfdW5saW5rKFxcdTAwMjZpdWN2X3NrX2xpc3QsIHNrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMzMwLVxcdHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NDY2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqaXVjdl9zb2NrX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90bywgZ2ZwX3QgcHJpbywgaW50IGtlcm4pXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTA1LVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo1MDY6XFx0aXVjdl9zb2NrX2xpbmsoXFx1MDAyNml1Y3Zfc2tfbGlzdCwgc2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy01MDctXFx0cmV0dXJuIHNrO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTU2OD1zdGF0aWMgdm9pZCBfX2l1Y3ZfYXV0b19uYW1lKHN0cnVjdCBpdWN2X3NvY2sgKml1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTcyLVxcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjU3MzpcXHRcXHQgIFxcXCIlMDh4XFxcIiwgYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNml1Y3Zfc2tfbGlzdC5hdXRvYmluZF9uYW1lKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU3NC1cXHR3aGlsZSAoX19pdWN2X2dldF9zb2NrX2J5X25hbWUobmFtZSkpIHtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNTc1LVxcdFxcdHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFxcXCIlMDh4XFxcIixcXG5uZXQvaXVjdi9hZl9pdWN2LmM6NTc2OlxcdFxcdFxcdCAgYXRvbWljX2luY19yZXR1cm4oXFx1MDAyNml1Y3Zfc2tfbGlzdC5hdXRvYmluZF9uYW1lKSk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTU3Ny1cXHR9XFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9NTgyPXN0YXRpYyBpbnQgaXVjdl9zb2NrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjAyLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzo2MDM6XFx0d3JpdGVfbG9ja19iaChcXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02MDQtXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjU3LVxcdC8qIFJlbGVhc2UgdGhlIHNvY2tldCBsaXN0IGxvY2sgKi9cXG5uZXQvaXVjdi9hZl9pdWN2LmM6NjU4OlxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2aXVjdl9za19saXN0LmxvY2spO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy02NTktZG9uZTpcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYz02NjU9c3RhdGljIGludCBpdWN2X3NvY2tfYXV0b2JpbmQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTY3Ni1cXG5uZXQvaXVjdi9hZl9pdWN2LmM6Njc3OlxcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjc4LVxcdF9faXVjdl9hdXRvX25hbWUoaXVjdik7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjY3OTpcXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtNjgwLVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTE2MDc9c3RhdGljIGludCBpdWN2X2NhbGxiYWNrX2Nvbm5yZXEoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCxcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0xNjE5LVxcdC8qIEZpbmQgb3V0IGlmIHRoaXMgcGF0aCBiZWxvbmdzIHRvIGFmX2l1Y3YuICovXFxubmV0L2l1Y3YvYWZfaXVjdi5jOjE2MjA6XFx0cmVhZF9sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjEtXFx0aXVjdiA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjItXFx0c2sgPSBOVUxMO1xcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjIzOlxcdHNrX2Zvcl9lYWNoKHNrLCBcXHUwMDI2aXVjdl9za19saXN0LmhlYWQpXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MjQtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBJVUNWX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzItXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoxNjMzOlxcdHJlYWRfdW5sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTE2MzQtXFx0aWYgKCFpdWN2KVxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jPTIwNTg9c3RhdGljIGludCBhZml1Y3ZfaHNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjA3OS1cXHRzayA9IE5VTEw7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODA6XFx0cmVhZF9sb2NrKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIwODE6XFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZpdWN2X3NrX2xpc3QuaGVhZCkge1xcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMDgyLVxcdFxcdGlmICh0cmFuc19oZHItXFx1MDAzZWZsYWdzID09IEFGX0lVQ1ZfRkxBR19TWU4pIHtcXG4tLVxcbm5ldC9pdWN2L2FmX2l1Y3YuYy0yMTA4LVxcdFxcdHNvY2tfaG9sZChzayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jOjIxMDk6XFx0cmVhZF91bmxvY2soXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmMtMjExMC1cXHRpZiAoIWl1Y3YpXFxuLS1cXG5uZXQvaXVjdi9hZl9pdWN2LmM9MjIwNj1zdGF0aWMgaW50IGFmaXVjdl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTUtXFx0Y2FzZSBORVRERVZfR09JTkdfRE9XTjpcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIxNjpcXHRcXHRyZWFkX2xvY2tfYmgoXFx1MDAyNml1Y3Zfc2tfbGlzdC5sb2NrKTtcXG5uZXQvaXVjdi9hZl9pdWN2LmM6MjIxNzpcXHRcXHRza19mb3JfZWFjaChzaywgXFx1MDAyNml1Y3Zfc2tfbGlzdC5oZWFkKSB7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMTgtXFx0XFx0XFx0aXVjdiA9IGl1Y3Zfc2soc2spO1xcbi0tXFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjYtXFx0XFx0fVxcbm5ldC9pdWN2L2FmX2l1Y3YuYzoyMjI3OlxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZpdWN2X3NrX2xpc3QubG9jayk7XFxubmV0L2l1Y3YvYWZfaXVjdi5jLTIyMjgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDIwOjM1OjMyLjk2NDAzNjM5MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjQxNzE4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEFGSVVDViBTb2NrZXQgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGNoYW5nZXMgY2VudGVyZWQgYXJvdW5kIHRoZSBgYWZpdWN2X25ldGRldl9ldmVudGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3IgaGFuZGxpbmcgbmV0ZGV2IGV2ZW50cywgd2hpY2ggbWFrZXMgaXQgdGhlIGNydWNpYWwgc3ltYm9sIHRvIGludmVzdGlnYXRlLiBJJ20gYWxzbyBub3RpbmcgdGhhdCBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgc2VlbSBpbXBvcnRhbnQgZm9yIHNvY2tldCBjcmVhdGlvbiwgc28gSSdsbCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsZXZhbnQsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIGJlIGFyb3VuZCBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy4gQ2xlYXJseSwgYEFGSVVDVmAgZGVwZW5kcyBvbiBgUzM5MGAsIHdoaWNoIG1lYW5zIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHMzOTB4IGFyY2hpdGVjdHVyZS4gR29vZCB0byBrbm93LCBhcyB0aGF0IGNvbnN0cmFpbnMgdGhlIHNjb3BlLiBUaGUga2V5IGhlcmUgaXMgdG8gZGV0ZXJtaW5lICppZiogdGhlcmUgYXJlICpvdGhlciogY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIGVuYWJsZSBgQUZJVUNWYC4gVGhlIGRlcGVuZGVuY3kgY2hlY2sgbGVhZHMgbWUgdG8gZmluZCB0aGF0IGBRRVRIX0wzYCBvciBgSVVDVmAgc2VlbSB0byBiZSByZWxldmFudC4gVGhlIGxpbmUgYGRlZl90cmlzdGF0ZSBtIGlmIFFFVEhfTDMgfHwgSVVDVmAgbWVhbnMgaXQgZGVmYXVsdHMgdG8gbW9kdWxhciAoYG1gKSBpZiBlaXRoZXIgYFFFVEhfTDNgIG9yIGBJVUNWYCBhcmUgZW5hYmxlZC5cblxuTG9va2luZyBiYWNrIGF0IHRoZSBLY29uZmlnLCBgQUZJVUNWYCBpcyBkZXNjcmliZWQgYXMgXCJBRl9JVUNWIFNvY2tldCBzdXBwb3J0IChTMzkwIC0gei9WTSBhbmQgSGlwZXJTb2NrZXRzIHRyYW5zcG9ydCkuXCIgU28sIHNpbXBseSBlbmFibGluZyBgQUZJVUNWYCBzaG91bGQgYmUgc3VmZmljaWVudCwgd2hpY2ggY29tcGlsZXMgYG5ldC9pdWN2L2FmX2l1Y3YuY2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgd2lsbCBiZSBlbmFibGVkIHdpdGggbm8gb3RoZXIgYWN0aW9ucywgYmVjYXVzZSBpdCBpcyBtYW51YWxseSBzZWxlY3RhYmxlIGJlY2F1c2UgaXQgaGFzIGEgcHJvbXB0LiBJIGNhbiBlbmFibGUgYEFGSVVDVmAgYW5kIHRoZSBtb2R1bGUgd2lsbCBiZSBlbmFibGVkLiBJIGRvbid0IG5lZWQgdG8gZW5hYmxlIGBJVUNWYCBpZiBJIGRvbid0IHdhbnQgdG8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMjA6MzU6NDAuNjA1NzU3NTc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTMzMTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZl9pdWN2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pdWN2L01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX0lVQ1YpXFx0Kz0gaXVjdi5vXFxubmV0L2l1Y3YvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfQUZJVUNWKVxcdCs9IGFmX2l1Y3Yub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTo0MC42ODUwOTQxODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1NTI0NjcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQUZJVUNWIFBhdGNoKipcblxuT2theSwgc28gYENPTkZJR19BRklVQ1ZgIGlzIGRlZmluaXRlbHkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCdzIHN0ZXAgdGhyb3VnaCB0aGlzIHBhdGNoIGFuZCBmaXJtIHVwIG15IHRoaW5raW5nLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhlIGFkZGl0aW9uIG9mIHRoZSByZWFkIGxvY2svdW5sb2NrIGFyb3VuZCB0aGUgYHNrX2Zvcl9lYWNoYCBsb29wIHdpdGhpbiBgYWZpdWN2X25ldGRldl9ldmVudGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeDsgaXQncyBwcm90ZWN0aW5nIHRoZSBsaXN0IGl0ZXJhdGlvbi4gSSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBsb2NrIGlzIG1pc3NpbmcuXG5cbkxvb2tpbmcgYXQgdGhlIGNvbnRleHQsIHRoaXMgaXMgdHJpZ2dlcmVkIGJ5IG5ldHdvcmsgZGV2aWNlIGV2ZW50cyBsaWtlIGBORVRERVZfUkVCT09UYCBhbmQgYE5FVERFVl9HT0lOR19ET1dOYC4gVGhpcyBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZW11bGF0aW5nIHMzOTB4IHdpdGggUUVNVS4gVGhhdCBtYWtlcyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSBmb2N1cyBnb2VzIGltbWVkaWF0ZWx5IHRvIHRoZSBrZXkgc3ltYm9scywgYGFmaXVjdl9uZXRkZXZfZXZlbnRgIChvYnZpb3VzbHkpLCBidXQgYWxzbyBgaXVjdl9zb2NrX2NyZWF0ZWAgYW5kIGBpdWN2X3NvY2tfYmluZGAgYXMgdGhleSBhcmUgcmVsYXRlZC5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBgYWZpdWN2X25ldGRldl9ldmVudGAgaXMgc3RhdGljLCB3aGljaCB1c3VhbGx5IG1lYW5zIGl0J3MgaW5saW5lZC4gQnV0IHdhaXQsIGl0J3MgKm5vdCogaW5saW5lZC4gSXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIGByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXJgLiBUaGF0IG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIGFuZCBpcyB0aHVzIHJlYWNoYWJsZSB2aWEgdGhlIHN5bWJvbC4gYGl1Y3Zfc29ja19jcmVhdGVgIGFuZCBgaXVjdl9zb2NrX2JpbmRgIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycy5cblxuQSBxdWljayBjcm9zcy1jaGVjazogYEFGSVVDVmAgcmVxdWlyZXMgYE5FVGAuIENvbmZpcm1lZDogaXQgcmVzaWRlcyBpbiBgbmV0L2AgYW5kIGBuZXQvaXVjdi9LY29uZmlnYCB3aGljaCBpcyBzb3VyY2VkIGZyb20gYG5ldC9LY29uZmlnYC4gQW5kIHllcywgYFMzOTBgIGlzIGFuIGFyY2hpdGVjdHVyZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWZ5IHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBIb3dldmVyLCB3ZSBkZWZpbml0ZWx5IHNob3VsZCBzcGVjaWZ5IGBBRklVQ1ZgLlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCBpcyB0aGUgb25seSBmdW5jdGlvbiBtb2RpZmllZC4gWWVzLiBJcyB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSB1c2VmdWw/IE5vcGUsIGBhZml1Y3ZfaHNfcmN2YCBpc24ndCB0b3VjaGVkLCB0aGUgYnVnIHdhcyBpbiBgYWZpdWN2X25ldGRldl9ldmVudGAuXG5cbkFscmlnaHQsIEknbSBjb25maWRlbnQgaW4gbXkgYW5hbHlzaXMuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM1LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QyMDozNTo0OC4zNDAzNDM2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjA4MzIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUZJVUNWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWZpdWN2X25ldGRldl9ldmVudFwiLFxuICAgIFwiaXVjdl9zb2NrX2NyZWF0ZVwiLFxuICAgIFwiaXVjdl9zb2NrX2JpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIG1pc3NpbmcgcmVhZCBsb2NrcyBhcm91bmQgdGhlIGl0ZXJhdGlvbiBvZiBgaXVjdl9za19saXN0LmhlYWRgIGluIGBhZml1Y3ZfbmV0ZGV2X2V2ZW50YCB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBBRl9JVUNWIHNvY2tldCBmYW1pbHksIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKFFFTVUgczM5MHggZW11bGF0aW9uKS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGRldiBldmVudCBoYW5kbGVyIGFuZCBzb2NrZXQgY3JlYXRpb24vYmluZGluZyB0byB0cmlnZ2VyIHRoZSBsaXN0IGl0ZXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRklVQ1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZml1Y3ZfbmV0ZGV2X2V2ZW50XCIsXG4gICAgXCJpdWN2X3NvY2tfY3JlYXRlXCIsXG4gICAgXCJpdWN2X3NvY2tfYmluZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbWlzc2luZyByZWFkIGxvY2tzIGFyb3VuZCB0aGUgaXRlcmF0aW9uIG9mIGBpdWN2X3NrX2xpc3QuaGVhZGAgaW4gYGFmaXVjdl9uZXRkZXZfZXZlbnRgIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEFGX0lVQ1Ygc29ja2V0IGZhbWlseSwgd2hpY2ggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoUUVNVSBzMzkweCBlbXVsYXRpb24pLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0ZGV2IGV2ZW50IGhhbmRsZXIgYW5kIHNvY2tldCBjcmVhdGlvbi9iaW5kaW5nIHRvIHRyaWdnZXIgdGhlIGxpc3QgaXRlcmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowm55lt[1] Phase: Succeeded StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 20:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 20:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2] Phase: Succeeded StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 20:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 20:36:00 +0000 UTC FinishedAt: 2026-08-03 20:36:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowm55lt/series-workflowm55lt-convert-artifact-1492915124/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 20:36:25 +0000 UTC FinishedAt: 2026-08-03 21:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 20:36:25 +0000 UTC FinishedAt: 2026-08-03 21:00:59 +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:*ece8273e-b194-48fd-bf31-6de3919f4f29,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-workflowm55lt/series-workflowm55lt-convert-artifact-1492915124/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": "858e529c-dbf8-4c69-b31c-57b5455281d9", "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-workflowm55lt/series-workflowm55lt-build-action-3042953650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 20:36:25 +0000 UTC FinishedAt: 2026-08-03 21:00:48 +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:*ece8273e-b194-48fd-bf31-6de3919f4f29,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-workflowm55lt/series-workflowm55lt-convert-artifact-1492915124/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": "858e529c-dbf8-4c69-b31c-57b5455281d9", "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-workflowm55lt/series-workflowm55lt-build-action-3042953650/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 21:00:59 +0000 UTC FinishedAt: 2026-08-03 21:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 21:00:59 +0000 UTC FinishedAt: 2026-08-03 21:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 21:00:59 +0000 UTC FinishedAt: 2026-08-03 21:01:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 21:00:59 +0000 UTC FinishedAt: 2026-08-03 21:01:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowm55lt/series-workflowm55lt-convert-artifact-1129081971/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 21:01:10 +0000 UTC FinishedAt: 2026-08-03 21:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 21:01:10 +0000 UTC FinishedAt: 2026-08-03 21:03:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*858e529c-dbf8-4c69-b31c-57b5455281d9,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-workflowm55lt/series-workflowm55lt-build-action-3042953650/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-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 21:03:19 +0000 UTC FinishedAt: 2026-08-03 21:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 21:03:19 +0000 UTC FinishedAt: 2026-08-03 21:03:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 21:03:19 +0000 UTC FinishedAt: 2026-08-03 21:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 21:03:19 +0000 UTC FinishedAt: 2026-08-03 21:20:40 +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:*ece8273e-b194-48fd-bf31-6de3919f4f29,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-workflowm55lt/series-workflowm55lt-convert-artifact-1129081971/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": "537bf2d6-b6cb-490c-8e21-5216d23a4fcb", "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-workflowm55lt/series-workflowm55lt-build-action-2826118183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 21:03:19 +0000 UTC FinishedAt: 2026-08-03 21:20:31 +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:*ece8273e-b194-48fd-bf31-6de3919f4f29,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-workflowm55lt/series-workflowm55lt-convert-artifact-1129081971/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": "537bf2d6-b6cb-490c-8e21-5216d23a4fcb", "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-workflowm55lt/series-workflowm55lt-build-action-2826118183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 21:20:40 +0000 UTC FinishedAt: 2026-08-03 21:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 21:20:40 +0000 UTC FinishedAt: 2026-08-03 21:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 21:20:40 +0000 UTC FinishedAt: 2026-08-03 21:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 21:20:40 +0000 UTC FinishedAt: 2026-08-03 21:22:08 +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:*537bf2d6-b6cb-490c-8e21-5216d23a4fcb,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-workflowm55lt/series-workflowm55lt-build-action-2826118183/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-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"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:*858e529c-dbf8-4c69-b31c-57b5455281d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*537bf2d6-b6cb-490c-8e21-5216d23a4fcb,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-workflowm55lt/series-workflowm55lt-build-action-3042953650/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-workflowm55lt/series-workflowm55lt-build-action-2826118183/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:22:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:22:22 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"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-workflowm55lt/series-workflowm55lt-convert-artifact-3515695212/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 21:22:18 +0000 UTC FinishedAt: 2026-08-03 21:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 21:22:28 +0000 UTC FinishedAt: 2026-08-03 21:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowm55lt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["afiucv_netdev_event","iucv_sock_create","iucv_sock_bind"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFIUCV"],"series_id":"5f0df253-87d5-42be-b3f8-c23c2bf6cd24","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 21:22:28 +0000 UTC FinishedAt: 2026-08-03 21:23:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*858e529c-dbf8-4c69-b31c-57b5455281d9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*537bf2d6-b6cb-490c-8e21-5216d23a4fcb,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-workflowm55lt/series-workflowm55lt-build-action-3042953650/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-workflowm55lt/series-workflowm55lt-build-action-2826118183/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-workflowm55lt/series-workflowm55lt-convert-artifact-3515695212/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,}