Name: series-workflowthmnv Phase: Succeeded StartedAt: 2026-08-07 00:12:46 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[0] Phase: Succeeded StartedAt: 2026-08-07 00:12:46 +0000 UTC FinishedAt: 2026-08-07 01:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 00:12:46 +0000 UTC FinishedAt: 2026-08-07 01:06:01 +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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DNS_RESOLVER", "KEYS" ], "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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DNS_RESOLVER", "KEYS" ], "series_id": "f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dns_resolver_preparse" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ROU19SRVNPTFZFUiYjMzQ7LAogICAgJiMzNDtLRVlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG5zX3Jlc29sdmVyX3ByZXBhcnNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDVmYjI4ZTE0Y2U2YzQ1Zjg3OTZkZmRmMmExOGM4NjM2YzljNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5pbmRleCBjM2M4YzMyNDBlZjk0Li40NTEyNDc4NjRhNjM4IDEwMDY0NFxuLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdGtkZWJ1ZyhcJiMzNDtzdG9yZSByZXN1bHRcJiMzNDspO1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IHJlc3VsdF9sZW47XG4gXG4tXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiBcdGlmICghdXBheWxvYWQpIHtcbiBcdFx0a2xlYXZlKFwmIzM0OyA9IC1FTk9NRU1cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0yMTEsNyAmIzQzOzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG4tXHR1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbiBcdHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0gPSB1cGF5bG9hZDtcbiBcdGtsZWF2ZShcJiMzNDsgPSAwXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFkNWZiMjhlMTRjZTZjNDVmODc5NmRmZGYyYTE4Yzg2MzZjOWM1YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAxOjA0OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwppbmRleCBjM2M4YzMyNDBlZjk0Li40NTEyNDc4NjRhNjM4IDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKIAlrZGVidWcoJiMzNDtzdG9yZSByZXN1bHQmIzM0Oyk7CiAJcHJlcC0mZ3Q7cXVvdGFsZW4gPSByZXN1bHRfbGVuOwogCi0JdXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuICYjNDM7IDEpOwomIzQzOwl1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4pOwogCWlmICghdXBheWxvYWQpIHsKIAkJa2xlYXZlKCYjMzQ7ID0gLUVOT01FTSYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTEsNyAmIzQzOzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCiAJdXBheWxvYWQtJmd0O2RhdGFsZW4gPSByZXN1bHRfbGVuOwogCW1lbWNweSh1cGF5bG9hZC0mZ3Q7ZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7Ci0JdXBheWxvYWQtJmd0O2RhdGFbcmVzdWx0X2xlbl0gPSAmIzM5O1wwJiMzOTs7CiAKIAlwcmVwLSZndDtwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSA9IHVwYXlsb2FkOwogCWtsZWF2ZSgmIzM0OyA9IDAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRE5TIFJlc29sdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgcmVtb3ZhbCBvZiBhIGAmIzQzOyAxYCBmcm9tIGEgYGttYWxsb2NfZmxleGAgY2FsbCBhbmQgYWxzbyBhIHJlbW92YWwgb2YgYSBudWxsIHRlcm1pbmF0aW9uIGFzc2lnbm1lbnQgKGB1cGF5bG9hZC0mZ3Q7ZGF0YVtyZXN1bHRfbGVuXSA9ICYjMzk7XDAmIzM5OztgKS4gVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4KCkZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoYXQgYHVwYXlsb2FkYCBhY3R1YWxseSAqaXMqLiBBaCwgaXQmIzM5O3MgYSBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgLiBHb29kLCB0aGF0IGdpdmVzIG1lIHNvbWV0aGluZyB0byB3b3JrIHdpdGguCgpOb3csIEkmIzM5O2xsIHRyYWNrIGRvd24gd2hlcmUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIHRoaXMgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBvZiB0aGF0IHBheWxvYWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGxlZ2l0aW1hdGUgZml4IG9yLCBwb3RlbnRpYWxseSwgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSXMgdGhlICYjMzQ7JiM0MzsxJiMzNDsgdW5uZWNlc3NhcnksIGxlYWRpbmcgdG8gYW4gb3Zlci1hbGxvY2F0aW9uPyBPciBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBwb3RlbnRpYWxseSBjcmVhdGluZyBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBzdGFydHMgc2Nhbm5pbmcsIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBkYXRhIHN0cnVjdHVyZSBlZmZpY2llbmN5LCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBicm9hZGVyIGtleSBtYW5hZ2VtZW50IGxhbmRzY2FwZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgc3Vic3lzdGVtLiBJcyBpdCBwcmltYXJpbHkgZm9yIHVzZXItc3BhY2Uga2V5IG1hbmFnZW1lbnQ/IElzIHRoZXJlIGFuIGluaGVyZW50IHRydXN0IG1vZGVsIGhlcmU/IFdoYXQga2luZCBvZiBkYXRhIGlzIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBob2xkaW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjcnlwdG9ncmFwaGljIGtleXMsIGFjY2VzcyBjb250cm9sIGxpc3RzLCBjYXBhYmlsaXR5IHRva2Vucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1pbmcgY29udmVudGlvbiBpbW1lZGlhdGVseSBzaWduYWxzIGNlcnRhaW4gdGhpbmdzIC0gdXNlciBrZXlzLCBzbyB0aGV5IGFyZSBsaWtlbHkgdGllZCBpbnRvIHNvbWUgc29ydCBvZiBjcmVkZW50aWFsIG9yIGlkZW50aXR5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGUgJiMzNDtwYXlsb2FkJiMzNDsgcGFydCBpcyBpbnRlcmVzdGluZyAtIGl0IHN1Z2dlc3RzIHRoaXMgc3RydWN0IHByb2JhYmx5IGNvbnRhaW5zIHRoZSBhY3R1YWwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB1c2VyJiMzOTtzIGtleS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbnMgd2lsbCBjZW50ZXIgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbjogSG93IGlzIHRoaXMgc3RydWN0dXJlZCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3M/IEhvdyBkb2VzIGl0IGhhbmRsZSBrZXkgcmV2b2NhdGlvbiBhbmQgdXBkYXRlcz8gQXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIG1lbW9yeT8gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3Qgd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgdXNlciBrZXkgc3Vic3lzdGVtLCBhbmQgZnJvbSB0aGVyZSwgaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBkaWdnaW5nIGludG8gdGhlIGFzc29jaWF0ZWQgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBhYnVzZWQuIEkgd29uZGVyIHdoYXQgdGhlIGZpZWxkIG5hbWVzIGFyZSwgYW5kIHRoYXQgd291bGQgZ2l2ZSBtZSBmdXJ0aGVyIGluc2lnaHRzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHVzZXJfa2V5X3BheWxvYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7Y3J5cHRvL2FmX2FsZy5jPTIzMz1zdGF0aWMgY29uc3QgdTggKmtleV9kYXRhX3B0cl91c2VyKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbi0tXG5jcnlwdG8vYWZfYWxnLmMtMjM1LXtcbmNyeXB0by9hZl9hbGcuYzoyMzY6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuY3J5cHRvL2FmX2FsZy5jLTIzNy1cbi0tXG5kcml2ZXJzL21kL2RtLWNyeXB0LmM9MjQzNz1zdGF0aWMgaW50IHNldF9rZXlfdXNlcihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGtleSAqa2V5KVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0Mzgte1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jOjI0Mzk6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0NDAtXG4tLVxuZHJpdmVycy9tZC9kbS1pbmxpbmVjcnlwdC5jPTg4PXN0YXRpYyBpbnQgc2V0X2tleV91c2VyKHN0cnVjdCBrZXkgKmtleSwgY2hhciAqa2V5X2J5dGVzLFxuLS1cbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYy05MC17XG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmM6OTE6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS1pbmxpbmVjcnlwdC5jLTkyLVxuLS1cbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYz0zOD1zdGF0aWMgaW50IHZlcml0eV92ZXJpZnlfZ2V0X3NpZ19mcm9tX2tleShjb25zdCBjaGFyICprZXlfZGVzYyxcbi0tXG5kcml2ZXJzL21kL2RtLXZlcml0eS12ZXJpZnktc2lnLmMtNDEtXHRzdHJ1Y3Qga2V5ICprZXk7XG5kcml2ZXJzL21kL2RtLXZlcml0eS12ZXJpZnktc2lnLmM6NDI6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jLTQzLVx0aW50IHJldCA9IDA7XG4tLVxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM9NDA9ZmluZF9hbmRfbG9ja19wcm9jZXNzX2tleShjb25zdCBjaGFyICpwcmVmaXgsXG4tLVxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmMtNDYtXHRzdHJ1Y3Qga2V5ICprZXk7XG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYzo0NzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00OC1cdGNvbnN0IHN0cnVjdCBmc2NyeXB0X2tleSAqcGF5bG9hZDtcbi0tXG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaD0xMTQ9ZWNyeXB0ZnNfZ2V0X2tleV9wYXlsb2FkX2RhdGEoc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oLTExNi1cdHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2s7XG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaDoxMTc6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE4LVxuLS1cbmZzL25mcy9uZnM0aWRtYXAuYz0zMDU9c3RhdGljIHNzaXplX3QgbmZzX2lkbWFwX2dldF9rZXkoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sXG4tLVxuZnMvbmZzL25mczRpZG1hcC5jLTMwOS1cdHN0cnVjdCBrZXkgKnJrZXk7XG5mcy9uZnMvbmZzNGlkbWFwLmM6MzEwOlx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG5mcy9uZnMvbmZzNGlkbWFwLmMtMzExLVx0c3NpemVfdCByZXQ7XG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MjE4MT1jaWZzX3NldF9jaWZzY3JlZHMoc3RydWN0IHNtYjNfZnNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2lmc19zZXMgKnNlcylcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0yMTkyLVx0c3RydWN0IHNvY2thZGRyX2luNiAqc2E2O1xuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MjE5MzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZDtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTIxOTQtXG4tLVxuZnMvdWJpZnMvYXV0aC5jPTI1NT1pbnQgdWJpZnNfaW5pdF9hdXRoZW50aWNhdGlvbihzdHJ1Y3QgdWJpZnNfaW5mbyAqYylcbi0tXG5mcy91Ymlmcy9hdXRoLmMtMjU3LVx0c3RydWN0IGtleSAqa2V5cmluZ19rZXk7XG5mcy91Ymlmcy9hdXRoLmM6MjU4Olx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcbmZzL3ViaWZzL2F1dGguYy0yNTktXHRpbnQgZXJyO1xuLS1cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC0yNi0gKi9cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDoyNzpzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjgtXHRzdHJ1Y3QgcmN1X2hlYWRcdHJjdTtcdFx0LyogUkNVIGRlc3RydWN0b3IgKi9cbi0tXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg9NDQ9ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00NS1cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0NjpzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX3JjdShjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDcte1xuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQ4Olx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9yY3Uoa2V5KTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00OS19XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNTAtXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6NTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUyLXtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo1MzpcdHJldHVybiAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKilkZXJlZmVyZW5jZV9rZXlfbG9ja2VkKChzdHJ1Y3Qga2V5ICopa2V5KTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC01NC19XG4tLVxua2VybmVsL2NyYXNoX2R1bXBfZG1fY3J5cHQuYz0xNDM9c3RhdGljIGludCByZWFkX2tleV9mcm9tX3VzZXJfa2V5cmluZyhzdHJ1Y3QgZG1fY3J5cHRfa2V5ICpkbV9rZXkpXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0NC17XG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jOjE0NTpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0Ni1cdHN0cnVjdCBrZXkgKmtleTtcbi0tXG5saWIvZGlnc2lnLmM9NjM9c3RhdGljIGludCBkaWdzaWdfdmVyaWZ5X3JzYShzdHJ1Y3Qga2V5ICprZXksXG4tLVxubGliL2RpZ3NpZy5jLTc2LVx0Y29uc3QgdWludDhfdCAqZW5kcDtcbmxpYi9kaWdzaWcuYzo3NzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5saWIvZGlnc2lnLmMtNzgtXHRzdHJ1Y3QgcHVia2V5X2hkciAqcGtoO1xuLS1cbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTgwPWRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODEte1xubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6ODI6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy04My1cdHVuc2lnbmVkIGxvbmcgZGVycm5vO1xuLS1cbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX3F1ZXJ5LmM9NjI9aW50IGRuc19xdWVyeShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02Ni17XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jOjY3Olx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02OC1cdHN0cnVjdCBrZXkgKnJrZXk7XG4tLVxuc2VjdXJpdHkva2V5cy9kaC5jPTE4PXN0YXRpYyBzc2l6ZV90IGRoX2RhdGFfZnJvbV9rZXkoa2V5X3NlcmlhbF90IGtleWlkLCBjb25zdCB2b2lkICoqZGF0YSlcbi0tXG5zZWN1cml0eS9rZXlzL2RoLmMtMzctXHRcdGlmIChzdGF0dXMgPT0gMCkge1xuc2VjdXJpdHkva2V5cy9kaC5jOjM4Olx0XHRcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy9kaC5jLTM5LVx0XHRcdHVpbnQ4X3QgKmR1cGxpY2F0ZTtcbi0tXG5zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jPTMwMz1zdGF0aWMgc3RydWN0IGtleSAqcmVxdWVzdF91c2VyX2tleShjb25zdCBjaGFyICptYXN0ZXJfZGVzYywgY29uc3QgdTggKiptYXN0ZXJfa2V5LFxuLS1cbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMtMzA1LXtcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmM6MzA2Olx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYy0zMDctXHRzdHJ1Y3Qga2V5ICp1a2V5O1xuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9NTk9aW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtNjAte1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo2MTpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZDtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtNjItXHRzaXplX3QgZGF0YWxlbiA9IHByZXAtXHUwMDNlZGF0YWxlbjtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTg5PXN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTkwLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6OTE6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtOTItXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjkzOlx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtOTQtXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xMDE9aW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAyLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAzOlx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnphcCA9IE5VTEw7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNC1cdGludCByZXQ7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xMjg9dm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOS17XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEzMDpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IHVzZXJfa2V5X3BheWxvYWRfbG9ja2VkKGtleSk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEzMS1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE0Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0Ny17XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE0ODpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OS1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE3MT1sb25nIHVzZXJfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTcyLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTczOlx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNzQtXHRsb25nIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFVzZXIgS2V5IFBheWxvYWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZXNlIGB1c2VyX2tleV9wYXlsb2FkYCBzdHJ1Y3RzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcmVhY2hpbmcgZm9yIGBpbmNsdWRlL2tleXMvdXNlci10eXBlLmhgLiBJIHJlY2FsbCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIHNob3VsZCBiZSwgYW5kIHRoZSBkZXRhaWxzIHRoZXJlIGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZXByZXNlbnRhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGF0IGBzdHJ1Y3RgIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgaXRzIGRlc2lnbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWFsbHkgbG9va2luZyB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB3aGF0JiMzOTtzIGJlaW5nIHN0b3JlZCwgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IGEgbG93IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LyogdXNlci10eXBlLmg6IFVzZXItZGVmaW5lZCBrZXkgdHlwZVxuICAgMzpcdCAqXG4gICA0Olx0ICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgIDU6XHQgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2lmbmRlZiBfS0VZU19VU0VSX1RZUEVfSFxuICAgOTpcdCNkZWZpbmUgX0tFWVNfVVNFUl9UWVBFX0hcbiAgMTA6XHRcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXkuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHQjaWZkZWYgQ09ORklHX0tFWVNcbiAgMTU6XHRcbiAgMTY6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIDE3Olx0LypcbiAgMTg6XHQgKiB0aGUgcGF5bG9hZCBmb3IgYSBrZXkgb2YgdHlwZSBcJiMzNDt1c2VyXCYjMzQ7IG9yIFwmIzM0O2xvZ29uXCYjMzQ7XG4gIDE5Olx0ICogLSBvbmNlIGZpbGxlZCBpbiBhbmQgYXR0YWNoZWQgdG8gYSBrZXk6XG4gIDIwOlx0ICogICAtIHRoZSBwYXlsb2FkIHN0cnVjdCBpcyBpbnZhcmlhbnQgbWF5IG5vdCBiZSBjaGFuZ2VkLCBvbmx5IHJlcGxhY2VkXG4gIDIxOlx0ICogICAtIHRoZSBwYXlsb2FkIG11c3QgYmUgcmVhZCB3aXRoIFJDVSBwcm9jZWR1cmVzIG9yIHdpdGggdGhlIGtleSBzZW1hcGhvcmVcbiAgMjI6XHQgKiAgICAgaGVsZFxuICAyMzpcdCAqICAgLSB0aGUgcGF5bG9hZCBtYXkgb25seSBiZSByZXBsYWNlZCB3aXRoIHRoZSBrZXkgc2VtYXBob3JlIHdyaXRlLWxvY2tlZFxuICAyNDpcdCAqIC0gdGhlIGtleSYjMzk7cyBkYXRhIGxlbmd0aCBpcyB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIGRhdGEsIG5vdCBpbmNsdWRpbmcgdGhlXG4gIDI1Olx0ICogICBwYXlsb2FkIHdyYXBwZXJcbiAgMjY6XHQgKi9cbiAgMjc6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7XG4gIDI4Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdHJjdTtcdFx0LyogUkNVIGRlc3RydWN0b3IgKi9cbiAgMjk6XHRcdHVuc2lnbmVkIHNob3J0XHRkYXRhbGVuO1x0LyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqL1xuICAzMDpcdFx0Y2hhclx0XHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xuICAzMTpcdH07XG4gIDMyOlx0XG4gIDMzOlx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyO1xuICAzNDpcdGV4dGVybiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb247XG4gIDM1Olx0XG4gIDM2Olx0c3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcbiAgMzc6XHRcbiAgMzg6XHRleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gIDM5Olx0ZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuICA0MDpcdGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiAgNDE6XHRleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpO1xuICA0MjpcdGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xuICA0MzpcdGV4dGVybiB2b2lkIHVzZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqdXNlciwgc3RydWN0IHNlcV9maWxlICptKTtcbiAgNDQ6XHRleHRlcm4gbG9uZyB1c2VyX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pO1xuICA0NTpcdFxuICA0NjpcdHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbnN0IHN0cnVjdCBrZXkgKmtleSlcbiAgNDc6XHR7XG4gIDQ4Olx0XHRyZXR1cm4gKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICopZGVyZWZlcmVuY2Vfa2V5X3JjdShrZXkpO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX2xvY2tlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXG4gIDUyOlx0e1xuICA1MzpcdFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xuICA1NDpcdH1cbiAgNTU6XHRcbiAgNTY6XHQjZW5kaWYgLyogQ09ORklHX0tFWVMgKi9cbiAgNTc6XHRcbiAgNTg6XHQjZW5kaWYgLyogX0tFWVNfVVNFUl9UWVBFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTI3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEROUyBSZXNvbHZlciBQcmVwYXJzZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGEgY2hhbmdlIHRvIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIHdpdGhpbiBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIGV4YWN0IHJvbGUg4oCTIHRoZSBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlLCB0aGUgaW5jb21pbmcgRE5TIHF1ZXJ5IGdldHMgZXhhbWluZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IHR5cGUuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsIHZhbGlkYXRpb24sIHNhbml0eSBjaGVja3MsIG9yIHBlcmhhcHMgZXZlbiBlYXJseSBwcmUtcHJvY2Vzc2luZyByZWxhdGVkIHRvIEROU0tFWS9EUyByZWNvcmRzIGJlZm9yZSB0aGUgcmVzb2x2ZXIgZGl2ZXMgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogdGhlIG1vZGlmaWNhdGlvbiBlbnRhaWxzLiBJcyB0aGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciwgbW9yZSBjb25jZXJuaW5nbHksIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIG9yIGEgZml4IHRoYXQgbWlnaHQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBieSBvbWlzc2lvbj8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZiB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRcdFx0XHRcdCAgICBvcHRfbmxlbiwgb3B0X25sZW4sIG9wdCk7XG4gMTkxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTkyOlx0XHRcdH0gd2hpbGUgKG9wdCA9IG5leHRfb3B0ICYjNDM7IDEsIG9wdCBcdTAwM2MgZW5kKTtcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdC8qIGRvbiYjMzk7dCBjYWNoZSB0aGUgcmVzdWx0IGlmIHdlJiMzOTtyZSBjYWNoaW5nIGFuIGVycm9yIHNheWluZyB0aGVyZSYjMzk7cyBub1xuIDE5NjpcdFx0ICogcmVzdWx0ICovXG4gMTk3Olx0XHRpZiAocHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pIHtcbiAxOTg6XHRcdFx0a2xlYXZlKFwmIzM0OyA9IDAgW2hfZXJyb3IgJWxkXVwmIzM0OywgUFRSX0VSUihwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2Vycm9yXSkpO1xuIDE5OTpcdFx0XHRyZXR1cm4gMDtcbiAyMDA6XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRzdG9yZV9yZXN1bHQ6XG4gMjAzOlx0XHRrZGVidWcoXCYjMzQ7c3RvcmUgcmVzdWx0XCYjMzQ7KTtcbiAyMDQ6XHRcdHByZXAtXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xuIDIwNTpcdFxuIDIwNjpcdFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiAyMDc6XHRcdGlmICghdXBheWxvYWQpIHtcbiAyMDg6XHRcdFx0a2xlYXZlKFwmIzM0OyA9IC1FTk9NRU1cJiMzNDspO1xuIDIwOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMTA6XHRcdH1cbiAyMTE6XHRcbiAyMTI6XHRcdHVwYXlsb2FkLVx1MDAzZWRhdGFsZW4gPSByZXN1bHRfbGVuO1xuIDIxMzpcdFx0bWVtY3B5KHVwYXlsb2FkLVx1MDAzZWRhdGEsIGRhdGEsIHJlc3VsdF9sZW4pO1xuIDIxNDpcdFxuIDIxNTpcdFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSA9IHVwYXlsb2FkO1xuIDIxNjpcdFx0a2xlYXZlKFwmIzM0OyA9IDBcJiMzNDspO1xuIDIxNzpcdFx0cmV0dXJuIDA7XG4gMjE4Olx0fVxuIDIxOTpcdFxuIDIyMDpcdC8qXG4gMjIxOlx0ICogQ2xlYW4gdXAgdGhlIHByZXBhcnNlIGRhdGFcbiAyMjI6XHQgKi9cbiAyMjM6XHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIDIyNDpcdHtcbiAyMjU6XHRcdHByX2RldmVsKFwmIzM0Oz09XHUwMDNlJXMoKVxcblwmIzM0OywgX19mdW5jX18pO1xuIDIyNjpcdFxuIDIyNzpcdFx0a2ZyZWUocHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSk7XG4gMjI4Olx0fVxuIDIyOTpcdFxuIDIzMDpcdC8qXG4gMjMxOlx0ICogVGhlIGRlc2NyaXB0aW9uIGlzIG9mIHRoZSBmb3JtIFwmIzM0O1tcdTAwM2N0eXBlXHUwMDNlOl1cdTAwM2Nkb21haW5fbmFtZVx1MDAzZVwmIzM0O1xuIDIzMjpcdCAqXG4gMjMzOlx0ICogVGhlIGRvbWFpbiBuYW1lIG1heSBiZSBhIHNpbXBsZSBuYW1lIG9yIGFuIGFic29sdXRlIGRvbWFpbiBuYW1lICh3aGljaFxuIDIzNDpcdCAqIHNob3VsZCBlbmQgd2l0aCBhIHBlcmlvZCkuICBUaGUgZG9tYWluIG5hbWUgaXMgY2FzZS1pbmRlcGVuZGVudC5cbiAyMzU6XHQgKi9cbiAyMzY6XHRzdGF0aWMgYm9vbCBkbnNfcmVzb2x2ZXJfY21wKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiAyMzc6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcbiAyMzg6XHR7XG4gMjM5Olx0XHRpbnQgc2xlbiwgZGxlbiwgcmV0ID0gMDtcbiAyNDA6XHRcdGNvbnN0IGNoYXIgKnNyYyA9IGtleS1cdTAwM2VkZXNjcmlwdGlvbiwgKmRzcCA9IG1hdGNoX2RhdGEtXHUwMDNlcmF3X2RhdGE7XG4gMjQxOlx0XG4gMjQyOlx0XHRrZW50ZXIoXCYjMzQ7JXMsJXNcJiMzNDssIHNyYywgZHNwKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdGlmICghc3JjIHx8ICFkc3ApXG4gMjQ1Olx0XHRcdGdvdG8gbm9fbWF0Y2g7XG4gMjQ2Olx0XG4gMjQ3Olx0XHRpZiAoc3RyY2FzZWNtcChzcmMsIGRzcCkgPT0gMClcbiAyNDg6XHRcdFx0Z290byBtYXRjaGVkO1xuIDI0OTpcdFxuIDI1MDpcdFx0c2xlbiA9IHN0cmxlbihzcmMpO1xuIDI1MTpcdFx0ZGxlbiA9IHN0cmxlbihkc3ApO1xuIDI1MjpcdFx0aWYgKHNsZW4gXHUwMDNjPSAwIHx8IGRsZW4gXHUwMDNjPSAwKVxuIDI1MzpcdFx0XHRnb3RvIG5vX21hdGNoO1xuIDI1NDpcdFx0aWYgKHNyY1tzbGVuIC0gMV0gPT0gJiMzOTsuJiMzOTspXG4gMjU1Olx0XHRcdHNsZW4tLTtcbiAyNTY6XHRcdGlmIChkc3BbZGxlbiAtIDFdID09ICYjMzk7LiYjMzk7KVxuIDI1NzpcdFx0XHRkbGVuLS07XG4gMjU4Olx0XHRpZiAoc2xlbiAhPSBkbGVuIHx8IHN0cm5jYXNlY21wKHNyYywgZHNwLCBzbGVuKSAhPSAwKVxuIDI1OTpcdFx0XHRnb3RvIG5vX21hdGNoO1xuIDI2MDpcdFxuIDI2MTpcdG1hdGNoZWQ6XG4gMjYyOlx0XHRyZXQgPSAxO1xuIDI2MzpcdG5vX21hdGNoOlxuIDI2NDpcdFx0a2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuIDI2NTpcdFx0cmV0dXJuIHJldDtcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0LypcbiAyNjk6XHQgKiBQcmVwYXJzZSB0aGUgbWF0Y2ggY3JpdGVyaW9uLlxuIDI3MDpcdCAqL1xuIDI3MTpcdHN0YXRpYyBpbnQgZG5zX3Jlc29sdmVyX21hdGNoX3ByZXBhcnNlKHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcbiAyNzI6XHR7XG4gMjczOlx0XHRtYXRjaF9kYXRhLVx1MDAzZWxvb2t1cF90eXBlID0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0lURVJBVEU7XG4gMjc0Olx0XHRtYXRjaF9kYXRhLVx1MDAzZWNtcCA9IGRuc19yZXNvbHZlcl9jbXA7XG4gMjc1Olx0XHRyZXR1cm4gMDtcbiAyNzY6XHR9XG4gMjc3Olx0XG4gMjc4Olx0LypcbiAyNzk6XHQgKiBEZXNjcmliZSBhIEROUyBrZXlcbiAyODA6XHQgKi9cbiAyODE6XHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gMjgyOlx0e1xuIDI4MzpcdFx0c2VxX3B1dHMobSwga2V5LVx1MDAzZWRlc2NyaXB0aW9uKTtcbiAyODQ6XHRcdGlmIChrZXlfaXNfcG9zaXRpdmUoa2V5KSkge1xuIDI4NTpcdFx0XHRpbnQgZXJyID0gUFRSX0VSUihrZXktXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZXJyb3JdKTtcbiAyODY6XHRcbiAyODc6XHRcdFx0aWYgKGVycilcbiAyODg6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzogJWRcJiMzNDssIGVycik7XG4gMjg5Olx0XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBETlMgUmVzb2x2ZXIgS2V5IFR5cGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBgJiM0MzsgMWAgZnJvbSB0aGUgYGttYWxsb2NfZmxleGAgY2FsbCwgbWFraW5nIGl0IGBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtgIGFuZCBhbHNvIGdvdCByaWQgb2YgdGhlIG51bGwgdGVybWluYXRpb24gYHVwYXlsb2FkLSZndDtkYXRhW3Jlc3VsdF9sZW5dID0gJiMzOTtcMCYjMzk7O2AuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBvZmYtYnktb25lIHdyaXRlIG9yLCBtb3JlIGVmZmljaWVudGx5LCB0byBhdm9pZCBhbGxvY2F0aW5nIGFuZCBzZXR0aW5nIGFuIHVubmVjZXNzYXJ5IGJ5dGUgdG8gemVyby4KCldhaXQgYSBtaW51dGUsIHRoaXMgaXMgZm9yIGEgYHVzZXJfa2V5X3BheWxvYWRgIHN0cnVjdCwgd2hpY2ggaGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBjaGFyIGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSlgLiBUaGF0IHN0cnVjdHVyZSYjMzk7cyBzZXR1cCBpcyBjcml0aWNhbC4gSWYgd2UmIzM5O3JlIGNvcHlpbmcgYHJlc3VsdF9sZW5gIGJ5dGVzICphbmQqIHdlIGRvbiYjMzk7dCBhY3R1YWxseSAqbmVlZCogbnVsbCB0ZXJtaW5hdGlvbiwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYnl0ZSBhbmQgdGhlIG51bGwgYXNzaWdubWVudCBpcyBhYnNvbHV0ZWx5IGNvcnJlY3QuIEl0JiMzOTtzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB0aGUgY29kZSBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdGhlIG51bGwgdGVybWluYXRpb24uIE1ha2VzIHNlbnNlLgoKTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHVwYXlsb2FkYCBpcyBiZWluZyB1c2VkLiBBaCwgeWVzLCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcHJlcGFyc2UgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgdXNlZCBmb3IgdGhlIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBiZWluZyB1c2VkLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdCB0aGUgYGRuc19yZXNvbHZlcmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBiZWZvcmUgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0IGZvciBvdXIgY3VycmVudCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEROU19SRVNPTFZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNC0jXG5uZXQvZG5zX3Jlc29sdmVyL0tjb25maWc6NTpjb25maWcgRE5TX1JFU09MVkVSXG5uZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0ROUyBSZXNvbHZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSByZXF1aXJlbWVudCBzcGVjaWZpZXMgYENPTkZJR19ETlNfUkVTT0xWRVJgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGxpbmtlZCB0byB0aGF0PyYjMzQ7IFdlIGtub3cgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGNhc2NhZGUuIFRoZSBETlMgcmVzb2x2ZXIgYWxtb3N0IGNlcnRhaW5seSBoYXMgZGVwZW5kZW5jaWVzLCBhbmQgb2Z0ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHRyaWdnZXIgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfRE5TX1JFU09MVkVSYCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIHJlbGF0ZWQgbmV0d29yayBzZXR0aW5ncz8gU2VjdXJpdHkgcG9saWNpZXM/IExvZ2dpbmcgb3B0aW9ucz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSByZWxhdGVkIGNvbmZpZ3MgYW5kIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zIGJlZm9yZSBJIGdvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Ruc19yZXNvbHZlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlclxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgRE5TX1JFU09MVkVSXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtETlMgUmVzb2x2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBLRVlTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBETlMgUmVzb2x2ZXIga2V5IHR5cGVcbiAgMTA6XHRcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB1cGNhbGxzIHRvIHBlcmZvcm0gRE5TIGxvb2t1cHMgaW5cbiAgMTE6XHRcdCAgdXNlcnNwYWNlLlxuICAxMjpcdFxuICAxMzpcdFx0ICBETlMgUmVzb2x2ZXIgaXMgdXNlZCB0byBxdWVyeSBETlMgc2VydmVyIGZvciBpbmZvcm1hdGlvbi4gIEV4YW1wbGVzXG4gIDE0Olx0XHQgIGJlaW5nIHJlc29sdmluZyBhIFVOQyBob3N0bmFtZSBlbGVtZW50IHRvIGFuIElQIGFkZHJlc3MgZm9yIENJRlMgb3JcbiAgMTU6XHRcdCAgcGVyZm9ybWluZyBhIEROUyBxdWVyeSBmb3IgQUZTREIgcmVjb3JkcyBzbyB0aGF0IEFGUyBjYW4gbG9jYXRlIGFcbiAgMTY6XHRcdCAgY2VsbCYjMzk7cyB2b2x1bWUgbG9jYXRpb24gZGF0YWJhc2Ugc2VydmVycy5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgRE5TIFJlc29sdmVyIGlzIHVzZWQgYnkgdGhlIENJRlMgYW5kIEFGUyBtb2R1bGVzLCBhbmQgd291bGQgc3VwcG9ydFxuICAxOTpcdFx0ICBTTUIyIGxhdGVyLiAgRE5TIFJlc29sdmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlcnNwYWNlIHVwY2FsbFxuICAyMDpcdFx0ICBoZWxwZXIgXCYjMzQ7L3NiaW4vZG5zLnJlc29sdmVyXCYjMzQ7IHZpYSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIucnN0XHUwMDNlIGZvciBmdXJ0aGVyXG4gIDIzOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMjY6XHRcdCAgZG5zX3Jlc29sdmVyLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRE5TIFJlc29sdmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBETlMgcmVzb2x2ZXIgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ETlNfUkVTT0xWRVJgIGFuZCBgQ09ORklHX0tFWVNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGF0IG9uZS4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsYXRlZC4gU2Nhbm5pbmcuLi4gUmlnaHQsIGxvb2tzIGxpa2UgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gaG9uZSBpbiBvbi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWgsIGhlcmUmIzM5O3Mgb25lIC0gYGtleV90eXBlX2Ruc19yZXNvbHZlcmAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGluaXRfZG5zX3Jlc29sdmVyYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4KClRvIGRpdmUgZGVlcGVyIGludG8gdGhpcywgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9uIGlzIG5vdGVkIC0gaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gY2hlY2sgYG5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgcHJlcGFyc2VgIGZ1bmN0aW9uIGZvciB0aGUgYGRuc19yZXNvbHZlcmAga2V5IHR5cGUgZ2V0cyBpbnZva2VkIHdoZW5ldmVyIGEga2V5IG9mIHRoYXQgdHlwZSBpcyBjcmVhdGVkIG9yIG1vZGlmaWVkLiBUaGF0JiMzOTtzIHRocm91Z2ggYGFkZF9rZXlgIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIHRoaXMgY29udHJhZGljdHMgdGhlIGNvZGluZyBndWlkZWxpbmVzIGEgYml0LiBJIHJlY2FsbCBpdCBzdGF0aW5nIHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaG9zZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMsIGJ1dCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBCZWNhdXNlIHRoZSBhZGRyZXNzIGlzIHRha2VuLCB0aGUgY29tcGlsZXIgY2FuJiMzOTt0IGNvbXBsZXRlbHkgaW5saW5lIGl0LiBUaGF0IGdpdmVzIGl0IGEgdW5pcXVlIHN5bWJvbC4gU28sIHRoYXQgcmVxdWlyZW1lbnQgaXMgZnVsZmlsbGVkLiBUbyBiZSB0aG9yb3VnaCwgdGhvdWdoLCBJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgLSZndDtwcmVwYXJzZWAuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGAtJmd0O3ByZXBhcnNlYCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgc28gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZXByZXBhcnNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy9rZXkuYz00OTk9aW50IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhzdHJ1Y3Qga2V5ICprZXksXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTQtXHRwcmVwLmV4cGlyeSA9IFRJTUU2NF9NQVg7XG5zZWN1cml0eS9rZXlzL2tleS5jOjUxNTpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSkge1xuc2VjdXJpdHkva2V5cy9rZXkuYzo1MTY6XHRcdHJldCA9IGtleS1cdTAwM2V0eXBlLVx1MDAzZXByZXBhcnNlKFx1MDAyNnByZXApO1xuc2VjdXJpdHkva2V5cy9rZXkuYy01MTctXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy01NDYtZXJyb3I6XG5zZWN1cml0eS9rZXlzL2tleS5jOjU0NzpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSlcbnNlY3VyaXR5L2tleXMva2V5LmMtNTQ4LVx0XHRrZXktXHUwMDNldHlwZS1cdTAwM2VmcmVlX3ByZXBhcnNlKFx1MDAyNnByZXApO1xuLS1cbnNlY3VyaXR5L2tleXMva2V5LmM9ODA2PXN0YXRpYyBrZXlfcmVmX3QgX19rZXlfY3JlYXRlX29yX3VwZGF0ZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy04MzUtXHRpZiAoIWluZGV4X2tleS50eXBlLVx1MDAzZWluc3RhbnRpYXRlIHx8XG5zZWN1cml0eS9rZXlzL2tleS5jOjgzNjpcdCAgICAoIWluZGV4X2tleS5kZXNjcmlwdGlvbiBcdTAwMjZcdTAwMjYgIWluZGV4X2tleS50eXBlLVx1MDAzZXByZXBhcnNlKSlcbnNlY3VyaXR5L2tleXMva2V5LmMtODM3LVx0XHRnb3RvIGVycm9yX3B1dF90eXBlO1xuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtODU1LVx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xuc2VjdXJpdHkva2V5cy9rZXkuYzo4NTY6XHRpZiAoaW5kZXhfa2V5LnR5cGUtXHUwMDNlcHJlcGFyc2UpIHtcbnNlY3VyaXR5L2tleXMva2V5LmM6ODU3Olx0XHRyZXQgPSBpbmRleF9rZXkudHlwZS1cdTAwM2VwcmVwYXJzZShcdTAwMjZwcmVwKTtcbnNlY3VyaXR5L2tleXMva2V5LmMtODU4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy05NTUtZXJyb3JfZnJlZV9wcmVwOlxuc2VjdXJpdHkva2V5cy9rZXkuYzo5NTY6XHRpZiAoaW5kZXhfa2V5LnR5cGUtXHUwMDNlcHJlcGFyc2UpXG5zZWN1cml0eS9rZXlzL2tleS5jLTk1Ny1cdFx0aW5kZXhfa2V5LnR5cGUtXHUwMDNlZnJlZV9wcmVwYXJzZShcdTAwMjZwcmVwKTtcbi0tXG5zZWN1cml0eS9rZXlzL2tleS5jPTEwNzY9aW50IGtleV91cGRhdGUoa2V5X3JlZl90IGtleV9yZWYsIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBwbGVuKVxuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtMTA5Ny1cdHByZXAuZXhwaXJ5ID0gVElNRTY0X01BWDtcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5ODpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSkge1xuc2VjdXJpdHkva2V5cy9rZXkuYzoxMDk5Olx0XHRyZXQgPSBrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZShcdTAwMjZwcmVwKTtcbnNlY3VyaXR5L2tleXMva2V5LmMtMTEwMC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTUtZXJyb3I6XG5zZWN1cml0eS9rZXlzL2tleS5jOjExMTY6XHRpZiAoa2V5LVx1MDAzZXR5cGUtXHUwMDNlcHJlcGFyc2UpXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTctXHRcdGtleS1cdTAwM2V0eXBlLVx1MDAzZWZyZWVfcHJlcGFyc2UoXHUwMDI2cHJlcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXkgVXBkYXRlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGNlbnRlcmVkIGFyb3VuZCBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGtleV9pbnN0YW50aWF0ZV9hbmRfbGlua2AsIGBfX2tleV9jcmVhdGVfb3JfdXBkYXRlYCwgYW5kIGBrZXlfdXBkYXRlYCBhbGwgY2FsbCBgLSZndDtwcmVwYXJzZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGluIHR1cm4sIGNhbGxlZCBieSBgc3lzX2FkZF9rZXlgIGFuZCBgc3lzX2tleWN0bGAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgYSBjYWxsYmFjayBmdW5jdGlvbi4gU2luY2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgbW9kaWZpY2F0aW9uLgoKQnV0LCBoYW5nIG9uLCBpdCBzZWVtcyBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyAqdGhlKiBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEFuZCBldmVuIGJldHRlciwgaXQmIzM5O3Mgc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgc3RpbGwgdGFrZW4gd2hpY2ggbWFrZXMgaXQgcGVyZmVjdGx5IG9rYXkgdG8gaW5jbHVkZSwgZXhhY3RseSBhcyBleHBlY3RlZC4gSSBicmllZmx5IGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmtgLCBgX19rZXlfY3JlYXRlX29yX3VwZGF0ZWAsIGFuZCBga2V5X3VwZGF0ZWAsIGJ1dCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24uCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTt2ZSBjaGVja2VkIGFuZCBjb25maXJtZWQ6IG5vIG90aGVyIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBBaCwgeWVzLCBgQ09ORklHX0ROU19SRVNPTFZFUmAgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZy4gU28sIHdlJiMzOTtsbCBuZWVkIHRvIGFkZCBgRE5TX1JFU09MVkVSYCB0byBgRW5hYmxlQ29uZmlnc2AuIEl0IGxvb2tzIGxpa2UgYEtFWVNgIGlzIGFsc28gcmVxdWlyZWQsIGJ1dCB0aGF0JiMzOTtzIGEgbW9yZSBnZW5lcmljIGNvbmZpZy4gSSYjMzk7bGwgYWRkIHRoYXQgYXMgd2VsbCwganVzdCB0byBiZSBzYWZlLgoKRmluYWxseSwgSSYjMzk7bGwgcmV2aXNpdCBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIGZvciBhbnkgcmVtYWluaW5nIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyMwoJCQkJCQkJb3V0cHV0OiA5MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggbG9va3Mgc29saWQgZnJvbSBhIHF1aWNrIGdsYW5jZS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgdGhhdCYjMzk7cyB0aGUga2V5LiBSZW1vdmluZyB0aGF0IGAmIzQzOyAxYCBmcm9tIGBrbWFsbG9jX2ZsZXhgIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCYjMzk7cyBlaXRoZXIgZml4aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIGF0IGxlYXN0IGl0IGNsZWFucyB1cCB0aGUgY29kZSBhIGJpdC4gRWl0aGVyIHdheSwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyBpdCByZWFjaGFibGU/IFllcyEgSXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBhZGRfa2V5YCBzeXNjYWxsIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIHR5cGUuIEJpbmdvLiBUaGF0IG1ha2VzIGl0IGltbWVkaWF0ZWx5IHdvcnRoIHB1dHRpbmcgb24gdGhlIGZ1enppbmcgbGlzdC4KCkxldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gRm9yIGZvY3VzIHN5bWJvbHMsIEkmIzM5O2xsIHNwZWNpZnkgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNoYW5nZSBoYXBwZW5lZC4gV2UgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBETlNfUkVTT0xWRVJgIGFuZCBgS0VZU2AuCgpNeSByZWFzb25pbmcgaXMgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLiBJdCYjMzk7cyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gKHNpemUpIGFuZCByZW1vdmVzIG51bGwgdGVybWluYXRpb24sIHdoaWNoIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzLiBDcml0aWNhbGx5LCB0aGlzIGNoYW5nZSBpcyB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYWRkX2tleWAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlciBpbnB1dCB0byB0aGUgYWZmZWN0ZWQgY29kZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhpcyBpbiB0aGUgZnV6emluZyByZXBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjQ3LjQ5NzY0NTU4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMxNDQ2MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkROU19SRVNPTFZFUlwiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjQ3LjQ5NzY1MTMyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDQ3NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFkNWZiMjhlMTRjZTZjNDVmODc5NmRmZGYyYTE4Yzg2MzZjOWM1YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuaW5kZXggYzNjOGMzMjQwZWY5NC4uNDUxMjQ3ODY0YTYzOCAxMDA2NDRcXG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuQEAgLTIwMyw3ICsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0a2RlYnVnKFxcXCJzdG9yZSByZXN1bHRcXFwiKTtcXG4gXFx0cHJlcC1cXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xcbiBcXG4tXFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuICsgMSk7XFxuK1xcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbik7XFxuIFxcdGlmICghdXBheWxvYWQpIHtcXG4gXFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0yMTEsNyArMjExLDYgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcbiBcXHR1cGF5bG9hZC1cXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XFxuIFxcdG1lbWNweSh1cGF5bG9hZC1cXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XFxuLVxcdHVwYXlsb2FkLVxcdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcXFwwJztcXG4gXFxuIFxcdHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2RhdGFdID0gdXBheWxvYWQ7XFxuIFxcdGtsZWF2ZShcXFwiID0gMFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo0OC43ODkwMDU3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTI0MDA3MzE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETlNfUkVTT0xWRVJcIixcbiAgICBcIktFWVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbnNfcmVzb2x2ZXJfcHJlcGFyc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHJlcGFyc2UgZnVuY3Rpb24gZm9yIHRoZSBkbnNfcmVzb2x2ZXIga2V5IHR5cGUsIGNoYW5naW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzaXplIGFuZCByZW1vdmluZyBudWxsIHRlcm1pbmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYWRkX2tleSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDVmYjI4ZTE0Y2U2YzQ1Zjg3OTZkZmRmMmExOGM4NjM2YzljNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbmluZGV4IGMzYzhjMzI0MGVmOTQuLjQ1MTI0Nzg2NGE2MzggMTAwNjQ0XG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbkBAIC0yMDMsNyArMjAzLDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRrZGVidWcoXCJzdG9yZSByZXN1bHRcIik7XG4gXHRwcmVwLVx1MDAzZXF1b3RhbGVuID0gcmVzdWx0X2xlbjtcbiBcbi1cdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbiArIDEpO1xuK1x0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiBcdGlmICghdXBheWxvYWQpIHtcbiBcdFx0a2xlYXZlKFwiID0gLUVOT01FTVwiKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjExLDcgKzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG4tXHR1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcMCc7XG4gXG4gXHRwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2RhdGFdID0gdXBheWxvYWQ7XG4gXHRrbGVhdmUoXCIgPSAwXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDQ6NDguNzg5MDA3MjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4ODc0NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBETlMgUmVzb2x2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSByZW1vdmFsIG9mIGEgYCsgMWAgZnJvbSBhIGBrbWFsbG9jX2ZsZXhgIGNhbGwgYW5kIGFsc28gYSByZW1vdmFsIG9mIGEgbnVsbCB0ZXJtaW5hdGlvbiBhc3NpZ25tZW50IChgdXBheWxvYWQtXHUwMDNlZGF0YVtyZXN1bHRfbGVuXSA9ICdcXDAnO2ApLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLlxuXG5GaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoYXQgYHVwYXlsb2FkYCBhY3R1YWxseSAqaXMqLiBBaCwgaXQncyBhIGBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZGAuIEdvb2QsIHRoYXQgZ2l2ZXMgbWUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aC5cblxuTm93LCBJJ2xsIHRyYWNrIGRvd24gd2hlcmUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIHRoaXMgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBvZiB0aGF0IHBheWxvYWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGxlZ2l0aW1hdGUgZml4IG9yLCBwb3RlbnRpYWxseSwgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSXMgdGhlIFwiKzFcIiB1bm5lY2Vzc2FyeSwgbGVhZGluZyB0byBhbiBvdmVyLWFsbG9jYXRpb24/IE9yIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBudWxsIHRlcm1pbmF0aW9uIHBvdGVudGlhbGx5IGNyZWF0aW5nIGEgdnVsbmVyYWJpbGl0eT8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDQ6NTIuNzc3NzU3NTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6ODA6ZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODEte1xcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM9MzA5PXN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIgPSB7XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXFx0LmZsYWdzXFx0XFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jOjMxMjpcXHQucHJlcGFyc2VcXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTMtXFx0LmZyZWVfcHJlcGFyc2VcXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo1Mi44MjQ3MDI3MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgzODYzNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCoqXG5cblJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZGAuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIHN0YXJ0cyBzY2FubmluZywgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGRhdGEgc3RydWN0dXJlIGVmZmljaWVuY3ksIGFuZCBob3cgaXQgYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIga2V5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIHN1YnN5c3RlbS4gSXMgaXQgcHJpbWFyaWx5IGZvciB1c2VyLXNwYWNlIGtleSBtYW5hZ2VtZW50PyBJcyB0aGVyZSBhbiBpbmhlcmVudCB0cnVzdCBtb2RlbCBoZXJlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyB0aGlzIHRoaW5nICphY3R1YWxseSogaG9sZGluZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY3J5cHRvZ3JhcGhpYyBrZXlzLCBhY2Nlc3MgY29udHJvbCBsaXN0cywgY2FwYWJpbGl0eSB0b2tlbnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgc2lnbmFscyBjZXJ0YWluIHRoaW5ncyAtIHVzZXIga2V5cywgc28gdGhleSBhcmUgbGlrZWx5IHRpZWQgaW50byBzb21lIHNvcnQgb2YgY3JlZGVudGlhbCBvciBpZGVudGl0eSBtYW5hZ2VtZW50IHN5c3RlbS4gVGhlIFwicGF5bG9hZFwiIHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBzdWdnZXN0cyB0aGlzIHN0cnVjdCBwcm9iYWJseSBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdXNlcidzIGtleS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbnMgd2lsbCBjZW50ZXIgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbjogSG93IGlzIHRoaXMgc3RydWN0dXJlZCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3M/IEhvdyBkb2VzIGl0IGhhbmRsZSBrZXkgcmV2b2NhdGlvbiBhbmQgdXBkYXRlcz8gQXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIG1lbW9yeT8gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3Qgd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgdXNlciBrZXkgc3Vic3lzdGVtLCBhbmQgZnJvbSB0aGVyZSwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIGRpZ2dpbmcgaW50byB0aGUgYXNzb2NpYXRlZCBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCBhbmQgYWJ1c2VkLiBJIHdvbmRlciB3aGF0IHRoZSBmaWVsZCBuYW1lcyBhcmUsIGFuZCB0aGF0IHdvdWxkIGdpdmUgbWUgZnVydGhlciBpbnNpZ2h0cy4gQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjU2LjIwODU2ODE0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0OTgyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1c2VyX2tleV9wYXlsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImNyeXB0by9hZl9hbGcuYz0yMzM9c3RhdGljIGNvbnN0IHU4ICprZXlfZGF0YV9wdHJfdXNlcihjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuLS1cXG5jcnlwdG8vYWZfYWxnLmMtMjM1LXtcXG5jcnlwdG8vYWZfYWxnLmM6MjM2OlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuY3J5cHRvL2FmX2FsZy5jLTIzNy1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYz0yNDM3PXN0YXRpYyBpbnQgc2V0X2tleV91c2VyKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLCBzdHJ1Y3Qga2V5ICprZXkpXFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0Mzgte1xcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYzoyNDM5OlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0NDAtXFxuLS1cXG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmM9ODg9c3RhdGljIGludCBzZXRfa2V5X3VzZXIoc3RydWN0IGtleSAqa2V5LCBjaGFyICprZXlfYnl0ZXMsXFxuLS1cXG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmMtOTAte1xcbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYzo5MTpcXHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xcbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYy05Mi1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYz0zOD1zdGF0aWMgaW50IHZlcml0eV92ZXJpZnlfZ2V0X3NpZ19mcm9tX2tleShjb25zdCBjaGFyICprZXlfZGVzYyxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYy00MS1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jOjQyOlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jLTQzLVxcdGludCByZXQgPSAwO1xcbi0tXFxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM9NDA9ZmluZF9hbmRfbG9ja19wcm9jZXNzX2tleShjb25zdCBjaGFyICpwcmVmaXgsXFxuLS1cXG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00Ni1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM6NDc6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00OC1cXHRjb25zdCBzdHJ1Y3QgZnNjcnlwdF9rZXkgKnBheWxvYWQ7XFxuLS1cXG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaD0xMTQ9ZWNyeXB0ZnNfZ2V0X2tleV9wYXlsb2FkX2RhdGEoc3RydWN0IGtleSAqa2V5KVxcbi0tXFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE2LVxcdHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2s7XFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmg6MTE3OlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE4LVxcbi0tXFxuZnMvbmZzL25mczRpZG1hcC5jPTMwNT1zdGF0aWMgc3NpemVfdCBuZnNfaWRtYXBfZ2V0X2tleShjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbixcXG4tLVxcbmZzL25mcy9uZnM0aWRtYXAuYy0zMDktXFx0c3RydWN0IGtleSAqcmtleTtcXG5mcy9uZnMvbmZzNGlkbWFwLmM6MzEwOlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xcbmZzL25mcy9uZnM0aWRtYXAuYy0zMTEtXFx0c3NpemVfdCByZXQ7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYz0yMTgxPWNpZnNfc2V0X2NpZnNjcmVkcyhzdHJ1Y3Qgc21iM19mc19jb250ZXh0ICpjdHgsIHN0cnVjdCBjaWZzX3NlcyAqc2VzKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMjE5Mi1cXHRzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7XFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MjE5MzpcXHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMjE5NC1cXG4tLVxcbmZzL3ViaWZzL2F1dGguYz0yNTU9aW50IHViaWZzX2luaXRfYXV0aGVudGljYXRpb24oc3RydWN0IHViaWZzX2luZm8gKmMpXFxuLS1cXG5mcy91Ymlmcy9hdXRoLmMtMjU3LVxcdHN0cnVjdCBrZXkgKmtleXJpbmdfa2V5O1xcbmZzL3ViaWZzL2F1dGguYzoyNTg6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5mcy91Ymlmcy9hdXRoLmMtMjU5LVxcdGludCBlcnI7XFxuLS1cXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjYtICovXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjI3OnN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjgtXFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcdFxcdC8qIFJDVSBkZXN0cnVjdG9yICovXFxuLS1cXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg9NDQ9ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDUtXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQ2OnN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbnN0IHN0cnVjdCBrZXkgKmtleSlcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDcte1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0ODpcXHRyZXR1cm4gKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICopZGVyZWZlcmVuY2Vfa2V5X3JjdShrZXkpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00OS19XFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUwLVxcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX2xvY2tlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUyLXtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6NTM6XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC01NC19XFxuLS1cXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jPTE0Mz1zdGF0aWMgaW50IHJlYWRfa2V5X2Zyb21fdXNlcl9rZXlyaW5nKHN0cnVjdCBkbV9jcnlwdF9rZXkgKmRtX2tleSlcXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0NC17XFxua2VybmVsL2NyYXNoX2R1bXBfZG1fY3J5cHQuYzoxNDU6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0Ni1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuLS1cXG5saWIvZGlnc2lnLmM9NjM9c3RhdGljIGludCBkaWdzaWdfdmVyaWZ5X3JzYShzdHJ1Y3Qga2V5ICprZXksXFxuLS1cXG5saWIvZGlnc2lnLmMtNzYtXFx0Y29uc3QgdWludDhfdCAqZW5kcDtcXG5saWIvZGlnc2lnLmM6Nzc6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5saWIvZGlnc2lnLmMtNzgtXFx0c3RydWN0IHB1YmtleV9oZHIgKnBraDtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTgwPWRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MjpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODMtXFx0dW5zaWduZWQgbG9uZyBkZXJybm87XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jPTYyPWludCBkbnNfcXVlcnkoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02Ni17XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYzo2NzpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02OC1cXHRzdHJ1Y3Qga2V5ICpya2V5O1xcbi0tXFxuc2VjdXJpdHkva2V5cy9kaC5jPTE4PXN0YXRpYyBzc2l6ZV90IGRoX2RhdGFfZnJvbV9rZXkoa2V5X3NlcmlhbF90IGtleWlkLCBjb25zdCB2b2lkICoqZGF0YSlcXG4tLVxcbnNlY3VyaXR5L2tleXMvZGguYy0zNy1cXHRcXHRpZiAoc3RhdHVzID09IDApIHtcXG5zZWN1cml0eS9rZXlzL2RoLmM6Mzg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XFxuc2VjdXJpdHkva2V5cy9kaC5jLTM5LVxcdFxcdFxcdHVpbnQ4X3QgKmR1cGxpY2F0ZTtcXG4tLVxcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmM9MzAzPXN0YXRpYyBzdHJ1Y3Qga2V5ICpyZXF1ZXN0X3VzZXJfa2V5KGNvbnN0IGNoYXIgKm1hc3Rlcl9kZXNjLCBjb25zdCB1OCAqKm1hc3Rlcl9rZXksXFxuLS1cXG5zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jLTMwNS17XFxuc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYzozMDY6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMtMzA3LVxcdHN0cnVjdCBrZXkgKnVrZXk7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTU5PWludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy02MC17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo2MTpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy02Mi1cXHRzaXplX3QgZGF0YWxlbiA9IHByZXAtXFx1MDAzZWRhdGFsZW47XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTg5PXN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy05MC17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo5MTpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTkyLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6OTM6XFx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTk0LVxcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTAxPWludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDIte1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAzOlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp6YXAgPSBOVUxMO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTA0LVxcdGludCByZXQ7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEyOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOS17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMzA6XFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0gdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoa2V5KTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEzMS1cXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTQ2PXZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0Ny17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxNDg6XFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNDktXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE3MT1sb25nIHVzZXJfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE3Mi17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxNzM6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTc0LVxcdGxvbmcgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo1Ny45NjM1NTc1ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUzNDEzNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVXNlciBLZXkgUGF5bG9hZCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgYHVzZXJfa2V5X3BheWxvYWRgIHN0cnVjdHMuIFNwZWNpZmljYWxseSwgSSdtIHJlYWNoaW5nIGZvciBgaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oYC4gSSByZWNhbGwgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIHNob3VsZCBiZSwgYW5kIHRoZSBkZXRhaWxzIHRoZXJlIGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZXByZXNlbnRhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGF0IGBzdHJ1Y3RgIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgaXRzIGRlc2lnbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSdtIHJlYWxseSBsb29raW5nIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHdoYXQncyBiZWluZyBzdG9yZWQsIGFuZCBob3cgaXQncyBoYW5kbGVkIGF0IGEgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MDAuNzE2OTczNTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKiB1c2VyLXR5cGUuaDogVXNlci1kZWZpbmVkIGtleSB0eXBlXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICA1OlxcdCAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaWZuZGVmIF9LRVlTX1VTRVJfVFlQRV9IXFxuICAgOTpcXHQjZGVmaW5lIF9LRVlTX1VTRVJfVFlQRV9IXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXkuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gIDE1OlxcdFxcbiAgMTY6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiAgMTc6XFx0LypcXG4gIDE4OlxcdCAqIHRoZSBwYXlsb2FkIGZvciBhIGtleSBvZiB0eXBlIFxcXCJ1c2VyXFxcIiBvciBcXFwibG9nb25cXFwiXFxuICAxOTpcXHQgKiAtIG9uY2UgZmlsbGVkIGluIGFuZCBhdHRhY2hlZCB0byBhIGtleTpcXG4gIDIwOlxcdCAqICAgLSB0aGUgcGF5bG9hZCBzdHJ1Y3QgaXMgaW52YXJpYW50IG1heSBub3QgYmUgY2hhbmdlZCwgb25seSByZXBsYWNlZFxcbiAgMjE6XFx0ICogICAtIHRoZSBwYXlsb2FkIG11c3QgYmUgcmVhZCB3aXRoIFJDVSBwcm9jZWR1cmVzIG9yIHdpdGggdGhlIGtleSBzZW1hcGhvcmVcXG4gIDIyOlxcdCAqICAgICBoZWxkXFxuICAyMzpcXHQgKiAgIC0gdGhlIHBheWxvYWQgbWF5IG9ubHkgYmUgcmVwbGFjZWQgd2l0aCB0aGUga2V5IHNlbWFwaG9yZSB3cml0ZS1sb2NrZWRcXG4gIDI0OlxcdCAqIC0gdGhlIGtleSdzIGRhdGEgbGVuZ3RoIGlzIHRoZSBzaXplIG9mIHRoZSBhY3R1YWwgZGF0YSwgbm90IGluY2x1ZGluZyB0aGVcXG4gIDI1OlxcdCAqICAgcGF5bG9hZCB3cmFwcGVyXFxuICAyNjpcXHQgKi9cXG4gIDI3OlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG4gIDI4OlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdHJjdTtcXHRcXHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xcbiAgMjk6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRkYXRhbGVuO1xcdC8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi9cXG4gIDMwOlxcdFxcdGNoYXJcXHRcXHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyO1xcbiAgMzQ6XFx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9sb2dvbjtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcXG4gIDM3OlxcdFxcbiAgMzg6XFx0ZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgMzk6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgNDA6XFx0ZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgNDE6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcXG4gIDQyOlxcdGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xcbiAgNDM6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9kZXNjcmliZShjb25zdCBzdHJ1Y3Qga2V5ICp1c2VyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pO1xcbiAgNDQ6XFx0ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9yY3UoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9yY3Uoa2V5KTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxcbiAgNTI6XFx0e1xcbiAgNTM6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xcbiAgNTQ6XFx0fVxcbiAgNTU6XFx0XFxuICA1NjpcXHQjZW5kaWYgLyogQ09ORklHX0tFWVMgKi9cXG4gIDU3OlxcdFxcbiAgNTg6XFx0I2VuZGlmIC8qIF9LRVlTX1VTRVJfVFlQRV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjAwLjcxNzA1MjI4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODgxMzM2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBETlMgUmVzb2x2ZXIgUHJlcGFyc2UgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGEgY2hhbmdlIHRvIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIHdpdGhpbiBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSDigJMgdGhlIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSwgdGhlIGluY29taW5nIEROUyBxdWVyeSBnZXRzIGV4YW1pbmVkIGZvciB0aGlzIHNwZWNpZmljIGtleSB0eXBlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsIHZhbGlkYXRpb24sIHNhbml0eSBjaGVja3MsIG9yIHBlcmhhcHMgZXZlbiBlYXJseSBwcmUtcHJvY2Vzc2luZyByZWxhdGVkIHRvIEROU0tFWS9EUyByZWNvcmRzIGJlZm9yZSB0aGUgcmVzb2x2ZXIgZGl2ZXMgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogdGhlIG1vZGlmaWNhdGlvbiBlbnRhaWxzLiBJcyB0aGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciwgbW9yZSBjb25jZXJuaW5nbHksIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIG9yIGEgZml4IHRoYXQgbWlnaHQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBieSBvbWlzc2lvbj8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkaWZmIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gdGhpcyBjcml0aWNhbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MDQuMTA1MTg4NDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRfbmxlbiwgb3B0X25sZW4sIG9wdCk7XFxuIDE5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTkyOlxcdFxcdFxcdH0gd2hpbGUgKG9wdCA9IG5leHRfb3B0ICsgMSwgb3B0IFxcdTAwM2MgZW5kKTtcXG4gMTkzOlxcdFxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0LyogZG9uJ3QgY2FjaGUgdGhlIHJlc3VsdCBpZiB3ZSdyZSBjYWNoaW5nIGFuIGVycm9yIHNheWluZyB0aGVyZSdzIG5vXFxuIDE5NjpcXHRcXHQgKiByZXN1bHQgKi9cXG4gMTk3OlxcdFxcdGlmIChwcmVwLVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pIHtcXG4gMTk4OlxcdFxcdFxcdGtsZWF2ZShcXFwiID0gMCBbaF9lcnJvciAlbGRdXFxcIiwgUFRSX0VSUihwcmVwLVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pKTtcXG4gMTk5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0XFx0fVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdG9yZV9yZXN1bHQ6XFxuIDIwMzpcXHRcXHRrZGVidWcoXFxcInN0b3JlIHJlc3VsdFxcXCIpO1xcbiAyMDQ6XFx0XFx0cHJlcC1cXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4pO1xcbiAyMDc6XFx0XFx0aWYgKCF1cGF5bG9hZCkge1xcbiAyMDg6XFx0XFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIDIwOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjEwOlxcdFxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0dXBheWxvYWQtXFx1MDAzZWRhdGFsZW4gPSByZXN1bHRfbGVuO1xcbiAyMTM6XFx0XFx0bWVtY3B5KHVwYXlsb2FkLVxcdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0cHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0gPSB1cGF5bG9hZDtcXG4gMjE2OlxcdFxcdGtsZWF2ZShcXFwiID0gMFxcXCIpO1xcbiAyMTc6XFx0XFx0cmV0dXJuIDA7XFxuIDIxODpcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdC8qXFxuIDIyMTpcXHQgKiBDbGVhbiB1cCB0aGUgcHJlcGFyc2UgZGF0YVxcbiAyMjI6XFx0ICovXFxuIDIyMzpcXHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cHJfZGV2ZWwoXFxcIj09XFx1MDAzZSVzKClcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0a2ZyZWUocHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0pO1xcbiAyMjg6XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHQvKlxcbiAyMzE6XFx0ICogVGhlIGRlc2NyaXB0aW9uIGlzIG9mIHRoZSBmb3JtIFxcXCJbXFx1MDAzY3R5cGVcXHUwMDNlOl1cXHUwMDNjZG9tYWluX25hbWVcXHUwMDNlXFxcIlxcbiAyMzI6XFx0ICpcXG4gMjMzOlxcdCAqIFRoZSBkb21haW4gbmFtZSBtYXkgYmUgYSBzaW1wbGUgbmFtZSBvciBhbiBhYnNvbHV0ZSBkb21haW4gbmFtZSAod2hpY2hcXG4gMjM0OlxcdCAqIHNob3VsZCBlbmQgd2l0aCBhIHBlcmlvZCkuICBUaGUgZG9tYWluIG5hbWUgaXMgY2FzZS1pbmRlcGVuZGVudC5cXG4gMjM1OlxcdCAqL1xcbiAyMzY6XFx0c3RhdGljIGJvb2wgZG5zX3Jlc29sdmVyX2NtcChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIDIzNzpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdGludCBzbGVuLCBkbGVuLCByZXQgPSAwO1xcbiAyNDA6XFx0XFx0Y29uc3QgY2hhciAqc3JjID0ga2V5LVxcdTAwM2VkZXNjcmlwdGlvbiwgKmRzcCA9IG1hdGNoX2RhdGEtXFx1MDAzZXJhd19kYXRhO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRrZW50ZXIoXFxcIiVzLCVzXFxcIiwgc3JjLCBkc3ApO1xcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRpZiAoIXNyYyB8fCAhZHNwKVxcbiAyNDU6XFx0XFx0XFx0Z290byBub19tYXRjaDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0aWYgKHN0cmNhc2VjbXAoc3JjLCBkc3ApID09IDApXFxuIDI0ODpcXHRcXHRcXHRnb3RvIG1hdGNoZWQ7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHNsZW4gPSBzdHJsZW4oc3JjKTtcXG4gMjUxOlxcdFxcdGRsZW4gPSBzdHJsZW4oZHNwKTtcXG4gMjUyOlxcdFxcdGlmIChzbGVuIFxcdTAwM2M9IDAgfHwgZGxlbiBcXHUwMDNjPSAwKVxcbiAyNTM6XFx0XFx0XFx0Z290byBub19tYXRjaDtcXG4gMjU0OlxcdFxcdGlmIChzcmNbc2xlbiAtIDFdID09ICcuJylcXG4gMjU1OlxcdFxcdFxcdHNsZW4tLTtcXG4gMjU2OlxcdFxcdGlmIChkc3BbZGxlbiAtIDFdID09ICcuJylcXG4gMjU3OlxcdFxcdFxcdGRsZW4tLTtcXG4gMjU4OlxcdFxcdGlmIChzbGVuICE9IGRsZW4gfHwgc3RybmNhc2VjbXAoc3JjLCBkc3AsIHNsZW4pICE9IDApXFxuIDI1OTpcXHRcXHRcXHRnb3RvIG5vX21hdGNoO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRtYXRjaGVkOlxcbiAyNjI6XFx0XFx0cmV0ID0gMTtcXG4gMjYzOlxcdG5vX21hdGNoOlxcbiAyNjQ6XFx0XFx0a2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDI2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQvKlxcbiAyNjk6XFx0ICogUHJlcGFyc2UgdGhlIG1hdGNoIGNyaXRlcmlvbi5cXG4gMjcwOlxcdCAqL1xcbiAyNzE6XFx0c3RhdGljIGludCBkbnNfcmVzb2x2ZXJfbWF0Y2hfcHJlcGFyc2Uoc3RydWN0IGtleV9tYXRjaF9kYXRhICptYXRjaF9kYXRhKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0bWF0Y2hfZGF0YS1cXHUwMDNlbG9va3VwX3R5cGUgPSBLRVlSSU5HX1NFQVJDSF9MT09LVVBfSVRFUkFURTtcXG4gMjc0OlxcdFxcdG1hdGNoX2RhdGEtXFx1MDAzZWNtcCA9IGRuc19yZXNvbHZlcl9jbXA7XFxuIDI3NTpcXHRcXHRyZXR1cm4gMDtcXG4gMjc2OlxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0LypcXG4gMjc5OlxcdCAqIERlc2NyaWJlIGEgRE5TIGtleVxcbiAyODA6XFx0ICovXFxuIDI4MTpcXHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRzZXFfcHV0cyhtLCBrZXktXFx1MDAzZWRlc2NyaXB0aW9uKTtcXG4gMjg0OlxcdFxcdGlmIChrZXlfaXNfcG9zaXRpdmUoa2V5KSkge1xcbiAyODU6XFx0XFx0XFx0aW50IGVyciA9IFBUUl9FUlIoa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyODg6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiOiAlZFxcXCIsIGVycik7XFxuIDI4OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjA0LjEwNTI5NDE1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDczODU5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEROUyBSZXNvbHZlciBLZXkgVHlwZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGArIDFgIGZyb20gdGhlIGBrbWFsbG9jX2ZsZXhgIGNhbGwsIG1ha2luZyBpdCBga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbik7YCBhbmQgYWxzbyBnb3QgcmlkIG9mIHRoZSBudWxsIHRlcm1pbmF0aW9uIGB1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcMCc7YC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBpbnRlbmRlZCB0byBwcmV2ZW50IGFuIG9mZi1ieS1vbmUgd3JpdGUgb3IsIG1vcmUgZWZmaWNpZW50bHksIHRvIGF2b2lkIGFsbG9jYXRpbmcgYW5kIHNldHRpbmcgYW4gdW5uZWNlc3NhcnkgYnl0ZSB0byB6ZXJvLlxuXG5XYWl0IGEgbWludXRlLCB0aGlzIGlzIGZvciBhIGB1c2VyX2tleV9wYXlsb2FkYCBzdHJ1Y3QsIHdoaWNoIGhhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgY2hhciBkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpYC4gVGhhdCBzdHJ1Y3R1cmUncyBzZXR1cCBpcyBjcml0aWNhbC4gSWYgd2UncmUgY29weWluZyBgcmVzdWx0X2xlbmAgYnl0ZXMgKmFuZCogd2UgZG9uJ3QgYWN0dWFsbHkgKm5lZWQqIG51bGwgdGVybWluYXRpb24sIHRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJhIGJ5dGUgYW5kIHRoZSBudWxsIGFzc2lnbm1lbnQgaXMgYWJzb2x1dGVseSBjb3JyZWN0LiBJdCdzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB0aGUgY29kZSBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgbnVsbCB0ZXJtaW5hdGlvbi4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGB1cGF5bG9hZGAgaXMgYmVpbmcgdXNlZC4gQWgsIHllcywgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgdXNlZCBmb3IgdGhlIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLCBzbyBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgdGhlIGBkbnNfcmVzb2x2ZXJgIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgYmVmb3JlIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3Igb3VyIGN1cnJlbnQgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNTowOS41NzkxNTY4MjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDMyODU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE5TX1JFU09MVkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNC0jXFxubmV0L2Ruc19yZXNvbHZlci9LY29uZmlnOjU6Y29uZmlnIEROU19SRVNPTFZFUlxcbm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJETlMgUmVzb2x2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MTAuMzU5NDkwMDgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDQ5Njc3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcmVxdWlyZW1lbnQgc3BlY2lmaWVzIGBDT05GSUdfRE5TX1JFU09MVkVSYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGxpbmtlZCB0byB0aGF0P1wiIFdlIGtub3cgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGNhc2NhZGUuIFRoZSBETlMgcmVzb2x2ZXIgYWxtb3N0IGNlcnRhaW5seSBoYXMgZGVwZW5kZW5jaWVzLCBhbmQgb2Z0ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHRyaWdnZXIgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGludGVydHdpbmVkIHdpdGggYENPTkZJR19ETlNfUkVTT0xWRVJgIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgcmVsYXRlZCBuZXR3b3JrIHNldHRpbmdzPyBTZWN1cml0eSBwb2xpY2llcz8gTG9nZ2luZyBvcHRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHJlbGF0ZWQgY29uZmlncyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjEzLjE2NDQ2MDExMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlclxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIEROU19SRVNPTFZFUlxcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIkROUyBSZXNvbHZlciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBLRVlTXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBETlMgUmVzb2x2ZXIga2V5IHR5cGVcXG4gIDEwOlxcdFxcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB1cGNhbGxzIHRvIHBlcmZvcm0gRE5TIGxvb2t1cHMgaW5cXG4gIDExOlxcdFxcdCAgdXNlcnNwYWNlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEROUyBSZXNvbHZlciBpcyB1c2VkIHRvIHF1ZXJ5IEROUyBzZXJ2ZXIgZm9yIGluZm9ybWF0aW9uLiAgRXhhbXBsZXNcXG4gIDE0OlxcdFxcdCAgYmVpbmcgcmVzb2x2aW5nIGEgVU5DIGhvc3RuYW1lIGVsZW1lbnQgdG8gYW4gSVAgYWRkcmVzcyBmb3IgQ0lGUyBvclxcbiAgMTU6XFx0XFx0ICBwZXJmb3JtaW5nIGEgRE5TIHF1ZXJ5IGZvciBBRlNEQiByZWNvcmRzIHNvIHRoYXQgQUZTIGNhbiBsb2NhdGUgYVxcbiAgMTY6XFx0XFx0ICBjZWxsJ3Mgdm9sdW1lIGxvY2F0aW9uIGRhdGFiYXNlIHNlcnZlcnMuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgRE5TIFJlc29sdmVyIGlzIHVzZWQgYnkgdGhlIENJRlMgYW5kIEFGUyBtb2R1bGVzLCBhbmQgd291bGQgc3VwcG9ydFxcbiAgMTk6XFx0XFx0ICBTTUIyIGxhdGVyLiAgRE5TIFJlc29sdmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlcnNwYWNlIHVwY2FsbFxcbiAgMjA6XFx0XFx0ICBoZWxwZXIgXFxcIi9zYmluL2Rucy5yZXNvbHZlclxcXCIgdmlhIC9ldGMvcmVxdWVzdC1rZXkuY29uZi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci5yc3RcXHUwMDNlIGZvciBmdXJ0aGVyXFxuICAyMzpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMjY6XFx0XFx0ICBkbnNfcmVzb2x2ZXIuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MTMuMTY0NTI2MDQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjA1MzYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETlMgUmVzb2x2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IEknbSBkZWFsaW5nIHdpdGggYSBETlMgcmVzb2x2ZXIgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ETlNfUkVTT0xWRVJgIGFuZCBgQ09ORklHX0tFWVNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJJ20gc2VlaW5nLCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhhdCBvbmUuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkLiBTY2FubmluZy4uLiBSaWdodCwgbG9va3MgbGlrZSBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBBaCwgaGVyZSdzIG9uZSAtIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIGBpbml0X2Ruc19yZXNvbHZlcmAuIFRoYXQncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuVG8gZGl2ZSBkZWVwZXIgaW50byB0aGlzLCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24gaXMgbm90ZWQgLSBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byBjaGVjayBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2V5IG1hbmFnZW1lbnQuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjE3LjAyNTA2NTQ5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTU1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG5zX3Jlc29sdmVyX3ByZXBhcnNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTc5PXN0YXRpYyBpbnRcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy04MS17XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMS1cXHQuZmxhZ3NcXHRcXHQ9IEtFWV9UWVBFX05FVF9ET01BSU4gfCBLRVlfVFlQRV9JTlNUQU5UX1JFQVAsXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlxcdC5wcmVwYXJzZVxcdD0gZG5zX3Jlc29sdmVyX3ByZXBhcnNlLFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cXHQuZnJlZV9wcmVwYXJzZVxcdD0gZG5zX3Jlc29sdmVyX2ZyZWVfcHJlcGFyc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjE3LjA4MDQ4NjMyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDgyMzYwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYHByZXBhcnNlYCBmdW5jdGlvbiBmb3IgdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlIGdldHMgaW52b2tlZCB3aGVuZXZlciBhIGtleSBvZiB0aGF0IHR5cGUgaXMgY3JlYXRlZCBvciBtb2RpZmllZC4gVGhhdCdzIHRocm91Z2ggYGFkZF9rZXlgIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIHRoaXMgY29udHJhZGljdHMgdGhlIGNvZGluZyBndWlkZWxpbmVzIGEgYml0LiBJIHJlY2FsbCBpdCBzdGF0aW5nIHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaG9zZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlcywgYnV0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlcmAuIEJlY2F1c2UgdGhlIGFkZHJlc3MgaXMgdGFrZW4sIHRoZSBjb21waWxlciBjYW4ndCBjb21wbGV0ZWx5IGlubGluZSBpdC4gVGhhdCBnaXZlcyBpdCBhIHVuaXF1ZSBzeW1ib2wuIFNvLCB0aGF0IHJlcXVpcmVtZW50IGlzIGZ1bGZpbGxlZC4gVG8gYmUgdGhvcm91Z2gsIHRob3VnaCwgSSBzaG91bGQgYWxzbyBtYWtlIGEgbm90ZSBvZiB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxscyogYC1cdTAwM2VwcmVwYXJzZWAuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGAtXHUwMDNlcHJlcGFyc2VgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBzbyBJJ2xsIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjIyLjU2Mjg0ODYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc1NTIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZXByZXBhcnNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2tleXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2tleXMva2V5LmM9NDk5PWludCBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoc3RydWN0IGtleSAqa2V5LFxcbi0tXFxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTQtXFx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xcbnNlY3VyaXR5L2tleXMva2V5LmM6NTE1OlxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKSB7XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo1MTY6XFx0XFx0cmV0ID0ga2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZShcXHUwMDI2cHJlcCk7XFxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTctXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTU0Ni1lcnJvcjpcXG5zZWN1cml0eS9rZXlzL2tleS5jOjU0NzpcXHRpZiAoa2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZSlcXG5zZWN1cml0eS9rZXlzL2tleS5jLTU0OC1cXHRcXHRrZXktXFx1MDAzZXR5cGUtXFx1MDAzZWZyZWVfcHJlcGFyc2UoXFx1MDAyNnByZXApO1xcbi0tXFxuc2VjdXJpdHkva2V5cy9rZXkuYz04MDY9c3RhdGljIGtleV9yZWZfdCBfX2tleV9jcmVhdGVfb3JfdXBkYXRlKGtleV9yZWZfdCBrZXlyaW5nX3JlZixcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmMtODM1LVxcdGlmICghaW5kZXhfa2V5LnR5cGUtXFx1MDAzZWluc3RhbnRpYXRlIHx8XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo4MzY6XFx0ICAgICghaW5kZXhfa2V5LmRlc2NyaXB0aW9uIFxcdTAwMjZcXHUwMDI2ICFpbmRleF9rZXkudHlwZS1cXHUwMDNlcHJlcGFyc2UpKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtODM3LVxcdFxcdGdvdG8gZXJyb3JfcHV0X3R5cGU7XFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTg1NS1cXHRwcmVwLmV4cGlyeSA9IFRJTUU2NF9NQVg7XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo4NTY6XFx0aWYgKGluZGV4X2tleS50eXBlLVxcdTAwM2VwcmVwYXJzZSkge1xcbnNlY3VyaXR5L2tleXMva2V5LmM6ODU3OlxcdFxcdHJldCA9IGluZGV4X2tleS50eXBlLVxcdTAwM2VwcmVwYXJzZShcXHUwMDI2cHJlcCk7XFxuc2VjdXJpdHkva2V5cy9rZXkuYy04NTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmMtOTU1LWVycm9yX2ZyZWVfcHJlcDpcXG5zZWN1cml0eS9rZXlzL2tleS5jOjk1NjpcXHRpZiAoaW5kZXhfa2V5LnR5cGUtXFx1MDAzZXByZXBhcnNlKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtOTU3LVxcdFxcdGluZGV4X2tleS50eXBlLVxcdTAwM2VmcmVlX3ByZXBhcnNlKFxcdTAwMjZwcmVwKTtcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmM9MTA3Nj1pbnQga2V5X3VwZGF0ZShrZXlfcmVmX3Qga2V5X3JlZiwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4pXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTEwOTctXFx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5ODpcXHRpZiAoa2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZSkge1xcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5OTpcXHRcXHRyZXQgPSBrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKFxcdTAwMjZwcmVwKTtcXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTUtZXJyb3I6XFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMTE2OlxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtMTExNy1cXHRcXHRrZXktXFx1MDAzZXR5cGUtXFx1MDAzZWZyZWVfcHJlcGFyc2UoXFx1MDAyNnByZXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNToyMi42MjY2MTMxNTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0ODM2NDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2V5IFVwZGF0ZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgY2VudGVyZWQgYXJvdW5kIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rYCwgYF9fa2V5X2NyZWF0ZV9vcl91cGRhdGVgLCBhbmQgYGtleV91cGRhdGVgIGFsbCBjYWxsIGAtXHUwMDNlcHJlcGFyc2VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYHN5c19hZGRfa2V5YCBhbmQgYHN5c19rZXljdGxgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFNpbmNlIGl0J3MgYSBjYWxsYmFjaywgaXQncyBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBtb2RpZmljYXRpb24uXG5cbkJ1dCwgaGFuZyBvbiwgaXQgc2VlbXMgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEFuZCBldmVuIGJldHRlciwgaXQncyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBzdGlsbCB0YWtlbiB3aGljaCBtYWtlcyBpdCBwZXJmZWN0bHkgb2theSB0byBpbmNsdWRlLCBleGFjdGx5IGFzIGV4cGVjdGVkLiBJIGJyaWVmbHkgY29uc2lkZXJlZCBpbmNsdWRpbmcgYGtleV9pbnN0YW50aWF0ZV9hbmRfbGlua2AsIGBfX2tleV9jcmVhdGVfb3JfdXBkYXRlYCwgYW5kIGBrZXlfdXBkYXRlYCwgYnV0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJ3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZDogbm8gb3RoZXIgZnVuY3Rpb25zIHNlZW0gdG8gYmUgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBBaCwgeWVzLCBgQ09ORklHX0ROU19SRVNPTFZFUmAgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZy4gU28sIHdlJ2xsIG5lZWQgdG8gYWRkIGBETlNfUkVTT0xWRVJgIHRvIGBFbmFibGVDb25maWdzYC4gSXQgbG9va3MgbGlrZSBgS0VZU2AgaXMgYWxzbyByZXF1aXJlZCwgYnV0IHRoYXQncyBhIG1vcmUgZ2VuZXJpYyBjb25maWcuIEknbGwgYWRkIHRoYXQgYXMgd2VsbCwganVzdCB0byBiZSBzYWZlLlxuXG5GaW5hbGx5LCBJJ2xsIHJldmlzaXQgYG5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jYCBmb3IgYW55IHJlbWFpbmluZyBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MjguMjc0OTgwMTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc0NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbnNfcmVzb2x2ZXJfcHJlcGFyc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM9Nzk9c3RhdGljIGludFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jOjgwOmRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTMwOT1zdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZG5zX3Jlc29sdmVyID0ge1xcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtMzExLVxcdC5mbGFnc1xcdFxcdD0gS0VZX1RZUEVfTkVUX0RPTUFJTiB8IEtFWV9UWVBFX0lOU1RBTlRfUkVBUCxcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzozMTI6XFx0LnByZXBhcnNlXFx0PSBkbnNfcmVzb2x2ZXJfcHJlcGFyc2UsXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtMzEzLVxcdC5mcmVlX3ByZXBhcnNlXFx0PSBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MjguMzMwNzI4NDY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTc4MDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBsb29rcyBzb2xpZCBmcm9tIGEgcXVpY2sgZ2xhbmNlLiBJdCdzIGZ1bmN0aW9uYWwsIHRoYXQncyB0aGUga2V5LiBSZW1vdmluZyB0aGF0IGArIDFgIGZyb20gYGttYWxsb2NfZmxleGAgYW5kIHRoZSBudWxsIHRlcm1pbmF0aW9uIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0J3MgZWl0aGVyIGZpeGluZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBpdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEVpdGhlciB3YXksIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGl0IHJlYWNoYWJsZT8gWWVzISBJdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYWRkX2tleWAgc3lzY2FsbCB3aXRoIHRoZSBgZG5zX3Jlc29sdmVyYCB0eXBlLiBCaW5nby4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSB3b3J0aCBwdXR0aW5nIG9uIHRoZSBmdXp6aW5nIGxpc3QuXG5cbkxldCdzIGdldCB0aGUgcmVzdWx0cyByZWFkeS4gSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBvYnZpb3VzbHkuIEZvciBmb2N1cyBzeW1ib2xzLCBJJ2xsIHNwZWNpZnkgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGhhcHBlbmVkLiBXZSBuZWVkIHRvIGVuYWJsZSBzb21lIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZSBgRE5TX1JFU09MVkVSYCBhbmQgYEtFWVNgLlxuXG5NeSByZWFzb25pbmcgaXMgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLiBJdCdzIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiAoc2l6ZSkgYW5kIHJlbW92ZXMgbnVsbCB0ZXJtaW5hdGlvbiwgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMuIENyaXRpY2FsbHksIHRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBhZGRfa2V5YCBzeXNjYWxsLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBhIGNsZWFyIHBhdGggZnJvbSB1c2VyIGlucHV0IHRvIHRoZSBhZmZlY3RlZCBjb2RlLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgaW4gdGhlIGZ1enppbmcgcmVwb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjMsIk91dHB1dFRva2VucyI6OTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MzMuOTQ4NTM4NzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1MzcwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkROU19SRVNPTFZFUlwiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE5TX1JFU09MVkVSXCIsXG4gICAgXCJLRVlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG5zX3Jlc29sdmVyX3ByZXBhcnNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 00:12:46 +0000 UTC FinishedAt: 2026-08-07 01:05:35 +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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DNS_RESOLVER", "KEYS" ], "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": "4fa4977a0d900f936bcae5cd2c510be5554e8dd6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DNS_RESOLVER", "KEYS" ], "series_id": "f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dns_resolver_preparse" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ROU19SRVNPTFZFUiYjMzQ7LAogICAgJiMzNDtLRVlTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG5zX3Jlc29sdmVyX3ByZXBhcnNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhZDVmYjI4ZTE0Y2U2YzQ1Zjg3OTZkZmRmMmExOGM4NjM2YzljNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5pbmRleCBjM2M4YzMyNDBlZjk0Li40NTEyNDc4NjRhNjM4IDEwMDY0NFxuLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXG5AQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbiBcdGtkZWJ1ZyhcJiMzNDtzdG9yZSByZXN1bHRcJiMzNDspO1xuIFx0cHJlcC1cdTAwM2VxdW90YWxlbiA9IHJlc3VsdF9sZW47XG4gXG4tXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiBcdGlmICghdXBheWxvYWQpIHtcbiBcdFx0a2xlYXZlKFwmIzM0OyA9IC1FTk9NRU1cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbkBAIC0yMTEsNyAmIzQzOzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG4tXHR1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbiBcdHByZXAtXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0gPSB1cGF5bG9hZDtcbiBcdGtsZWF2ZShcJiMzNDsgPSAwXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFkNWZiMjhlMTRjZTZjNDVmODc5NmRmZGYyYTE4Yzg2MzZjOWM1YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDAxOjA0OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwppbmRleCBjM2M4YzMyNDBlZjk0Li40NTEyNDc4NjRhNjM4IDEwMDY0NAotLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpAQCAtMjAzLDcgJiM0MzsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkKIAlrZGVidWcoJiMzNDtzdG9yZSByZXN1bHQmIzM0Oyk7CiAJcHJlcC0mZ3Q7cXVvdGFsZW4gPSByZXN1bHRfbGVuOwogCi0JdXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuICYjNDM7IDEpOwomIzQzOwl1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4pOwogCWlmICghdXBheWxvYWQpIHsKIAkJa2xlYXZlKCYjMzQ7ID0gLUVOT01FTSYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTEsNyAmIzQzOzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKQogCiAJdXBheWxvYWQtJmd0O2RhdGFsZW4gPSByZXN1bHRfbGVuOwogCW1lbWNweSh1cGF5bG9hZC0mZ3Q7ZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7Ci0JdXBheWxvYWQtJmd0O2RhdGFbcmVzdWx0X2xlbl0gPSAmIzM5O1wwJiMzOTs7CiAKIAlwcmVwLSZndDtwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSA9IHVwYXlsb2FkOwogCWtsZWF2ZSgmIzM0OyA9IDAmIzM0Oyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRE5TIFJlc29sdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgcmVtb3ZhbCBvZiBhIGAmIzQzOyAxYCBmcm9tIGEgYGttYWxsb2NfZmxleGAgY2FsbCBhbmQgYWxzbyBhIHJlbW92YWwgb2YgYSBudWxsIHRlcm1pbmF0aW9uIGFzc2lnbm1lbnQgKGB1cGF5bG9hZC0mZ3Q7ZGF0YVtyZXN1bHRfbGVuXSA9ICYjMzk7XDAmIzM5OztgKS4gVGhpcyBzZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4KCkZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoYXQgYHVwYXlsb2FkYCBhY3R1YWxseSAqaXMqLiBBaCwgaXQmIzM5O3MgYSBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgLiBHb29kLCB0aGF0IGdpdmVzIG1lIHNvbWV0aGluZyB0byB3b3JrIHdpdGguCgpOb3csIEkmIzM5O2xsIHRyYWNrIGRvd24gd2hlcmUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIHRoaXMgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBvZiB0aGF0IHBheWxvYWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGxlZ2l0aW1hdGUgZml4IG9yLCBwb3RlbnRpYWxseSwgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSXMgdGhlICYjMzQ7JiM0MzsxJiMzNDsgdW5uZWNlc3NhcnksIGxlYWRpbmcgdG8gYW4gb3Zlci1hbGxvY2F0aW9uPyBPciBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBwb3RlbnRpYWxseSBjcmVhdGluZyBhIHZ1bG5lcmFiaWxpdHk/IFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjcKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHVzZXJfa2V5X3BheWxvYWRgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBzdGFydHMgc2Nhbm5pbmcsIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogc2VjdXJpdHkgaW1wbGljYXRpb25zLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBkYXRhIHN0cnVjdHVyZSBlZmZpY2llbmN5LCBhbmQgaG93IGl0IGFsaWducyB3aXRoIHRoZSBicm9hZGVyIGtleSBtYW5hZ2VtZW50IGxhbmRzY2FwZS4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBrZXJuZWwgc3Vic3lzdGVtLiBJcyBpdCBwcmltYXJpbHkgZm9yIHVzZXItc3BhY2Uga2V5IG1hbmFnZW1lbnQ/IElzIHRoZXJlIGFuIGluaGVyZW50IHRydXN0IG1vZGVsIGhlcmU/IFdoYXQga2luZCBvZiBkYXRhIGlzIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBob2xkaW5nPyBBcmUgd2UgdGFsa2luZyBhYm91dCBjcnlwdG9ncmFwaGljIGtleXMsIGFjY2VzcyBjb250cm9sIGxpc3RzLCBjYXBhYmlsaXR5IHRva2Vucywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBuYW1pbmcgY29udmVudGlvbiBpbW1lZGlhdGVseSBzaWduYWxzIGNlcnRhaW4gdGhpbmdzIC0gdXNlciBrZXlzLCBzbyB0aGV5IGFyZSBsaWtlbHkgdGllZCBpbnRvIHNvbWUgc29ydCBvZiBjcmVkZW50aWFsIG9yIGlkZW50aXR5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGUgJiMzNDtwYXlsb2FkJiMzNDsgcGFydCBpcyBpbnRlcmVzdGluZyAtIGl0IHN1Z2dlc3RzIHRoaXMgc3RydWN0IHByb2JhYmx5IGNvbnRhaW5zIHRoZSBhY3R1YWwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB1c2VyJiMzOTtzIGtleS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbnMgd2lsbCBjZW50ZXIgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbjogSG93IGlzIHRoaXMgc3RydWN0dXJlZCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3M/IEhvdyBkb2VzIGl0IGhhbmRsZSBrZXkgcmV2b2NhdGlvbiBhbmQgdXBkYXRlcz8gQXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIG1lbW9yeT8gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3Qgd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgdXNlciBrZXkgc3Vic3lzdGVtLCBhbmQgZnJvbSB0aGVyZSwgaXQmIzM5O3MganVzdCBhIG1hdHRlciBvZiBkaWdnaW5nIGludG8gdGhlIGFzc29jaWF0ZWQgY29kZSB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCBhYnVzZWQuIEkgd29uZGVyIHdoYXQgdGhlIGZpZWxkIG5hbWVzIGFyZSwgYW5kIHRoYXQgd291bGQgZ2l2ZSBtZSBmdXJ0aGVyIGluc2lnaHRzLiBBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIHdvcmtpbmcgd2l0aCBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHVzZXJfa2V5X3BheWxvYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7Y3J5cHRvL2FmX2FsZy5jPTIzMz1zdGF0aWMgY29uc3QgdTggKmtleV9kYXRhX3B0cl91c2VyKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbi0tXG5jcnlwdG8vYWZfYWxnLmMtMjM1LXtcbmNyeXB0by9hZl9hbGcuYzoyMzY6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuY3J5cHRvL2FmX2FsZy5jLTIzNy1cbi0tXG5kcml2ZXJzL21kL2RtLWNyeXB0LmM9MjQzNz1zdGF0aWMgaW50IHNldF9rZXlfdXNlcihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGtleSAqa2V5KVxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0Mzgte1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jOjI0Mzk6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0NDAtXG4tLVxuZHJpdmVycy9tZC9kbS1pbmxpbmVjcnlwdC5jPTg4PXN0YXRpYyBpbnQgc2V0X2tleV91c2VyKHN0cnVjdCBrZXkgKmtleSwgY2hhciAqa2V5X2J5dGVzLFxuLS1cbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYy05MC17XG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmM6OTE6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS1pbmxpbmVjcnlwdC5jLTkyLVxuLS1cbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYz0zOD1zdGF0aWMgaW50IHZlcml0eV92ZXJpZnlfZ2V0X3NpZ19mcm9tX2tleShjb25zdCBjaGFyICprZXlfZGVzYyxcbi0tXG5kcml2ZXJzL21kL2RtLXZlcml0eS12ZXJpZnktc2lnLmMtNDEtXHRzdHJ1Y3Qga2V5ICprZXk7XG5kcml2ZXJzL21kL2RtLXZlcml0eS12ZXJpZnktc2lnLmM6NDI6XHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jLTQzLVx0aW50IHJldCA9IDA7XG4tLVxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM9NDA9ZmluZF9hbmRfbG9ja19wcm9jZXNzX2tleShjb25zdCBjaGFyICpwcmVmaXgsXG4tLVxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmMtNDYtXHRzdHJ1Y3Qga2V5ICprZXk7XG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYzo0NzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00OC1cdGNvbnN0IHN0cnVjdCBmc2NyeXB0X2tleSAqcGF5bG9hZDtcbi0tXG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaD0xMTQ9ZWNyeXB0ZnNfZ2V0X2tleV9wYXlsb2FkX2RhdGEoc3RydWN0IGtleSAqa2V5KVxuLS1cbmZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oLTExNi1cdHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2s7XG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaDoxMTc6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE4LVxuLS1cbmZzL25mcy9uZnM0aWRtYXAuYz0zMDU9c3RhdGljIHNzaXplX3QgbmZzX2lkbWFwX2dldF9rZXkoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sXG4tLVxuZnMvbmZzL25mczRpZG1hcC5jLTMwOS1cdHN0cnVjdCBrZXkgKnJrZXk7XG5mcy9uZnMvbmZzNGlkbWFwLmM6MzEwOlx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XG5mcy9uZnMvbmZzNGlkbWFwLmMtMzExLVx0c3NpemVfdCByZXQ7XG4tLVxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM9MjE4MT1jaWZzX3NldF9jaWZzY3JlZHMoc3RydWN0IHNtYjNfZnNfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY2lmc19zZXMgKnNlcylcbi0tXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYy0yMTkyLVx0c3RydWN0IHNvY2thZGRyX2luNiAqc2E2O1xuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MjE5MzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZDtcbmZzL3NtYi9jbGllbnQvY29ubmVjdC5jLTIxOTQtXG4tLVxuZnMvdWJpZnMvYXV0aC5jPTI1NT1pbnQgdWJpZnNfaW5pdF9hdXRoZW50aWNhdGlvbihzdHJ1Y3QgdWJpZnNfaW5mbyAqYylcbi0tXG5mcy91Ymlmcy9hdXRoLmMtMjU3LVx0c3RydWN0IGtleSAqa2V5cmluZ19rZXk7XG5mcy91Ymlmcy9hdXRoLmM6MjU4Olx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcbmZzL3ViaWZzL2F1dGguYy0yNTktXHRpbnQgZXJyO1xuLS1cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC0yNi0gKi9cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDoyNzpzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjgtXHRzdHJ1Y3QgcmN1X2hlYWRcdHJjdTtcdFx0LyogUkNVIGRlc3RydWN0b3IgKi9cbi0tXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg9NDQ9ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00NS1cbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0NjpzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX3JjdShjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDcte1xuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQ4Olx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9yY3Uoa2V5KTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00OS19XG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNTAtXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6NTE6c3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUyLXtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo1MzpcdHJldHVybiAoc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKilkZXJlZmVyZW5jZV9rZXlfbG9ja2VkKChzdHJ1Y3Qga2V5ICopa2V5KTtcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC01NC19XG4tLVxua2VybmVsL2NyYXNoX2R1bXBfZG1fY3J5cHQuYz0xNDM9c3RhdGljIGludCByZWFkX2tleV9mcm9tX3VzZXJfa2V5cmluZyhzdHJ1Y3QgZG1fY3J5cHRfa2V5ICpkbV9rZXkpXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0NC17XG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jOjE0NTpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0Ni1cdHN0cnVjdCBrZXkgKmtleTtcbi0tXG5saWIvZGlnc2lnLmM9NjM9c3RhdGljIGludCBkaWdzaWdfdmVyaWZ5X3JzYShzdHJ1Y3Qga2V5ICprZXksXG4tLVxubGliL2RpZ3NpZy5jLTc2LVx0Y29uc3QgdWludDhfdCAqZW5kcDtcbmxpYi9kaWdzaWcuYzo3NzpcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XG5saWIvZGlnc2lnLmMtNzgtXHRzdHJ1Y3QgcHVia2V5X2hkciAqcGtoO1xuLS1cbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTgwPWRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODEte1xubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6ODI6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy04My1cdHVuc2lnbmVkIGxvbmcgZGVycm5vO1xuLS1cbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX3F1ZXJ5LmM9NjI9aW50IGRuc19xdWVyeShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02Ni17XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jOjY3Olx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02OC1cdHN0cnVjdCBrZXkgKnJrZXk7XG4tLVxuc2VjdXJpdHkva2V5cy9kaC5jPTE4PXN0YXRpYyBzc2l6ZV90IGRoX2RhdGFfZnJvbV9rZXkoa2V5X3NlcmlhbF90IGtleWlkLCBjb25zdCB2b2lkICoqZGF0YSlcbi0tXG5zZWN1cml0eS9rZXlzL2RoLmMtMzctXHRcdGlmIChzdGF0dXMgPT0gMCkge1xuc2VjdXJpdHkva2V5cy9kaC5jOjM4Olx0XHRcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy9kaC5jLTM5LVx0XHRcdHVpbnQ4X3QgKmR1cGxpY2F0ZTtcbi0tXG5zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jPTMwMz1zdGF0aWMgc3RydWN0IGtleSAqcmVxdWVzdF91c2VyX2tleShjb25zdCBjaGFyICptYXN0ZXJfZGVzYywgY29uc3QgdTggKiptYXN0ZXJfa2V5LFxuLS1cbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMtMzA1LXtcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmM6MzA2Olx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYy0zMDctXHRzdHJ1Y3Qga2V5ICp1a2V5O1xuLS1cbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9NTk9aW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtNjAte1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo2MTpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZDtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtNjItXHRzaXplX3QgZGF0YWxlbiA9IHByZXAtXHUwMDNlZGF0YWxlbjtcbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTg5PXN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTkwLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6OTE6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtOTItXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjkzOlx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtOTQtXHRrZnJlZV9zZW5zaXRpdmUocGF5bG9hZCk7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xMDE9aW50IHVzZXJfdXBkYXRlKHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTAyLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAzOlx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnphcCA9IE5VTEw7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEwNC1cdGludCByZXQ7XG4tLVxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYz0xMjg9dm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOS17XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjEzMDpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IHVzZXJfa2V5X3BheWxvYWRfbG9ja2VkKGtleSk7XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEzMS1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE0Nj12b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0Ny17XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jOjE0ODpcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0OS1cbi0tXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE3MT1sb25nIHVzZXJfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTcyLXtcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTczOlx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNzQtXHRsb25nIHJldDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODE2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIFVzZXIgS2V5IFBheWxvYWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZXNlIGB1c2VyX2tleV9wYXlsb2FkYCBzdHJ1Y3RzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gcmVhY2hpbmcgZm9yIGBpbmNsdWRlL2tleXMvdXNlci10eXBlLmhgLiBJIHJlY2FsbCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBkZWZpbml0aW9uIHNob3VsZCBiZSwgYW5kIHRoZSBkZXRhaWxzIHRoZXJlIGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZXByZXNlbnRhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGF0IGBzdHJ1Y3RgIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgaXRzIGRlc2lnbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSByZWFsbHkgbG9va2luZyB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCB3aGF0JiMzOTtzIGJlaW5nIHN0b3JlZCwgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IGEgbG93IGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4gICAyOlx0LyogdXNlci10eXBlLmg6IFVzZXItZGVmaW5lZCBrZXkgdHlwZVxuICAgMzpcdCAqXG4gICA0Olx0ICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAgIDU6XHQgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pXG4gICA2Olx0ICovXG4gICA3Olx0XG4gICA4Olx0I2lmbmRlZiBfS0VZU19VU0VSX1RZUEVfSFxuICAgOTpcdCNkZWZpbmUgX0tFWVNfVVNFUl9UWVBFX0hcbiAgMTA6XHRcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXkuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbiAgMTM6XHRcbiAgMTQ6XHQjaWZkZWYgQ09ORklHX0tFWVNcbiAgMTU6XHRcbiAgMTY6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gIDE3Olx0LypcbiAgMTg6XHQgKiB0aGUgcGF5bG9hZCBmb3IgYSBrZXkgb2YgdHlwZSBcJiMzNDt1c2VyXCYjMzQ7IG9yIFwmIzM0O2xvZ29uXCYjMzQ7XG4gIDE5Olx0ICogLSBvbmNlIGZpbGxlZCBpbiBhbmQgYXR0YWNoZWQgdG8gYSBrZXk6XG4gIDIwOlx0ICogICAtIHRoZSBwYXlsb2FkIHN0cnVjdCBpcyBpbnZhcmlhbnQgbWF5IG5vdCBiZSBjaGFuZ2VkLCBvbmx5IHJlcGxhY2VkXG4gIDIxOlx0ICogICAtIHRoZSBwYXlsb2FkIG11c3QgYmUgcmVhZCB3aXRoIFJDVSBwcm9jZWR1cmVzIG9yIHdpdGggdGhlIGtleSBzZW1hcGhvcmVcbiAgMjI6XHQgKiAgICAgaGVsZFxuICAyMzpcdCAqICAgLSB0aGUgcGF5bG9hZCBtYXkgb25seSBiZSByZXBsYWNlZCB3aXRoIHRoZSBrZXkgc2VtYXBob3JlIHdyaXRlLWxvY2tlZFxuICAyNDpcdCAqIC0gdGhlIGtleSYjMzk7cyBkYXRhIGxlbmd0aCBpcyB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIGRhdGEsIG5vdCBpbmNsdWRpbmcgdGhlXG4gIDI1Olx0ICogICBwYXlsb2FkIHdyYXBwZXJcbiAgMjY6XHQgKi9cbiAgMjc6XHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCB7XG4gIDI4Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdHJjdTtcdFx0LyogUkNVIGRlc3RydWN0b3IgKi9cbiAgMjk6XHRcdHVuc2lnbmVkIHNob3J0XHRkYXRhbGVuO1x0LyogbGVuZ3RoIG9mIHRoaXMgZGF0YSAqL1xuICAzMDpcdFx0Y2hhclx0XHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xuICAzMTpcdH07XG4gIDMyOlx0XG4gIDMzOlx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyO1xuICAzNDpcdGV4dGVybiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb247XG4gIDM1Olx0XG4gIDM2Olx0c3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcbiAgMzc6XHRcbiAgMzg6XHRleHRlcm4gaW50IHVzZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCk7XG4gIDM5Olx0ZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xuICA0MDpcdGV4dGVybiBpbnQgdXNlcl91cGRhdGUoc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKTtcbiAgNDE6XHRleHRlcm4gdm9pZCB1c2VyX3Jldm9rZShzdHJ1Y3Qga2V5ICprZXkpO1xuICA0MjpcdGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xuICA0MzpcdGV4dGVybiB2b2lkIHVzZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqdXNlciwgc3RydWN0IHNlcV9maWxlICptKTtcbiAgNDQ6XHRleHRlcm4gbG9uZyB1c2VyX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBjaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4pO1xuICA0NTpcdFxuICA0NjpcdHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbnN0IHN0cnVjdCBrZXkgKmtleSlcbiAgNDc6XHR7XG4gIDQ4Olx0XHRyZXR1cm4gKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICopZGVyZWZlcmVuY2Vfa2V5X3JjdShrZXkpO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX2xvY2tlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXG4gIDUyOlx0e1xuICA1MzpcdFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xuICA1NDpcdH1cbiAgNTU6XHRcbiAgNTY6XHQjZW5kaWYgLyogQ09ORklHX0tFWVMgKi9cbiAgNTc6XHRcbiAgNTg6XHQjZW5kaWYgLyogX0tFWVNfVVNFUl9UWVBFX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTI3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEROUyBSZXNvbHZlciBQcmVwYXJzZSBNb2RpZmljYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGEgY2hhbmdlIHRvIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIHdpdGhpbiBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIGV4YWN0IHJvbGUg4oCTIHRoZSBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlLCB0aGUgaW5jb21pbmcgRE5TIHF1ZXJ5IGdldHMgZXhhbWluZWQgZm9yIHRoaXMgc3BlY2lmaWMga2V5IHR5cGUuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsIHZhbGlkYXRpb24sIHNhbml0eSBjaGVja3MsIG9yIHBlcmhhcHMgZXZlbiBlYXJseSBwcmUtcHJvY2Vzc2luZyByZWxhdGVkIHRvIEROU0tFWS9EUyByZWNvcmRzIGJlZm9yZSB0aGUgcmVzb2x2ZXIgZGl2ZXMgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogdGhlIG1vZGlmaWNhdGlvbiBlbnRhaWxzLiBJcyB0aGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciwgbW9yZSBjb25jZXJuaW5nbHksIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIG9yIGEgZml4IHRoYXQgbWlnaHQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBieSBvbWlzc2lvbj8gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGlmZiB0byBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTkwOlx0XHRcdFx0XHRcdCAgICBvcHRfbmxlbiwgb3B0X25sZW4sIG9wdCk7XG4gMTkxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTkyOlx0XHRcdH0gd2hpbGUgKG9wdCA9IG5leHRfb3B0ICYjNDM7IDEsIG9wdCBcdTAwM2MgZW5kKTtcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdC8qIGRvbiYjMzk7dCBjYWNoZSB0aGUgcmVzdWx0IGlmIHdlJiMzOTtyZSBjYWNoaW5nIGFuIGVycm9yIHNheWluZyB0aGVyZSYjMzk7cyBub1xuIDE5NjpcdFx0ICogcmVzdWx0ICovXG4gMTk3Olx0XHRpZiAocHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pIHtcbiAxOTg6XHRcdFx0a2xlYXZlKFwmIzM0OyA9IDAgW2hfZXJyb3IgJWxkXVwmIzM0OywgUFRSX0VSUihwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2Vycm9yXSkpO1xuIDE5OTpcdFx0XHRyZXR1cm4gMDtcbiAyMDA6XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRzdG9yZV9yZXN1bHQ6XG4gMjAzOlx0XHRrZGVidWcoXCYjMzQ7c3RvcmUgcmVzdWx0XCYjMzQ7KTtcbiAyMDQ6XHRcdHByZXAtXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xuIDIwNTpcdFxuIDIwNjpcdFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiAyMDc6XHRcdGlmICghdXBheWxvYWQpIHtcbiAyMDg6XHRcdFx0a2xlYXZlKFwmIzM0OyA9IC1FTk9NRU1cJiMzNDspO1xuIDIwOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMTA6XHRcdH1cbiAyMTE6XHRcbiAyMTI6XHRcdHVwYXlsb2FkLVx1MDAzZWRhdGFsZW4gPSByZXN1bHRfbGVuO1xuIDIxMzpcdFx0bWVtY3B5KHVwYXlsb2FkLVx1MDAzZWRhdGEsIGRhdGEsIHJlc3VsdF9sZW4pO1xuIDIxNDpcdFxuIDIxNTpcdFx0cHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSA9IHVwYXlsb2FkO1xuIDIxNjpcdFx0a2xlYXZlKFwmIzM0OyA9IDBcJiMzNDspO1xuIDIxNzpcdFx0cmV0dXJuIDA7XG4gMjE4Olx0fVxuIDIxOTpcdFxuIDIyMDpcdC8qXG4gMjIxOlx0ICogQ2xlYW4gdXAgdGhlIHByZXBhcnNlIGRhdGFcbiAyMjI6XHQgKi9cbiAyMjM6XHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIDIyNDpcdHtcbiAyMjU6XHRcdHByX2RldmVsKFwmIzM0Oz09XHUwMDNlJXMoKVxcblwmIzM0OywgX19mdW5jX18pO1xuIDIyNjpcdFxuIDIyNzpcdFx0a2ZyZWUocHJlcC1cdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9kYXRhXSk7XG4gMjI4Olx0fVxuIDIyOTpcdFxuIDIzMDpcdC8qXG4gMjMxOlx0ICogVGhlIGRlc2NyaXB0aW9uIGlzIG9mIHRoZSBmb3JtIFwmIzM0O1tcdTAwM2N0eXBlXHUwMDNlOl1cdTAwM2Nkb21haW5fbmFtZVx1MDAzZVwmIzM0O1xuIDIzMjpcdCAqXG4gMjMzOlx0ICogVGhlIGRvbWFpbiBuYW1lIG1heSBiZSBhIHNpbXBsZSBuYW1lIG9yIGFuIGFic29sdXRlIGRvbWFpbiBuYW1lICh3aGljaFxuIDIzNDpcdCAqIHNob3VsZCBlbmQgd2l0aCBhIHBlcmlvZCkuICBUaGUgZG9tYWluIG5hbWUgaXMgY2FzZS1pbmRlcGVuZGVudC5cbiAyMzU6XHQgKi9cbiAyMzY6XHRzdGF0aWMgYm9vbCBkbnNfcmVzb2x2ZXJfY21wKGNvbnN0IHN0cnVjdCBrZXkgKmtleSxcbiAyMzc6XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcbiAyMzg6XHR7XG4gMjM5Olx0XHRpbnQgc2xlbiwgZGxlbiwgcmV0ID0gMDtcbiAyNDA6XHRcdGNvbnN0IGNoYXIgKnNyYyA9IGtleS1cdTAwM2VkZXNjcmlwdGlvbiwgKmRzcCA9IG1hdGNoX2RhdGEtXHUwMDNlcmF3X2RhdGE7XG4gMjQxOlx0XG4gMjQyOlx0XHRrZW50ZXIoXCYjMzQ7JXMsJXNcJiMzNDssIHNyYywgZHNwKTtcbiAyNDM6XHRcbiAyNDQ6XHRcdGlmICghc3JjIHx8ICFkc3ApXG4gMjQ1Olx0XHRcdGdvdG8gbm9fbWF0Y2g7XG4gMjQ2Olx0XG4gMjQ3Olx0XHRpZiAoc3RyY2FzZWNtcChzcmMsIGRzcCkgPT0gMClcbiAyNDg6XHRcdFx0Z290byBtYXRjaGVkO1xuIDI0OTpcdFxuIDI1MDpcdFx0c2xlbiA9IHN0cmxlbihzcmMpO1xuIDI1MTpcdFx0ZGxlbiA9IHN0cmxlbihkc3ApO1xuIDI1MjpcdFx0aWYgKHNsZW4gXHUwMDNjPSAwIHx8IGRsZW4gXHUwMDNjPSAwKVxuIDI1MzpcdFx0XHRnb3RvIG5vX21hdGNoO1xuIDI1NDpcdFx0aWYgKHNyY1tzbGVuIC0gMV0gPT0gJiMzOTsuJiMzOTspXG4gMjU1Olx0XHRcdHNsZW4tLTtcbiAyNTY6XHRcdGlmIChkc3BbZGxlbiAtIDFdID09ICYjMzk7LiYjMzk7KVxuIDI1NzpcdFx0XHRkbGVuLS07XG4gMjU4Olx0XHRpZiAoc2xlbiAhPSBkbGVuIHx8IHN0cm5jYXNlY21wKHNyYywgZHNwLCBzbGVuKSAhPSAwKVxuIDI1OTpcdFx0XHRnb3RvIG5vX21hdGNoO1xuIDI2MDpcdFxuIDI2MTpcdG1hdGNoZWQ6XG4gMjYyOlx0XHRyZXQgPSAxO1xuIDI2MzpcdG5vX21hdGNoOlxuIDI2NDpcdFx0a2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuIDI2NTpcdFx0cmV0dXJuIHJldDtcbiAyNjY6XHR9XG4gMjY3Olx0XG4gMjY4Olx0LypcbiAyNjk6XHQgKiBQcmVwYXJzZSB0aGUgbWF0Y2ggY3JpdGVyaW9uLlxuIDI3MDpcdCAqL1xuIDI3MTpcdHN0YXRpYyBpbnQgZG5zX3Jlc29sdmVyX21hdGNoX3ByZXBhcnNlKHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcbiAyNzI6XHR7XG4gMjczOlx0XHRtYXRjaF9kYXRhLVx1MDAzZWxvb2t1cF90eXBlID0gS0VZUklOR19TRUFSQ0hfTE9PS1VQX0lURVJBVEU7XG4gMjc0Olx0XHRtYXRjaF9kYXRhLVx1MDAzZWNtcCA9IGRuc19yZXNvbHZlcl9jbXA7XG4gMjc1Olx0XHRyZXR1cm4gMDtcbiAyNzY6XHR9XG4gMjc3Olx0XG4gMjc4Olx0LypcbiAyNzk6XHQgKiBEZXNjcmliZSBhIEROUyBrZXlcbiAyODA6XHQgKi9cbiAyODE6XHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4gMjgyOlx0e1xuIDI4MzpcdFx0c2VxX3B1dHMobSwga2V5LVx1MDAzZWRlc2NyaXB0aW9uKTtcbiAyODQ6XHRcdGlmIChrZXlfaXNfcG9zaXRpdmUoa2V5KSkge1xuIDI4NTpcdFx0XHRpbnQgZXJyID0gUFRSX0VSUihrZXktXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZXJyb3JdKTtcbiAyODY6XHRcbiAyODc6XHRcdFx0aWYgKGVycilcbiAyODg6XHRcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzogJWRcJiMzNDssIGVycik7XG4gMjg5Olx0XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY0MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBETlMgUmVzb2x2ZXIgS2V5IFR5cGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBgJiM0MzsgMWAgZnJvbSB0aGUgYGttYWxsb2NfZmxleGAgY2FsbCwgbWFraW5nIGl0IGBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtgIGFuZCBhbHNvIGdvdCByaWQgb2YgdGhlIG51bGwgdGVybWluYXRpb24gYHVwYXlsb2FkLSZndDtkYXRhW3Jlc3VsdF9sZW5dID0gJiMzOTtcMCYjMzk7O2AuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgaW50ZW5kZWQgdG8gcHJldmVudCBhbiBvZmYtYnktb25lIHdyaXRlIG9yLCBtb3JlIGVmZmljaWVudGx5LCB0byBhdm9pZCBhbGxvY2F0aW5nIGFuZCBzZXR0aW5nIGFuIHVubmVjZXNzYXJ5IGJ5dGUgdG8gemVyby4KCldhaXQgYSBtaW51dGUsIHRoaXMgaXMgZm9yIGEgYHVzZXJfa2V5X3BheWxvYWRgIHN0cnVjdCwgd2hpY2ggaGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyIGBjaGFyIGRhdGFbXSBfX2FsaWduZWQoX19hbGlnbm9mX18odTY0KSlgLiBUaGF0IHN0cnVjdHVyZSYjMzk7cyBzZXR1cCBpcyBjcml0aWNhbC4gSWYgd2UmIzM5O3JlIGNvcHlpbmcgYHJlc3VsdF9sZW5gIGJ5dGVzICphbmQqIHdlIGRvbiYjMzk7dCBhY3R1YWxseSAqbmVlZCogbnVsbCB0ZXJtaW5hdGlvbiwgdGhlbiByZW1vdmluZyB0aGUgZXh0cmEgYnl0ZSBhbmQgdGhlIG51bGwgYXNzaWdubWVudCBpcyBhYnNvbHV0ZWx5IGNvcnJlY3QuIEl0JiMzOTtzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB0aGUgY29kZSBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdGhlIG51bGwgdGVybWluYXRpb24uIE1ha2VzIHNlbnNlLgoKTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlIGNvZGU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYHVwYXlsb2FkYCBpcyBiZWluZyB1c2VkLiBBaCwgeWVzLCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcHJlcGFyc2UgZnVuY3Rpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgdXNlZCBmb3IgdGhlIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBiZWluZyB1c2VkLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gdGhhdCB0aGUgYGRuc19yZXNvbHZlcmAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZSBiZWZvcmUgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlIGNoYW5nZSBpcyBjb3JyZWN0IGZvciBvdXIgY3VycmVudCBidWlsZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEROU19SRVNPTFZFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNC0jXG5uZXQvZG5zX3Jlc29sdmVyL0tjb25maWc6NTpjb25maWcgRE5TX1JFU09MVkVSXG5uZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O0ROUyBSZXNvbHZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSByZXF1aXJlbWVudCBzcGVjaWZpZXMgYENPTkZJR19ETlNfUkVTT0xWRVJgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGxpbmtlZCB0byB0aGF0PyYjMzQ7IFdlIGtub3cgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGNhc2NhZGUuIFRoZSBETlMgcmVzb2x2ZXIgYWxtb3N0IGNlcnRhaW5seSBoYXMgZGVwZW5kZW5jaWVzLCBhbmQgb2Z0ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHRyaWdnZXIgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBpbnRlcnR3aW5lZCB3aXRoIGBDT05GSUdfRE5TX1JFU09MVkVSYCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIHJlbGF0ZWQgbmV0d29yayBzZXR0aW5ncz8gU2VjdXJpdHkgcG9saWNpZXM/IExvZ2dpbmcgb3B0aW9ucz8gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSByZWxhdGVkIGNvbmZpZ3MgYW5kIHVuZGVyc3RhbmQgdGhlaXIgaW1wbGljYXRpb25zIGJlZm9yZSBJIGdvIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Ruc19yZXNvbHZlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIENvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlclxuICAgNDpcdCNcbiAgIDU6XHRjb25maWcgRE5TX1JFU09MVkVSXG4gICA2Olx0XHR0cmlzdGF0ZSBcJiMzNDtETlMgUmVzb2x2ZXIgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBLRVlTXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFNheWluZyBZIGhlcmUgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBETlMgUmVzb2x2ZXIga2V5IHR5cGVcbiAgMTA6XHRcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB1cGNhbGxzIHRvIHBlcmZvcm0gRE5TIGxvb2t1cHMgaW5cbiAgMTE6XHRcdCAgdXNlcnNwYWNlLlxuICAxMjpcdFxuICAxMzpcdFx0ICBETlMgUmVzb2x2ZXIgaXMgdXNlZCB0byBxdWVyeSBETlMgc2VydmVyIGZvciBpbmZvcm1hdGlvbi4gIEV4YW1wbGVzXG4gIDE0Olx0XHQgIGJlaW5nIHJlc29sdmluZyBhIFVOQyBob3N0bmFtZSBlbGVtZW50IHRvIGFuIElQIGFkZHJlc3MgZm9yIENJRlMgb3JcbiAgMTU6XHRcdCAgcGVyZm9ybWluZyBhIEROUyBxdWVyeSBmb3IgQUZTREIgcmVjb3JkcyBzbyB0aGF0IEFGUyBjYW4gbG9jYXRlIGFcbiAgMTY6XHRcdCAgY2VsbCYjMzk7cyB2b2x1bWUgbG9jYXRpb24gZGF0YWJhc2Ugc2VydmVycy5cbiAgMTc6XHRcbiAgMTg6XHRcdCAgRE5TIFJlc29sdmVyIGlzIHVzZWQgYnkgdGhlIENJRlMgYW5kIEFGUyBtb2R1bGVzLCBhbmQgd291bGQgc3VwcG9ydFxuICAxOTpcdFx0ICBTTUIyIGxhdGVyLiAgRE5TIFJlc29sdmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlcnNwYWNlIHVwY2FsbFxuICAyMDpcdFx0ICBoZWxwZXIgXCYjMzQ7L3NiaW4vZG5zLnJlc29sdmVyXCYjMzQ7IHZpYSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIucnN0XHUwMDNlIGZvciBmdXJ0aGVyXG4gIDIzOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyNDpcdFxuICAyNTpcdFx0ICBUbyBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMjY6XHRcdCAgZG5zX3Jlc29sdmVyLlxuICAyNzpcdFxuICAyODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRE5TIFJlc29sdmVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGggYSBETlMgcmVzb2x2ZXIgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ETlNfUkVTT0xWRVJgIGFuZCBgQ09ORklHX0tFWVNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiB0aGF0IG9uZS4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsYXRlZC4gU2Nhbm5pbmcuLi4gUmlnaHQsIGxvb2tzIGxpa2UgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gaG9uZSBpbiBvbi4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gQWgsIGhlcmUmIzM5O3Mgb25lIC0gYGtleV90eXBlX2Ruc19yZXNvbHZlcmAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGluaXRfZG5zX3Jlc29sdmVyYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy4KClRvIGRpdmUgZGVlcGVyIGludG8gdGhpcywgdGhlIHNvdXJjZSBjb2RlIGxvY2F0aW9uIGlzIG5vdGVkIC0gaXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gY2hlY2sgYG5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGtleSBtYW5hZ2VtZW50LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXAsIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIEZ1bmN0aW9uKioKCk9rYXksIHNvIHRoZSBgcHJlcGFyc2VgIGZ1bmN0aW9uIGZvciB0aGUgYGRuc19yZXNvbHZlcmAga2V5IHR5cGUgZ2V0cyBpbnZva2VkIHdoZW5ldmVyIGEga2V5IG9mIHRoYXQgdHlwZSBpcyBjcmVhdGVkIG9yIG1vZGlmaWVkLiBUaGF0JiMzOTtzIHRocm91Z2ggYGFkZF9rZXlgIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIHRoaXMgY29udHJhZGljdHMgdGhlIGNvZGluZyBndWlkZWxpbmVzIGEgYml0LiBJIHJlY2FsbCBpdCBzdGF0aW5nIHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaG9zZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24mIzM5O3QgaGF2ZSBkaXN0aW5jdCBhZGRyZXNzZXMsIGJ1dCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBCZWNhdXNlIHRoZSBhZGRyZXNzIGlzIHRha2VuLCB0aGUgY29tcGlsZXIgY2FuJiMzOTt0IGNvbXBsZXRlbHkgaW5saW5lIGl0LiBUaGF0IGdpdmVzIGl0IGEgdW5pcXVlIHN5bWJvbC4gU28sIHRoYXQgcmVxdWlyZW1lbnQgaXMgZnVsZmlsbGVkLiBUbyBiZSB0aG9yb3VnaCwgdGhvdWdoLCBJIHNob3VsZCBhbHNvIG1ha2UgYSBub3RlIG9mIHRoZSBzeXNjYWxsIGVudHJ5IHBvaW50cyBhbmQgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgKmNhbGxzKiBgLSZndDtwcmVwYXJzZWAuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGAtJmd0O3ByZXBhcnNlYCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSwgc28gSSYjMzk7bGwgZ28gY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7LVx1MDAzZXByZXBhcnNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7c2VjdXJpdHkva2V5cy9rZXkuYz00OTk9aW50IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhzdHJ1Y3Qga2V5ICprZXksXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTQtXHRwcmVwLmV4cGlyeSA9IFRJTUU2NF9NQVg7XG5zZWN1cml0eS9rZXlzL2tleS5jOjUxNTpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSkge1xuc2VjdXJpdHkva2V5cy9rZXkuYzo1MTY6XHRcdHJldCA9IGtleS1cdTAwM2V0eXBlLVx1MDAzZXByZXBhcnNlKFx1MDAyNnByZXApO1xuc2VjdXJpdHkva2V5cy9rZXkuYy01MTctXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy01NDYtZXJyb3I6XG5zZWN1cml0eS9rZXlzL2tleS5jOjU0NzpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSlcbnNlY3VyaXR5L2tleXMva2V5LmMtNTQ4LVx0XHRrZXktXHUwMDNldHlwZS1cdTAwM2VmcmVlX3ByZXBhcnNlKFx1MDAyNnByZXApO1xuLS1cbnNlY3VyaXR5L2tleXMva2V5LmM9ODA2PXN0YXRpYyBrZXlfcmVmX3QgX19rZXlfY3JlYXRlX29yX3VwZGF0ZShrZXlfcmVmX3Qga2V5cmluZ19yZWYsXG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy04MzUtXHRpZiAoIWluZGV4X2tleS50eXBlLVx1MDAzZWluc3RhbnRpYXRlIHx8XG5zZWN1cml0eS9rZXlzL2tleS5jOjgzNjpcdCAgICAoIWluZGV4X2tleS5kZXNjcmlwdGlvbiBcdTAwMjZcdTAwMjYgIWluZGV4X2tleS50eXBlLVx1MDAzZXByZXBhcnNlKSlcbnNlY3VyaXR5L2tleXMva2V5LmMtODM3LVx0XHRnb3RvIGVycm9yX3B1dF90eXBlO1xuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtODU1LVx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xuc2VjdXJpdHkva2V5cy9rZXkuYzo4NTY6XHRpZiAoaW5kZXhfa2V5LnR5cGUtXHUwMDNlcHJlcGFyc2UpIHtcbnNlY3VyaXR5L2tleXMva2V5LmM6ODU3Olx0XHRyZXQgPSBpbmRleF9rZXkudHlwZS1cdTAwM2VwcmVwYXJzZShcdTAwMjZwcmVwKTtcbnNlY3VyaXR5L2tleXMva2V5LmMtODU4LVx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuc2VjdXJpdHkva2V5cy9rZXkuYy05NTUtZXJyb3JfZnJlZV9wcmVwOlxuc2VjdXJpdHkva2V5cy9rZXkuYzo5NTY6XHRpZiAoaW5kZXhfa2V5LnR5cGUtXHUwMDNlcHJlcGFyc2UpXG5zZWN1cml0eS9rZXlzL2tleS5jLTk1Ny1cdFx0aW5kZXhfa2V5LnR5cGUtXHUwMDNlZnJlZV9wcmVwYXJzZShcdTAwMjZwcmVwKTtcbi0tXG5zZWN1cml0eS9rZXlzL2tleS5jPTEwNzY9aW50IGtleV91cGRhdGUoa2V5X3JlZl90IGtleV9yZWYsIGNvbnN0IHZvaWQgKnBheWxvYWQsIHNpemVfdCBwbGVuKVxuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtMTA5Ny1cdHByZXAuZXhwaXJ5ID0gVElNRTY0X01BWDtcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5ODpcdGlmIChrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZSkge1xuc2VjdXJpdHkva2V5cy9rZXkuYzoxMDk5Olx0XHRyZXQgPSBrZXktXHUwMDNldHlwZS1cdTAwM2VwcmVwYXJzZShcdTAwMjZwcmVwKTtcbnNlY3VyaXR5L2tleXMva2V5LmMtMTEwMC1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTUtZXJyb3I6XG5zZWN1cml0eS9rZXlzL2tleS5jOjExMTY6XHRpZiAoa2V5LVx1MDAzZXR5cGUtXHUwMDNlcHJlcGFyc2UpXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTctXHRcdGtleS1cdTAwM2V0eXBlLVx1MDAzZWZyZWVfcHJlcGFyc2UoXHUwMDI2cHJlcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDAxOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLZXkgVXBkYXRlIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IHBvaW50cyB0byBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IGNlbnRlcmVkIGFyb3VuZCBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYGtleV9pbnN0YW50aWF0ZV9hbmRfbGlua2AsIGBfX2tleV9jcmVhdGVfb3JfdXBkYXRlYCwgYW5kIGBrZXlfdXBkYXRlYCBhbGwgY2FsbCBgLSZndDtwcmVwYXJzZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUsIGluIHR1cm4sIGNhbGxlZCBieSBgc3lzX2FkZF9rZXlgIGFuZCBgc3lzX2tleWN0bGAuIFRoZSBjcml0aWNhbCBwb2ludCBoZXJlIGlzIHRoYXQgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgYSBjYWxsYmFjayBmdW5jdGlvbi4gU2luY2UgaXQmIzM5O3MgYSBjYWxsYmFjaywgaXQmIzM5O3Mgbm90IGlubGluZWQsIHdoaWNoIG1ha2VzIGl0IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgbW9kaWZpY2F0aW9uLgoKQnV0LCBoYW5nIG9uLCBpdCBzZWVtcyBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyAqdGhlKiBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQuIEFuZCBldmVuIGJldHRlciwgaXQmIzM5O3Mgc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgc3RpbGwgdGFrZW4gd2hpY2ggbWFrZXMgaXQgcGVyZmVjdGx5IG9rYXkgdG8gaW5jbHVkZSwgZXhhY3RseSBhcyBleHBlY3RlZC4gSSBicmllZmx5IGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmtgLCBgX19rZXlfY3JlYXRlX29yX3VwZGF0ZWAsIGFuZCBga2V5X3VwZGF0ZWAsIGJ1dCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcmlnaHQgZnVuY3Rpb24gdG8gZm9jdXMgb24uCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJiMzOTt2ZSBjaGVja2VkIGFuZCBjb25maXJtZWQ6IG5vIG90aGVyIGZ1bmN0aW9ucyBzZWVtIHRvIGJlIGFmZmVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBBaCwgeWVzLCBgQ09ORklHX0ROU19SRVNPTFZFUmAgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZy4gU28sIHdlJiMzOTtsbCBuZWVkIHRvIGFkZCBgRE5TX1JFU09MVkVSYCB0byBgRW5hYmxlQ29uZmlnc2AuIEl0IGxvb2tzIGxpa2UgYEtFWVNgIGlzIGFsc28gcmVxdWlyZWQsIGJ1dCB0aGF0JiMzOTtzIGEgbW9yZSBnZW5lcmljIGNvbmZpZy4gSSYjMzk7bGwgYWRkIHRoYXQgYXMgd2VsbCwganVzdCB0byBiZSBzYWZlLgoKRmluYWxseSwgSSYjMzk7bGwgcmV2aXNpdCBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIGZvciBhbnkgcmVtYWluaW5nIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcbi0tXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXHQuZmxhZ3NcdFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlx0LnByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cdC5mcmVlX3ByZXBhcnNlXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjYyMwoJCQkJCQkJb3V0cHV0OiA5MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggbG9va3Mgc29saWQgZnJvbSBhIHF1aWNrIGdsYW5jZS4gSXQmIzM5O3MgZnVuY3Rpb25hbCwgdGhhdCYjMzk7cyB0aGUga2V5LiBSZW1vdmluZyB0aGF0IGAmIzQzOyAxYCBmcm9tIGBrbWFsbG9jX2ZsZXhgIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBpcyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCYjMzk7cyBlaXRoZXIgZml4aW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIG9yIGF0IGxlYXN0IGl0IGNsZWFucyB1cCB0aGUgY29kZSBhIGJpdC4gRWl0aGVyIHdheSwgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBpcyBpdCByZWFjaGFibGU/IFllcyEgSXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGBhZGRfa2V5YCBzeXNjYWxsIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIHR5cGUuIEJpbmdvLiBUaGF0IG1ha2VzIGl0IGltbWVkaWF0ZWx5IHdvcnRoIHB1dHRpbmcgb24gdGhlIGZ1enppbmcgbGlzdC4KCkxldCYjMzk7cyBnZXQgdGhlIHJlc3VsdHMgcmVhZHkuIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9idmlvdXNseS4gRm9yIGZvY3VzIHN5bWJvbHMsIEkmIzM5O2xsIHNwZWNpZnkgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNoYW5nZSBoYXBwZW5lZC4gV2UgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucywgc28gSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBETlNfUkVTT0xWRVJgIGFuZCBgS0VZU2AuCgpNeSByZWFzb25pbmcgaXMgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLiBJdCYjMzk7cyBtb2RpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gKHNpemUpIGFuZCByZW1vdmVzIG51bGwgdGVybWluYXRpb24sIHdoaWNoIGFyZSBmdW5kYW1lbnRhbCBjaGFuZ2VzLiBDcml0aWNhbGx5LCB0aGlzIGNoYW5nZSBpcyB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYWRkX2tleWAgc3lzY2FsbCwgbWFraW5nIGl0IGFuIGV4Y2VsbGVudCB0YXJnZXQgZm9yIGZ1enppbmcuIFdlIGhhdmUgYSBjbGVhciBwYXRoIGZyb20gdXNlciBpbnB1dCB0byB0aGUgYWZmZWN0ZWQgY29kZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhpcyBpbiB0aGUgZnV6emluZyByZXBvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RE5TX1JFU09MVkVSJiMzNDssCiAgICAmIzM0O0tFWVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbnNfcmVzb2x2ZXJfcHJlcGFyc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjQ3LjQ5NzY0NTU4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTMxNDQ2MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkROU19SRVNPTFZFUlwiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjQ3LjQ5NzY1MTMyN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MDQ3NjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFkNWZiMjhlMTRjZTZjNDVmODc5NmRmZGYyYTE4Yzg2MzZjOWM1YTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuaW5kZXggYzNjOGMzMjQwZWY5NC4uNDUxMjQ3ODY0YTYzOCAxMDA2NDRcXG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xcbisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXFxuQEAgLTIwMyw3ICsyMDMsNyBAQCBkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG4gXFx0a2RlYnVnKFxcXCJzdG9yZSByZXN1bHRcXFwiKTtcXG4gXFx0cHJlcC1cXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xcbiBcXG4tXFx0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuICsgMSk7XFxuK1xcdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbik7XFxuIFxcdGlmICghdXBheWxvYWQpIHtcXG4gXFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbkBAIC0yMTEsNyArMjExLDYgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuIFxcbiBcXHR1cGF5bG9hZC1cXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XFxuIFxcdG1lbWNweSh1cGF5bG9hZC1cXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XFxuLVxcdHVwYXlsb2FkLVxcdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcXFwwJztcXG4gXFxuIFxcdHByZXAtXFx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2RhdGFdID0gdXBheWxvYWQ7XFxuIFxcdGtsZWF2ZShcXFwiID0gMFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo0OC43ODkwMDU3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTI0MDA3MzE1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJETlNfUkVTT0xWRVJcIixcbiAgICBcIktFWVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbnNfcmVzb2x2ZXJfcHJlcGFyc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcHJlcGFyc2UgZnVuY3Rpb24gZm9yIHRoZSBkbnNfcmVzb2x2ZXIga2V5IHR5cGUsIGNoYW5naW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzaXplIGFuZCByZW1vdmluZyBudWxsIHRlcm1pbmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYWRkX2tleSBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZDVmYjI4ZTE0Y2U2YzQ1Zjg3OTZkZmRmMmExOGM4NjM2YzljNWExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwMTowNDo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbmluZGV4IGMzYzhjMzI0MGVmOTQuLjQ1MTI0Nzg2NGE2MzggMTAwNjQ0XG4tLS0gYS9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1xuKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcbkBAIC0yMDMsNyArMjAzLDcgQEAgZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXG4gXHRrZGVidWcoXCJzdG9yZSByZXN1bHRcIik7XG4gXHRwcmVwLVx1MDAzZXF1b3RhbGVuID0gcmVzdWx0X2xlbjtcbiBcbi1cdHVwYXlsb2FkID0ga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbiArIDEpO1xuK1x0dXBheWxvYWQgPSBrbWFsbG9jX2ZsZXgoKnVwYXlsb2FkLCBkYXRhLCByZXN1bHRfbGVuKTtcbiBcdGlmICghdXBheWxvYWQpIHtcbiBcdFx0a2xlYXZlKFwiID0gLUVOT01FTVwiKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjExLDcgKzIxMSw2IEBAIGRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxuIFxuIFx0dXBheWxvYWQtXHUwMDNlZGF0YWxlbiA9IHJlc3VsdF9sZW47XG4gXHRtZW1jcHkodXBheWxvYWQtXHUwMDNlZGF0YSwgZGF0YSwgcmVzdWx0X2xlbik7XG4tXHR1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcMCc7XG4gXG4gXHRwcmVwLVx1MDAzZXBheWxvYWQuZGF0YVtkbnNfa2V5X2RhdGFdID0gdXBheWxvYWQ7XG4gXHRrbGVhdmUoXCIgPSAwXCIpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDQ6NDguNzg5MDA3MjE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4ODc0NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBETlMgUmVzb2x2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSByZW1vdmFsIG9mIGEgYCsgMWAgZnJvbSBhIGBrbWFsbG9jX2ZsZXhgIGNhbGwgYW5kIGFsc28gYSByZW1vdmFsIG9mIGEgbnVsbCB0ZXJtaW5hdGlvbiBhc3NpZ25tZW50IChgdXBheWxvYWQtXHUwMDNlZGF0YVtyZXN1bHRfbGVuXSA9ICdcXDAnO2ApLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLlxuXG5GaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byBrbm93IHdoYXQgYHVwYXlsb2FkYCBhY3R1YWxseSAqaXMqLiBBaCwgaXQncyBhIGBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZGAuIEdvb2QsIHRoYXQgZ2l2ZXMgbWUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aC5cblxuTm93LCBJJ2xsIHRyYWNrIGRvd24gd2hlcmUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIHRoaXMgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCBhcmUgZGVmaW5lZCBhbmQgdXNlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBvZiB0aGF0IHBheWxvYWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhIGxlZ2l0aW1hdGUgZml4IG9yLCBwb3RlbnRpYWxseSwgYSBuZXcgdnVsbmVyYWJpbGl0eS4gSXMgdGhlIFwiKzFcIiB1bm5lY2Vzc2FyeSwgbGVhZGluZyB0byBhbiBvdmVyLWFsbG9jYXRpb24/IE9yIGlzIHRoZSByZW1vdmFsIG9mIHRoZSBudWxsIHRlcm1pbmF0aW9uIHBvdGVudGlhbGx5IGNyZWF0aW5nIGEgdnVsbmVyYWJpbGl0eT8gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDQ6NTIuNzc3NzU3NTY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTM2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz03OT1zdGF0aWMgaW50XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6ODA6ZG5zX3Jlc29sdmVyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODEte1xcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM9MzA5PXN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIgPSB7XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTEtXFx0LmZsYWdzXFx0XFx0PSBLRVlfVFlQRV9ORVRfRE9NQUlOIHwgS0VZX1RZUEVfSU5TVEFOVF9SRUFQLFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jOjMxMjpcXHQucHJlcGFyc2VcXHQ9IGRuc19yZXNvbHZlcl9wcmVwYXJzZSxcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy0zMTMtXFx0LmZyZWVfcHJlcGFyc2VcXHQ9IGRuc19yZXNvbHZlcl9mcmVlX3ByZXBhcnNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo1Mi44MjQ3MDI3MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgzODYzNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkYCoqXG5cblJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZGAuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgZXllIHN0YXJ0cyBzY2FubmluZywgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGRhdGEgc3RydWN0dXJlIGVmZmljaWVuY3ksIGFuZCBob3cgaXQgYWxpZ25zIHdpdGggdGhlIGJyb2FkZXIga2V5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIga2VybmVsIHN1YnN5c3RlbS4gSXMgaXQgcHJpbWFyaWx5IGZvciB1c2VyLXNwYWNlIGtleSBtYW5hZ2VtZW50PyBJcyB0aGVyZSBhbiBpbmhlcmVudCB0cnVzdCBtb2RlbCBoZXJlPyBXaGF0IGtpbmQgb2YgZGF0YSBpcyB0aGlzIHRoaW5nICphY3R1YWxseSogaG9sZGluZz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY3J5cHRvZ3JhcGhpYyBrZXlzLCBhY2Nlc3MgY29udHJvbCBsaXN0cywgY2FwYWJpbGl0eSB0b2tlbnMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgc2lnbmFscyBjZXJ0YWluIHRoaW5ncyAtIHVzZXIga2V5cywgc28gdGhleSBhcmUgbGlrZWx5IHRpZWQgaW50byBzb21lIHNvcnQgb2YgY3JlZGVudGlhbCBvciBpZGVudGl0eSBtYW5hZ2VtZW50IHN5c3RlbS4gVGhlIFwicGF5bG9hZFwiIHBhcnQgaXMgaW50ZXJlc3RpbmcgLSBpdCBzdWdnZXN0cyB0aGlzIHN0cnVjdCBwcm9iYWJseSBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgdXNlcidzIGtleS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbnMgd2lsbCBjZW50ZXIgYXJvdW5kIGl0cyBpbXBsZW1lbnRhdGlvbjogSG93IGlzIHRoaXMgc3RydWN0dXJlZCB0byBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3M/IEhvdyBkb2VzIGl0IGhhbmRsZSBrZXkgcmV2b2NhdGlvbiBhbmQgdXBkYXRlcz8gQXJlIHRoZXJlIGNoZWNrcyBpbiBwbGFjZSB0byBwcmV2ZW50IGxlYWtpbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIG1lbW9yeT8gVGhlIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3Qgd2lsbCByZXZlYWwgbXVjaCBhYm91dCB0aGUgc2VjdXJpdHkgcG9zdHVyZSBvZiB0aGUgdXNlciBrZXkgc3Vic3lzdGVtLCBhbmQgZnJvbSB0aGVyZSwgaXQncyBqdXN0IGEgbWF0dGVyIG9mIGRpZ2dpbmcgaW50byB0aGUgYXNzb2NpYXRlZCBjb2RlIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgdXNlZCBhbmQgYWJ1c2VkLiBJIHdvbmRlciB3aGF0IHRoZSBmaWVsZCBuYW1lcyBhcmUsIGFuZCB0aGF0IHdvdWxkIGdpdmUgbWUgZnVydGhlciBpbnNpZ2h0cy4gQWxyaWdodCwgbGV0J3Mgc2VlIHdoYXQgd2UncmUgd29ya2luZyB3aXRoIGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA0OjU2LjIwODU2ODE0NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU0OTgyNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1c2VyX2tleV9wYXlsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImNyeXB0by9hZl9hbGcuYz0yMzM9c3RhdGljIGNvbnN0IHU4ICprZXlfZGF0YV9wdHJfdXNlcihjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuLS1cXG5jcnlwdG8vYWZfYWxnLmMtMjM1LXtcXG5jcnlwdG8vYWZfYWxnLmM6MjM2OlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuY3J5cHRvL2FmX2FsZy5jLTIzNy1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYz0yNDM3PXN0YXRpYyBpbnQgc2V0X2tleV91c2VyKHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLCBzdHJ1Y3Qga2V5ICprZXkpXFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0Mzgte1xcbmRyaXZlcnMvbWQvZG0tY3J5cHQuYzoyNDM5OlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZHJpdmVycy9tZC9kbS1jcnlwdC5jLTI0NDAtXFxuLS1cXG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmM9ODg9c3RhdGljIGludCBzZXRfa2V5X3VzZXIoc3RydWN0IGtleSAqa2V5LCBjaGFyICprZXlfYnl0ZXMsXFxuLS1cXG5kcml2ZXJzL21kL2RtLWlubGluZWNyeXB0LmMtOTAte1xcbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYzo5MTpcXHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdWtwO1xcbmRyaXZlcnMvbWQvZG0taW5saW5lY3J5cHQuYy05Mi1cXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYz0zOD1zdGF0aWMgaW50IHZlcml0eV92ZXJpZnlfZ2V0X3NpZ19mcm9tX2tleShjb25zdCBjaGFyICprZXlfZGVzYyxcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdmVyaXR5LXZlcmlmeS1zaWcuYy00MS1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jOjQyOlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZHJpdmVycy9tZC9kbS12ZXJpdHktdmVyaWZ5LXNpZy5jLTQzLVxcdGludCByZXQgPSAwO1xcbi0tXFxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM9NDA9ZmluZF9hbmRfbG9ja19wcm9jZXNzX2tleShjb25zdCBjaGFyICpwcmVmaXgsXFxuLS1cXG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00Ni1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuZnMvY3J5cHRvL2tleXNldHVwX3YxLmM6NDc6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5mcy9jcnlwdG8va2V5c2V0dXBfdjEuYy00OC1cXHRjb25zdCBzdHJ1Y3QgZnNjcnlwdF9rZXkgKnBheWxvYWQ7XFxuLS1cXG5mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaD0xMTQ9ZWNyeXB0ZnNfZ2V0X2tleV9wYXlsb2FkX2RhdGEoc3RydWN0IGtleSAqa2V5KVxcbi0tXFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE2LVxcdHN0cnVjdCBlY3J5cHRmc19hdXRoX3RvayAqYXV0aF90b2s7XFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmg6MTE3OlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1a3A7XFxuZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgtMTE4LVxcbi0tXFxuZnMvbmZzL25mczRpZG1hcC5jPTMwNT1zdGF0aWMgc3NpemVfdCBuZnNfaWRtYXBfZ2V0X2tleShjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbixcXG4tLVxcbmZzL25mcy9uZnM0aWRtYXAuYy0zMDktXFx0c3RydWN0IGtleSAqcmtleTtcXG5mcy9uZnMvbmZzNGlkbWFwLmM6MzEwOlxcdGNvbnN0IHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICpwYXlsb2FkO1xcbmZzL25mcy9uZnM0aWRtYXAuYy0zMTEtXFx0c3NpemVfdCByZXQ7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2Nvbm5lY3QuYz0yMTgxPWNpZnNfc2V0X2NpZnNjcmVkcyhzdHJ1Y3Qgc21iM19mc19jb250ZXh0ICpjdHgsIHN0cnVjdCBjaWZzX3NlcyAqc2VzKVxcbi0tXFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMjE5Mi1cXHRzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7XFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmM6MjE5MzpcXHRjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxuZnMvc21iL2NsaWVudC9jb25uZWN0LmMtMjE5NC1cXG4tLVxcbmZzL3ViaWZzL2F1dGguYz0yNTU9aW50IHViaWZzX2luaXRfYXV0aGVudGljYXRpb24oc3RydWN0IHViaWZzX2luZm8gKmMpXFxuLS1cXG5mcy91Ymlmcy9hdXRoLmMtMjU3LVxcdHN0cnVjdCBrZXkgKmtleXJpbmdfa2V5O1xcbmZzL3ViaWZzL2F1dGguYzoyNTg6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5mcy91Ymlmcy9hdXRoLmMtMjU5LVxcdGludCBlcnI7XFxuLS1cXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjYtICovXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjI3OnN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtMjgtXFx0c3RydWN0IHJjdV9oZWFkXFx0cmN1O1xcdFxcdC8qIFJDVSBkZXN0cnVjdG9yICovXFxuLS1cXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg9NDQ9ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDUtXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oOjQ2OnN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVzZXJfa2V5X3BheWxvYWRfcmN1KGNvbnN0IHN0cnVjdCBrZXkgKmtleSlcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmgtNDcte1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo0ODpcXHRyZXR1cm4gKHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICopZGVyZWZlcmVuY2Vfa2V5X3JjdShrZXkpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC00OS19XFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUwLVxcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaDo1MTpzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1c2VyX2tleV9wYXlsb2FkX2xvY2tlZChjb25zdCBzdHJ1Y3Qga2V5ICprZXkpXFxuaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oLTUyLXtcXG5pbmNsdWRlL2tleXMvdXNlci10eXBlLmg6NTM6XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xcbmluY2x1ZGUva2V5cy91c2VyLXR5cGUuaC01NC19XFxuLS1cXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jPTE0Mz1zdGF0aWMgaW50IHJlYWRfa2V5X2Zyb21fdXNlcl9rZXlyaW5nKHN0cnVjdCBkbV9jcnlwdF9rZXkgKmRtX2tleSlcXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0NC17XFxua2VybmVsL2NyYXNoX2R1bXBfZG1fY3J5cHQuYzoxNDU6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5rZXJuZWwvY3Jhc2hfZHVtcF9kbV9jcnlwdC5jLTE0Ni1cXHRzdHJ1Y3Qga2V5ICprZXk7XFxuLS1cXG5saWIvZGlnc2lnLmM9NjM9c3RhdGljIGludCBkaWdzaWdfdmVyaWZ5X3JzYShzdHJ1Y3Qga2V5ICprZXksXFxuLS1cXG5saWIvZGlnc2lnLmMtNzYtXFx0Y29uc3QgdWludDhfdCAqZW5kcDtcXG5saWIvZGlnc2lnLmM6Nzc6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVrcDtcXG5saWIvZGlnc2lnLmMtNzgtXFx0c3RydWN0IHB1YmtleV9oZHIgKnBraDtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTgwPWRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MjpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtODMtXFx0dW5zaWduZWQgbG9uZyBkZXJybm87XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19xdWVyeS5jPTYyPWludCBkbnNfcXVlcnkoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02Ni17XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYzo2NzpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxubmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYy02OC1cXHRzdHJ1Y3Qga2V5ICpya2V5O1xcbi0tXFxuc2VjdXJpdHkva2V5cy9kaC5jPTE4PXN0YXRpYyBzc2l6ZV90IGRoX2RhdGFfZnJvbV9rZXkoa2V5X3NlcmlhbF90IGtleWlkLCBjb25zdCB2b2lkICoqZGF0YSlcXG4tLVxcbnNlY3VyaXR5L2tleXMvZGguYy0zNy1cXHRcXHRpZiAoc3RhdHVzID09IDApIHtcXG5zZWN1cml0eS9rZXlzL2RoLmM6Mzg6XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnBheWxvYWQ7XFxuc2VjdXJpdHkva2V5cy9kaC5jLTM5LVxcdFxcdFxcdHVpbnQ4X3QgKmR1cGxpY2F0ZTtcXG4tLVxcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmM9MzAzPXN0YXRpYyBzdHJ1Y3Qga2V5ICpyZXF1ZXN0X3VzZXJfa2V5KGNvbnN0IGNoYXIgKm1hc3Rlcl9kZXNjLCBjb25zdCB1OCAqKm1hc3Rlcl9rZXksXFxuLS1cXG5zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jLTMwNS17XFxuc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYzozMDY6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xcbnNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMtMzA3LVxcdHN0cnVjdCBrZXkgKnVrZXk7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTU5PWludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy02MC17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo2MTpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQ7XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy02Mi1cXHRzaXplX3QgZGF0YWxlbiA9IHByZXAtXFx1MDAzZWRhdGFsZW47XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTg5PXN0YXRpYyB2b2lkIHVzZXJfZnJlZV9wYXlsb2FkX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy05MC17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzo5MTpcXHRzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqcGF5bG9hZDtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTkyLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6OTM6XFx0cGF5bG9hZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCwgcmN1KTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTk0LVxcdGtmcmVlX3NlbnNpdGl2ZShwYXlsb2FkKTtcXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTAxPWludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApXFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xMDIte1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM6MTAzOlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp6YXAgPSBOVUxMO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTA0LVxcdGludCByZXQ7XFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTEyOD12b2lkIHVzZXJfcmV2b2tlKHN0cnVjdCBrZXkgKmtleSlcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEyOS17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxMzA6XFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0gdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoa2V5KTtcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTEzMS1cXG4tLVxcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmM9MTQ2PXZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE0Ny17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxNDg6XFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYy0xNDktXFxuLS1cXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jPTE3MT1sb25nIHVzZXJfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcXG5zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jLTE3Mi17XFxuc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYzoxNzM6XFx0Y29uc3Qgc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkO1xcbnNlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMtMTc0LVxcdGxvbmcgcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNDo1Ny45NjM1NTc1ODlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUzNDEzNDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgVXNlciBLZXkgUGF5bG9hZCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgYHVzZXJfa2V5X3BheWxvYWRgIHN0cnVjdHMuIFNwZWNpZmljYWxseSwgSSdtIHJlYWNoaW5nIGZvciBgaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oYC4gSSByZWNhbGwgdGhhdCdzIHdoZXJlIHRoZSBkZWZpbml0aW9uIHNob3VsZCBiZSwgYW5kIHRoZSBkZXRhaWxzIHRoZXJlIGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSByZXByZXNlbnRhdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiB0aGF0IGBzdHJ1Y3RgIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgaXRzIGRlc2lnbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSdtIHJlYWxseSBsb29raW5nIHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHdoYXQncyBiZWluZyBzdG9yZWQsIGFuZCBob3cgaXQncyBoYW5kbGVkIGF0IGEgbG93IGxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MDAuNzE2OTczNTUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9rZXlzL3VzZXItdHlwZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuICAgMjpcXHQvKiB1c2VyLXR5cGUuaDogVXNlci1kZWZpbmVkIGtleSB0eXBlXFxuICAgMzpcXHQgKlxcbiAgIDQ6XFx0ICogQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cXG4gICA1OlxcdCAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSlcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQjaWZuZGVmIF9LRVlTX1VTRVJfVFlQRV9IXFxuICAgOTpcXHQjZGVmaW5lIF9LRVlTX1VTRVJfVFlQRV9IXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXkuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXFx1MDAzZVxcbiAgMTM6XFx0XFxuICAxNDpcXHQjaWZkZWYgQ09ORklHX0tFWVNcXG4gIDE1OlxcdFxcbiAgMTY6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiAgMTc6XFx0LypcXG4gIDE4OlxcdCAqIHRoZSBwYXlsb2FkIGZvciBhIGtleSBvZiB0eXBlIFxcXCJ1c2VyXFxcIiBvciBcXFwibG9nb25cXFwiXFxuICAxOTpcXHQgKiAtIG9uY2UgZmlsbGVkIGluIGFuZCBhdHRhY2hlZCB0byBhIGtleTpcXG4gIDIwOlxcdCAqICAgLSB0aGUgcGF5bG9hZCBzdHJ1Y3QgaXMgaW52YXJpYW50IG1heSBub3QgYmUgY2hhbmdlZCwgb25seSByZXBsYWNlZFxcbiAgMjE6XFx0ICogICAtIHRoZSBwYXlsb2FkIG11c3QgYmUgcmVhZCB3aXRoIFJDVSBwcm9jZWR1cmVzIG9yIHdpdGggdGhlIGtleSBzZW1hcGhvcmVcXG4gIDIyOlxcdCAqICAgICBoZWxkXFxuICAyMzpcXHQgKiAgIC0gdGhlIHBheWxvYWQgbWF5IG9ubHkgYmUgcmVwbGFjZWQgd2l0aCB0aGUga2V5IHNlbWFwaG9yZSB3cml0ZS1sb2NrZWRcXG4gIDI0OlxcdCAqIC0gdGhlIGtleSdzIGRhdGEgbGVuZ3RoIGlzIHRoZSBzaXplIG9mIHRoZSBhY3R1YWwgZGF0YSwgbm90IGluY2x1ZGluZyB0aGVcXG4gIDI1OlxcdCAqICAgcGF5bG9hZCB3cmFwcGVyXFxuICAyNjpcXHQgKi9cXG4gIDI3OlxcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkIHtcXG4gIDI4OlxcdFxcdHN0cnVjdCByY3VfaGVhZFxcdHJjdTtcXHRcXHQvKiBSQ1UgZGVzdHJ1Y3RvciAqL1xcbiAgMjk6XFx0XFx0dW5zaWduZWQgc2hvcnRcXHRkYXRhbGVuO1xcdC8qIGxlbmd0aCBvZiB0aGlzIGRhdGEgKi9cXG4gIDMwOlxcdFxcdGNoYXJcXHRcXHRkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpOyAvKiBhY3R1YWwgZGF0YSAqL1xcbiAgMzE6XFx0fTtcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyO1xcbiAgMzQ6XFx0ZXh0ZXJuIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9sb2dvbjtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZDtcXG4gIDM3OlxcdFxcbiAgMzg6XFx0ZXh0ZXJuIGludCB1c2VyX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgMzk6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9mcmVlX3ByZXBhcnNlKHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgNDA6XFx0ZXh0ZXJuIGludCB1c2VyX3VwZGF0ZShzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxvYWQgKnByZXApO1xcbiAgNDE6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9yZXZva2Uoc3RydWN0IGtleSAqa2V5KTtcXG4gIDQyOlxcdGV4dGVybiB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpO1xcbiAgNDM6XFx0ZXh0ZXJuIHZvaWQgdXNlcl9kZXNjcmliZShjb25zdCBzdHJ1Y3Qga2V5ICp1c2VyLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pO1xcbiAgNDQ6XFx0ZXh0ZXJuIGxvbmcgdXNlcl9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKTtcXG4gIDQ1OlxcdFxcbiAgNDY6XFx0c3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9yY3UoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9yY3Uoa2V5KTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXNlcl9rZXlfcGF5bG9hZF9sb2NrZWQoY29uc3Qgc3RydWN0IGtleSAqa2V5KVxcbiAgNTI6XFx0e1xcbiAgNTM6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqKWRlcmVmZXJlbmNlX2tleV9sb2NrZWQoKHN0cnVjdCBrZXkgKilrZXkpO1xcbiAgNTQ6XFx0fVxcbiAgNTU6XFx0XFxuICA1NjpcXHQjZW5kaWYgLyogQ09ORklHX0tFWVMgKi9cXG4gIDU3OlxcdFxcbiAgNTg6XFx0I2VuZGlmIC8qIF9LRVlTX1VTRVJfVFlQRV9IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjAwLjcxNzA1MjI4MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODgxMzM2NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBETlMgUmVzb2x2ZXIgUHJlcGFyc2UgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGEgY2hhbmdlIHRvIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIHdpdGhpbiBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgLiBJbW1lZGlhdGVseSwgbXkgYnJhaW4gc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJ3MgZXhhY3Qgcm9sZSDigJMgdGhlIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSwgdGhlIGluY29taW5nIEROUyBxdWVyeSBnZXRzIGV4YW1pbmVkIGZvciB0aGlzIHNwZWNpZmljIGtleSB0eXBlLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiBpbml0aWFsIHZhbGlkYXRpb24sIHNhbml0eSBjaGVja3MsIG9yIHBlcmhhcHMgZXZlbiBlYXJseSBwcmUtcHJvY2Vzc2luZyByZWxhdGVkIHRvIEROU0tFWS9EUyByZWNvcmRzIGJlZm9yZSB0aGUgcmVzb2x2ZXIgZGl2ZXMgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2hhdCogdGhlIG1vZGlmaWNhdGlvbiBlbnRhaWxzLiBJcyB0aGlzIGEgYnVnIGZpeCwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBvciwgbW9yZSBjb25jZXJuaW5nbHksIGEgcG90ZW50aWFsIHNlY3VyaXR5IGhhcmRlbmluZyBtZWFzdXJlIG9yIGEgZml4IHRoYXQgbWlnaHQgaW50cm9kdWNlIGEgdnVsbmVyYWJpbGl0eSBieSBvbWlzc2lvbj8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkaWZmIHRvIHNlZSB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gdGhpcyBjcml0aWNhbCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MDQuMTA1MTg4NDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTkwOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBvcHRfbmxlbiwgb3B0X25sZW4sIG9wdCk7XFxuIDE5MTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTkyOlxcdFxcdFxcdH0gd2hpbGUgKG9wdCA9IG5leHRfb3B0ICsgMSwgb3B0IFxcdTAwM2MgZW5kKTtcXG4gMTkzOlxcdFxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0LyogZG9uJ3QgY2FjaGUgdGhlIHJlc3VsdCBpZiB3ZSdyZSBjYWNoaW5nIGFuIGVycm9yIHNheWluZyB0aGVyZSdzIG5vXFxuIDE5NjpcXHRcXHQgKiByZXN1bHQgKi9cXG4gMTk3OlxcdFxcdGlmIChwcmVwLVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pIHtcXG4gMTk4OlxcdFxcdFxcdGtsZWF2ZShcXFwiID0gMCBbaF9lcnJvciAlbGRdXFxcIiwgUFRSX0VSUihwcmVwLVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pKTtcXG4gMTk5OlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMDA6XFx0XFx0fVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdG9yZV9yZXN1bHQ6XFxuIDIwMzpcXHRcXHRrZGVidWcoXFxcInN0b3JlIHJlc3VsdFxcXCIpO1xcbiAyMDQ6XFx0XFx0cHJlcC1cXHUwMDNlcXVvdGFsZW4gPSByZXN1bHRfbGVuO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHR1cGF5bG9hZCA9IGttYWxsb2NfZmxleCgqdXBheWxvYWQsIGRhdGEsIHJlc3VsdF9sZW4pO1xcbiAyMDc6XFx0XFx0aWYgKCF1cGF5bG9hZCkge1xcbiAyMDg6XFx0XFx0XFx0a2xlYXZlKFxcXCIgPSAtRU5PTUVNXFxcIik7XFxuIDIwOTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjEwOlxcdFxcdH1cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0dXBheWxvYWQtXFx1MDAzZWRhdGFsZW4gPSByZXN1bHRfbGVuO1xcbiAyMTM6XFx0XFx0bWVtY3B5KHVwYXlsb2FkLVxcdTAwM2VkYXRhLCBkYXRhLCByZXN1bHRfbGVuKTtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0cHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0gPSB1cGF5bG9hZDtcXG4gMjE2OlxcdFxcdGtsZWF2ZShcXFwiID0gMFxcXCIpO1xcbiAyMTc6XFx0XFx0cmV0dXJuIDA7XFxuIDIxODpcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdC8qXFxuIDIyMTpcXHQgKiBDbGVhbiB1cCB0aGUgcHJlcGFyc2UgZGF0YVxcbiAyMjI6XFx0ICovXFxuIDIyMzpcXHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbiAyMjQ6XFx0e1xcbiAyMjU6XFx0XFx0cHJfZGV2ZWwoXFxcIj09XFx1MDAzZSVzKClcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0a2ZyZWUocHJlcC1cXHUwMDNlcGF5bG9hZC5kYXRhW2Ruc19rZXlfZGF0YV0pO1xcbiAyMjg6XFx0fVxcbiAyMjk6XFx0XFxuIDIzMDpcXHQvKlxcbiAyMzE6XFx0ICogVGhlIGRlc2NyaXB0aW9uIGlzIG9mIHRoZSBmb3JtIFxcXCJbXFx1MDAzY3R5cGVcXHUwMDNlOl1cXHUwMDNjZG9tYWluX25hbWVcXHUwMDNlXFxcIlxcbiAyMzI6XFx0ICpcXG4gMjMzOlxcdCAqIFRoZSBkb21haW4gbmFtZSBtYXkgYmUgYSBzaW1wbGUgbmFtZSBvciBhbiBhYnNvbHV0ZSBkb21haW4gbmFtZSAod2hpY2hcXG4gMjM0OlxcdCAqIHNob3VsZCBlbmQgd2l0aCBhIHBlcmlvZCkuICBUaGUgZG9tYWluIG5hbWUgaXMgY2FzZS1pbmRlcGVuZGVudC5cXG4gMjM1OlxcdCAqL1xcbiAyMzY6XFx0c3RhdGljIGJvb2wgZG5zX3Jlc29sdmVyX2NtcChjb25zdCBzdHJ1Y3Qga2V5ICprZXksXFxuIDIzNzpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXlfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSlcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdGludCBzbGVuLCBkbGVuLCByZXQgPSAwO1xcbiAyNDA6XFx0XFx0Y29uc3QgY2hhciAqc3JjID0ga2V5LVxcdTAwM2VkZXNjcmlwdGlvbiwgKmRzcCA9IG1hdGNoX2RhdGEtXFx1MDAzZXJhd19kYXRhO1xcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHRrZW50ZXIoXFxcIiVzLCVzXFxcIiwgc3JjLCBkc3ApO1xcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHRpZiAoIXNyYyB8fCAhZHNwKVxcbiAyNDU6XFx0XFx0XFx0Z290byBub19tYXRjaDtcXG4gMjQ2OlxcdFxcbiAyNDc6XFx0XFx0aWYgKHN0cmNhc2VjbXAoc3JjLCBkc3ApID09IDApXFxuIDI0ODpcXHRcXHRcXHRnb3RvIG1hdGNoZWQ7XFxuIDI0OTpcXHRcXG4gMjUwOlxcdFxcdHNsZW4gPSBzdHJsZW4oc3JjKTtcXG4gMjUxOlxcdFxcdGRsZW4gPSBzdHJsZW4oZHNwKTtcXG4gMjUyOlxcdFxcdGlmIChzbGVuIFxcdTAwM2M9IDAgfHwgZGxlbiBcXHUwMDNjPSAwKVxcbiAyNTM6XFx0XFx0XFx0Z290byBub19tYXRjaDtcXG4gMjU0OlxcdFxcdGlmIChzcmNbc2xlbiAtIDFdID09ICcuJylcXG4gMjU1OlxcdFxcdFxcdHNsZW4tLTtcXG4gMjU2OlxcdFxcdGlmIChkc3BbZGxlbiAtIDFdID09ICcuJylcXG4gMjU3OlxcdFxcdFxcdGRsZW4tLTtcXG4gMjU4OlxcdFxcdGlmIChzbGVuICE9IGRsZW4gfHwgc3RybmNhc2VjbXAoc3JjLCBkc3AsIHNsZW4pICE9IDApXFxuIDI1OTpcXHRcXHRcXHRnb3RvIG5vX21hdGNoO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRtYXRjaGVkOlxcbiAyNjI6XFx0XFx0cmV0ID0gMTtcXG4gMjYzOlxcdG5vX21hdGNoOlxcbiAyNjQ6XFx0XFx0a2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuIDI2NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyNjY6XFx0fVxcbiAyNjc6XFx0XFxuIDI2ODpcXHQvKlxcbiAyNjk6XFx0ICogUHJlcGFyc2UgdGhlIG1hdGNoIGNyaXRlcmlvbi5cXG4gMjcwOlxcdCAqL1xcbiAyNzE6XFx0c3RhdGljIGludCBkbnNfcmVzb2x2ZXJfbWF0Y2hfcHJlcGFyc2Uoc3RydWN0IGtleV9tYXRjaF9kYXRhICptYXRjaF9kYXRhKVxcbiAyNzI6XFx0e1xcbiAyNzM6XFx0XFx0bWF0Y2hfZGF0YS1cXHUwMDNlbG9va3VwX3R5cGUgPSBLRVlSSU5HX1NFQVJDSF9MT09LVVBfSVRFUkFURTtcXG4gMjc0OlxcdFxcdG1hdGNoX2RhdGEtXFx1MDAzZWNtcCA9IGRuc19yZXNvbHZlcl9jbXA7XFxuIDI3NTpcXHRcXHRyZXR1cm4gMDtcXG4gMjc2OlxcdH1cXG4gMjc3OlxcdFxcbiAyNzg6XFx0LypcXG4gMjc5OlxcdCAqIERlc2NyaWJlIGEgRE5TIGtleVxcbiAyODA6XFx0ICovXFxuIDI4MTpcXHRzdGF0aWMgdm9pZCBkbnNfcmVzb2x2ZXJfZGVzY3JpYmUoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIDI4MjpcXHR7XFxuIDI4MzpcXHRcXHRzZXFfcHV0cyhtLCBrZXktXFx1MDAzZWRlc2NyaXB0aW9uKTtcXG4gMjg0OlxcdFxcdGlmIChrZXlfaXNfcG9zaXRpdmUoa2V5KSkge1xcbiAyODU6XFx0XFx0XFx0aW50IGVyciA9IFBUUl9FUlIoa2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbZG5zX2tleV9lcnJvcl0pO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRpZiAoZXJyKVxcbiAyODg6XFx0XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiOiAlZFxcXCIsIGVycik7XFxuIDI4OTpcXHRcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjA0LjEwNTI5NDE1OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDczODU5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEROUyBSZXNvbHZlciBLZXkgVHlwZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoYW5nZSBpbiBtZW1vcnkgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGArIDFgIGZyb20gdGhlIGBrbWFsbG9jX2ZsZXhgIGNhbGwsIG1ha2luZyBpdCBga21hbGxvY19mbGV4KCp1cGF5bG9hZCwgZGF0YSwgcmVzdWx0X2xlbik7YCBhbmQgYWxzbyBnb3QgcmlkIG9mIHRoZSBudWxsIHRlcm1pbmF0aW9uIGB1cGF5bG9hZC1cdTAwM2VkYXRhW3Jlc3VsdF9sZW5dID0gJ1xcMCc7YC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBpbnRlbmRlZCB0byBwcmV2ZW50IGFuIG9mZi1ieS1vbmUgd3JpdGUgb3IsIG1vcmUgZWZmaWNpZW50bHksIHRvIGF2b2lkIGFsbG9jYXRpbmcgYW5kIHNldHRpbmcgYW4gdW5uZWNlc3NhcnkgYnl0ZSB0byB6ZXJvLlxuXG5XYWl0IGEgbWludXRlLCB0aGlzIGlzIGZvciBhIGB1c2VyX2tleV9wYXlsb2FkYCBzdHJ1Y3QsIHdoaWNoIGhhcyBhIGZsZXhpYmxlIGFycmF5IG1lbWJlciBgY2hhciBkYXRhW10gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHU2NCkpYC4gVGhhdCBzdHJ1Y3R1cmUncyBzZXR1cCBpcyBjcml0aWNhbC4gSWYgd2UncmUgY29weWluZyBgcmVzdWx0X2xlbmAgYnl0ZXMgKmFuZCogd2UgZG9uJ3QgYWN0dWFsbHkgKm5lZWQqIG51bGwgdGVybWluYXRpb24sIHRoZW4gcmVtb3ZpbmcgdGhlIGV4dHJhIGJ5dGUgYW5kIHRoZSBudWxsIGFzc2lnbm1lbnQgaXMgYWJzb2x1dGVseSBjb3JyZWN0LiBJdCdzIHRoZSByaWdodCB0aGluZyB0byBkbyBpZiB0aGUgY29kZSBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgbnVsbCB0ZXJtaW5hdGlvbi4gTWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZSBjb2RlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGB1cGF5bG9hZGAgaXMgYmVpbmcgdXNlZC4gQWgsIHllcywgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgdXNlZCBmb3IgdGhlIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgLiBPa2F5LCBzbyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLCBzbyBpdCdzIHByb2JhYmx5IGJlaW5nIHVzZWQuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHRoYXQgdGhlIGBkbnNfcmVzb2x2ZXJgIGlzIGFjdHVhbGx5IGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmUgYmVmb3JlIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZSBjaGFuZ2UgaXMgY29ycmVjdCBmb3Igb3VyIGN1cnJlbnQgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNTowOS41NzkxNTY4MjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDMyODU0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE5TX1JFU09MVkVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWctNC0jXFxubmV0L2Ruc19yZXNvbHZlci9LY29uZmlnOjU6Y29uZmlnIEROU19SRVNPTFZFUlxcbm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJETlMgUmVzb2x2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MTAuMzU5NDkwMDgzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MDQ5Njc3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcmVxdWlyZW1lbnQgc3BlY2lmaWVzIGBDT05GSUdfRE5TX1JFU09MVkVSYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBlbHNlIGlzIHBvdGVudGlhbGx5IGxpbmtlZCB0byB0aGF0P1wiIFdlIGtub3cgaG93IHRoZXNlIHRoaW5ncyB0ZW5kIHRvIGNhc2NhZGUuIFRoZSBETlMgcmVzb2x2ZXIgYWxtb3N0IGNlcnRhaW5seSBoYXMgZGVwZW5kZW5jaWVzLCBhbmQgb2Z0ZW4gdGhvc2UgZGVwZW5kZW5jaWVzIHRyaWdnZXIgb3RoZXIgY29uZmlndXJhdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGludGVydHdpbmVkIHdpdGggYENPTkZJR19ETlNfUkVTT0xWRVJgIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBBcmUgdGhlcmUgcmVsYXRlZCBuZXR3b3JrIHNldHRpbmdzPyBTZWN1cml0eSBwb2xpY2llcz8gTG9nZ2luZyBvcHRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHJlbGF0ZWQgY29uZmlncyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBsaWNhdGlvbnMgYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjEzLjE2NDQ2MDExMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIENvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlclxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIEROU19SRVNPTFZFUlxcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIkROUyBSZXNvbHZlciBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBLRVlTXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIFNheWluZyBZIGhlcmUgd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBETlMgUmVzb2x2ZXIga2V5IHR5cGVcXG4gIDEwOlxcdFxcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB1cGNhbGxzIHRvIHBlcmZvcm0gRE5TIGxvb2t1cHMgaW5cXG4gIDExOlxcdFxcdCAgdXNlcnNwYWNlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIEROUyBSZXNvbHZlciBpcyB1c2VkIHRvIHF1ZXJ5IEROUyBzZXJ2ZXIgZm9yIGluZm9ybWF0aW9uLiAgRXhhbXBsZXNcXG4gIDE0OlxcdFxcdCAgYmVpbmcgcmVzb2x2aW5nIGEgVU5DIGhvc3RuYW1lIGVsZW1lbnQgdG8gYW4gSVAgYWRkcmVzcyBmb3IgQ0lGUyBvclxcbiAgMTU6XFx0XFx0ICBwZXJmb3JtaW5nIGEgRE5TIHF1ZXJ5IGZvciBBRlNEQiByZWNvcmRzIHNvIHRoYXQgQUZTIGNhbiBsb2NhdGUgYVxcbiAgMTY6XFx0XFx0ICBjZWxsJ3Mgdm9sdW1lIGxvY2F0aW9uIGRhdGFiYXNlIHNlcnZlcnMuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgRE5TIFJlc29sdmVyIGlzIHVzZWQgYnkgdGhlIENJRlMgYW5kIEFGUyBtb2R1bGVzLCBhbmQgd291bGQgc3VwcG9ydFxcbiAgMTk6XFx0XFx0ICBTTUIyIGxhdGVyLiAgRE5TIFJlc29sdmVyIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlcnNwYWNlIHVwY2FsbFxcbiAgMjA6XFx0XFx0ICBoZWxwZXIgXFxcIi9zYmluL2Rucy5yZXNvbHZlclxcXCIgdmlhIC9ldGMvcmVxdWVzdC1rZXkuY29uZi5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci5yc3RcXHUwMDNlIGZvciBmdXJ0aGVyXFxuICAyMzpcXHRcXHQgIGluZm9ybWF0aW9uLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcbiAgMjY6XFx0XFx0ICBkbnNfcmVzb2x2ZXIuXFxuICAyNzpcXHRcXG4gIDI4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MTMuMTY0NTI2MDQyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjA1MzYwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBETlMgUmVzb2x2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IEknbSBkZWFsaW5nIHdpdGggYSBETlMgcmVzb2x2ZXIgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgYENPTkZJR19ETlNfUkVTT0xWRVJgIGFuZCBgQ09ORklHX0tFWVNgIGFyZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJJ20gc2VlaW5nLCBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gdGhhdCBvbmUuXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxhdGVkLiBTY2FubmluZy4uLiBSaWdodCwgbG9va3MgbGlrZSBgZG5zX3Jlc29sdmVyX3ByZXBhcnNlYCBpcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB0byBob25lIGluIG9uLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBBaCwgaGVyZSdzIG9uZSAtIGBrZXlfdHlwZV9kbnNfcmVzb2x2ZXJgIGlzIHJlZ2lzdGVyZWQgd2l0aGluIGBpbml0X2Ruc19yZXNvbHZlcmAuIFRoYXQncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuVG8gZGl2ZSBkZWVwZXIgaW50byB0aGlzLCB0aGUgc291cmNlIGNvZGUgbG9jYXRpb24gaXMgbm90ZWQgLSBpdCBsb29rcyBsaWtlIEkgbmVlZCB0byBjaGVjayBgbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUga2V5IG1hbmFnZW1lbnQuIFRoYXQncyB0aGUgbmV4dCBzdGVwLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjE3LjAyNTA2NTQ5NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU0MTU1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG5zX3Jlc29sdmVyX3ByZXBhcnNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTc5PXN0YXRpYyBpbnRcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzo4MDpkbnNfcmVzb2x2ZXJfcHJlcGFyc2Uoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcClcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYy04MS17XFxuLS1cXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYz0zMDk9c3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMS1cXHQuZmxhZ3NcXHRcXHQ9IEtFWV9UWVBFX05FVF9ET01BSU4gfCBLRVlfVFlQRV9JTlNUQU5UX1JFQVAsXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM6MzEyOlxcdC5wcmVwYXJzZVxcdD0gZG5zX3Jlc29sdmVyX3ByZXBhcnNlLFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTMxMy1cXHQuZnJlZV9wcmVwYXJzZVxcdD0gZG5zX3Jlc29sdmVyX2ZyZWVfcHJlcGFyc2UsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjE3LjA4MDQ4NjMyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDgyMzYwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgYHByZXBhcnNlYCBmdW5jdGlvbiBmb3IgdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlIGdldHMgaW52b2tlZCB3aGVuZXZlciBhIGtleSBvZiB0aGF0IHR5cGUgaXMgY3JlYXRlZCBvciBtb2RpZmllZC4gVGhhdCdzIHRocm91Z2ggYGFkZF9rZXlgIGZyb20gdXNlcnNwYWNlLCB3aGljaCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBGaXJzdCwgSSB3YW50ZWQgdG8gdmVyaWZ5IGlmIGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBZZXMsIGl0IGlzLiBCdXQsIGhvbGQgb24gYSBtaW51dGUsIHRoaXMgY29udHJhZGljdHMgdGhlIGNvZGluZyBndWlkZWxpbmVzIGEgYml0LiBJIHJlY2FsbCBpdCBzdGF0aW5nIHRoYXQgd2Ugc2hvdWxkIGZhdm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLiBUaG9zZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IGFkZHJlc3NlcywgYnV0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlcmAuIEJlY2F1c2UgdGhlIGFkZHJlc3MgaXMgdGFrZW4sIHRoZSBjb21waWxlciBjYW4ndCBjb21wbGV0ZWx5IGlubGluZSBpdC4gVGhhdCBnaXZlcyBpdCBhIHVuaXF1ZSBzeW1ib2wuIFNvLCB0aGF0IHJlcXVpcmVtZW50IGlzIGZ1bGZpbGxlZC4gVG8gYmUgdGhvcm91Z2gsIHRob3VnaCwgSSBzaG91bGQgYWxzbyBtYWtlIGEgbm90ZSBvZiB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxscyogYC1cdTAwM2VwcmVwYXJzZWAuIE5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVyZSB0aGF0IGAtXHUwMDNlcHJlcGFyc2VgIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tLCBzbyBJJ2xsIGdvIGNoZWNrIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDAxOjA1OjIyLjU2Mjg0ODYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc1NTIzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZXByZXBhcnNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcInNlY3VyaXR5L2tleXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInNlY3VyaXR5L2tleXMva2V5LmM9NDk5PWludCBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoc3RydWN0IGtleSAqa2V5LFxcbi0tXFxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTQtXFx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xcbnNlY3VyaXR5L2tleXMva2V5LmM6NTE1OlxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKSB7XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo1MTY6XFx0XFx0cmV0ID0ga2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZShcXHUwMDI2cHJlcCk7XFxuc2VjdXJpdHkva2V5cy9rZXkuYy01MTctXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTU0Ni1lcnJvcjpcXG5zZWN1cml0eS9rZXlzL2tleS5jOjU0NzpcXHRpZiAoa2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZSlcXG5zZWN1cml0eS9rZXlzL2tleS5jLTU0OC1cXHRcXHRrZXktXFx1MDAzZXR5cGUtXFx1MDAzZWZyZWVfcHJlcGFyc2UoXFx1MDAyNnByZXApO1xcbi0tXFxuc2VjdXJpdHkva2V5cy9rZXkuYz04MDY9c3RhdGljIGtleV9yZWZfdCBfX2tleV9jcmVhdGVfb3JfdXBkYXRlKGtleV9yZWZfdCBrZXlyaW5nX3JlZixcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmMtODM1LVxcdGlmICghaW5kZXhfa2V5LnR5cGUtXFx1MDAzZWluc3RhbnRpYXRlIHx8XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo4MzY6XFx0ICAgICghaW5kZXhfa2V5LmRlc2NyaXB0aW9uIFxcdTAwMjZcXHUwMDI2ICFpbmRleF9rZXkudHlwZS1cXHUwMDNlcHJlcGFyc2UpKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtODM3LVxcdFxcdGdvdG8gZXJyb3JfcHV0X3R5cGU7XFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTg1NS1cXHRwcmVwLmV4cGlyeSA9IFRJTUU2NF9NQVg7XFxuc2VjdXJpdHkva2V5cy9rZXkuYzo4NTY6XFx0aWYgKGluZGV4X2tleS50eXBlLVxcdTAwM2VwcmVwYXJzZSkge1xcbnNlY3VyaXR5L2tleXMva2V5LmM6ODU3OlxcdFxcdHJldCA9IGluZGV4X2tleS50eXBlLVxcdTAwM2VwcmVwYXJzZShcXHUwMDI2cHJlcCk7XFxuc2VjdXJpdHkva2V5cy9rZXkuYy04NTgtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmMtOTU1LWVycm9yX2ZyZWVfcHJlcDpcXG5zZWN1cml0eS9rZXlzL2tleS5jOjk1NjpcXHRpZiAoaW5kZXhfa2V5LnR5cGUtXFx1MDAzZXByZXBhcnNlKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtOTU3LVxcdFxcdGluZGV4X2tleS50eXBlLVxcdTAwM2VmcmVlX3ByZXBhcnNlKFxcdTAwMjZwcmVwKTtcXG4tLVxcbnNlY3VyaXR5L2tleXMva2V5LmM9MTA3Nj1pbnQga2V5X3VwZGF0ZShrZXlfcmVmX3Qga2V5X3JlZiwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBsZW4pXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTEwOTctXFx0cHJlcC5leHBpcnkgPSBUSU1FNjRfTUFYO1xcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5ODpcXHRpZiAoa2V5LVxcdTAwM2V0eXBlLVxcdTAwM2VwcmVwYXJzZSkge1xcbnNlY3VyaXR5L2tleXMva2V5LmM6MTA5OTpcXHRcXHRyZXQgPSBrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKFxcdTAwMjZwcmVwKTtcXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMDAtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTExMTUtZXJyb3I6XFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMTE2OlxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXByZXBhcnNlKVxcbnNlY3VyaXR5L2tleXMva2V5LmMtMTExNy1cXHRcXHRrZXktXFx1MDAzZXR5cGUtXFx1MDAzZWZyZWVfcHJlcGFyc2UoXFx1MDAyNnByZXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwMTowNToyMi42MjY2MTMxNTVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY0ODM2NDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2V5IFVwZGF0ZSBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgcG9pbnRzIHRvIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgY2VudGVyZWQgYXJvdW5kIGtleSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBga2V5X2luc3RhbnRpYXRlX2FuZF9saW5rYCwgYF9fa2V5X2NyZWF0ZV9vcl91cGRhdGVgLCBhbmQgYGtleV91cGRhdGVgIGFsbCBjYWxsIGAtXHUwMDNlcHJlcGFyc2VgLiBUaGVzZSBmdW5jdGlvbnMgYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYHN5c19hZGRfa2V5YCBhbmQgYHN5c19rZXljdGxgLiBUaGUgY3JpdGljYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24uIFNpbmNlIGl0J3MgYSBjYWxsYmFjaywgaXQncyBub3QgaW5saW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBtb2RpZmljYXRpb24uXG5cbkJ1dCwgaGFuZyBvbiwgaXQgc2VlbXMgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAgaXMgKnRoZSogZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQuIEFuZCBldmVuIGJldHRlciwgaXQncyBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyBzdGlsbCB0YWtlbiB3aGljaCBtYWtlcyBpdCBwZXJmZWN0bHkgb2theSB0byBpbmNsdWRlLCBleGFjdGx5IGFzIGV4cGVjdGVkLiBJIGJyaWVmbHkgY29uc2lkZXJlZCBpbmNsdWRpbmcgYGtleV9pbnN0YW50aWF0ZV9hbmRfbGlua2AsIGBfX2tleV9jcmVhdGVfb3JfdXBkYXRlYCwgYW5kIGBrZXlfdXBkYXRlYCwgYnV0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIHRoZSByaWdodCBmdW5jdGlvbiB0byBmb2N1cyBvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJJ3ZlIGNoZWNrZWQgYW5kIGNvbmZpcm1lZDogbm8gb3RoZXIgZnVuY3Rpb25zIHNlZW0gdG8gYmUgYWZmZWN0ZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uLiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBkbnNfcmVzb2x2ZXJfcHJlcGFyc2VgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGluLiBBaCwgeWVzLCBgQ09ORklHX0ROU19SRVNPTFZFUmAgaXMgdGhlIGNvbnRyb2xsaW5nIGNvbmZpZy4gU28sIHdlJ2xsIG5lZWQgdG8gYWRkIGBETlNfUkVTT0xWRVJgIHRvIGBFbmFibGVDb25maWdzYC4gSXQgbG9va3MgbGlrZSBgS0VZU2AgaXMgYWxzbyByZXF1aXJlZCwgYnV0IHRoYXQncyBhIG1vcmUgZ2VuZXJpYyBjb25maWcuIEknbGwgYWRkIHRoYXQgYXMgd2VsbCwganVzdCB0byBiZSBzYWZlLlxuXG5GaW5hbGx5LCBJJ2xsIHJldmlzaXQgYG5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jYCBmb3IgYW55IHJlbWFpbmluZyBjb25zaWRlcmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MTgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MjguMjc0OTgwMTAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTc0NTI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbnNfcmVzb2x2ZXJfcHJlcGFyc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmM9Nzk9c3RhdGljIGludFxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jOjgwOmRuc19yZXNvbHZlcl9wcmVwYXJzZShzdHJ1Y3Qga2V5X3ByZXBhcnNlZF9wYXlsb2FkICpwcmVwKVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jLTgxLXtcXG4tLVxcbm5ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jPTMwOT1zdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZG5zX3Jlc29sdmVyID0ge1xcbi0tXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtMzExLVxcdC5mbGFnc1xcdFxcdD0gS0VZX1RZUEVfTkVUX0RPTUFJTiB8IEtFWV9UWVBFX0lOU1RBTlRfUkVBUCxcXG5uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYzozMTI6XFx0LnByZXBhcnNlXFx0PSBkbnNfcmVzb2x2ZXJfcHJlcGFyc2UsXFxubmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMtMzEzLVxcdC5mcmVlX3ByZXBhcnNlXFx0PSBkbnNfcmVzb2x2ZXJfZnJlZV9wcmVwYXJzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MjguMzMwNzI4NDY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MTc4MDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCBsb29rcyBzb2xpZCBmcm9tIGEgcXVpY2sgZ2xhbmNlLiBJdCdzIGZ1bmN0aW9uYWwsIHRoYXQncyB0aGUga2V5LiBSZW1vdmluZyB0aGF0IGArIDFgIGZyb20gYGttYWxsb2NfZmxleGAgYW5kIHRoZSBudWxsIHRlcm1pbmF0aW9uIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0J3MgZWl0aGVyIGZpeGluZyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5LCBvciBhdCBsZWFzdCBpdCBjbGVhbnMgdXAgdGhlIGNvZGUgYSBiaXQuIEVpdGhlciB3YXksIHRoYXQncyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIGl0IHJlYWNoYWJsZT8gWWVzISBJdCdzIHRyaWdnZXJlZCB0aHJvdWdoIHRoZSBgYWRkX2tleWAgc3lzY2FsbCB3aXRoIHRoZSBgZG5zX3Jlc29sdmVyYCB0eXBlLiBCaW5nby4gVGhhdCBtYWtlcyBpdCBpbW1lZGlhdGVseSB3b3J0aCBwdXR0aW5nIG9uIHRoZSBmdXp6aW5nIGxpc3QuXG5cbkxldCdzIGdldCB0aGUgcmVzdWx0cyByZWFkeS4gSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLCBvYnZpb3VzbHkuIEZvciBmb2N1cyBzeW1ib2xzLCBJJ2xsIHNwZWNpZnkgYGRuc19yZXNvbHZlcl9wcmVwYXJzZWAsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgY2hhbmdlIGhhcHBlbmVkLiBXZSBuZWVkIHRvIGVuYWJsZSBzb21lIGNvbmZpZ3VyYXRpb25zLCBzbyBJJ2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZSBgRE5TX1JFU09MVkVSYCBhbmQgYEtFWVNgLlxuXG5NeSByZWFzb25pbmcgaXMgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGBkbnNfcmVzb2x2ZXJgIGtleSB0eXBlLiBJdCdzIG1vZGlmeWluZyBtZW1vcnkgYWxsb2NhdGlvbiAoc2l6ZSkgYW5kIHJlbW92ZXMgbnVsbCB0ZXJtaW5hdGlvbiwgd2hpY2ggYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMuIENyaXRpY2FsbHksIHRoaXMgY2hhbmdlIGlzIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBhZGRfa2V5YCBzeXNjYWxsLCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBmb3IgZnV6emluZy4gV2UgaGF2ZSBhIGNsZWFyIHBhdGggZnJvbSB1c2VyIGlucHV0IHRvIHRoZSBhZmZlY3RlZCBjb2RlLiBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgaW4gdGhlIGZ1enppbmcgcmVwb3J0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjMsIk91dHB1dFRva2VucyI6OTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDE6MDU6MzMuOTQ4NTM4NzI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1MzcwMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkROU19SRVNPTFZFUlwiLFxuICAgIFwiS0VZU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRuc19yZXNvbHZlcl9wcmVwYXJzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwcmVwYXJzZSBmdW5jdGlvbiBmb3IgdGhlIGRuc19yZXNvbHZlciBrZXkgdHlwZSwgY2hhbmdpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgYW5kIHJlbW92aW5nIG51bGwgdGVybWluYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBhZGRfa2V5IHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRE5TX1JFU09MVkVSXCIsXG4gICAgXCJLRVlTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG5zX3Jlc29sdmVyX3ByZXBhcnNlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHByZXBhcnNlIGZ1bmN0aW9uIGZvciB0aGUgZG5zX3Jlc29sdmVyIGtleSB0eXBlLCBjaGFuZ2luZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gc2l6ZSBhbmQgcmVtb3ZpbmcgbnVsbCB0ZXJtaW5hdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGFkZF9rZXkgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[1] Phase: Succeeded StartedAt: 2026-08-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 01:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 01:06:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2] Phase: Succeeded StartedAt: 2026-08-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 01:06:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:01 +0000 UTC FinishedAt: 2026-08-07 01:06:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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-workflowthmnv/series-workflowthmnv-convert-artifact-1186803863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:43 +0000 UTC FinishedAt: 2026-08-07 01:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:43 +0000 UTC FinishedAt: 2026-08-07 01:26:54 +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:*560fe822-3636-4533-9c36-64c9537a5b39,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-workflowthmnv/series-workflowthmnv-convert-artifact-1186803863/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": "a35b3160-ab77-4967-a86a-3f4b15ffe18e", "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-workflowthmnv/series-workflowthmnv-build-action-250605037/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:06:43 +0000 UTC FinishedAt: 2026-08-07 01:26:44 +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:*560fe822-3636-4533-9c36-64c9537a5b39,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-workflowthmnv/series-workflowthmnv-convert-artifact-1186803863/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": "a35b3160-ab77-4967-a86a-3f4b15ffe18e", "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-workflowthmnv/series-workflowthmnv-build-action-250605037/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:26:54 +0000 UTC FinishedAt: 2026-08-07 01:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:26:54 +0000 UTC FinishedAt: 2026-08-07 01:26:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:26:54 +0000 UTC FinishedAt: 2026-08-07 01:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:26:54 +0000 UTC FinishedAt: 2026-08-07 01:27:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-workflowthmnv/series-workflowthmnv-convert-artifact-2778107078/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:27:14 +0000 UTC FinishedAt: 2026-08-07 01:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:27:14 +0000 UTC FinishedAt: 2026-08-07 01:29:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a35b3160-ab77-4967-a86a-3f4b15ffe18e,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-workflowthmnv/series-workflowthmnv-build-action-250605037/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-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:29:15 +0000 UTC FinishedAt: 2026-08-07 01:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:29:15 +0000 UTC FinishedAt: 2026-08-07 01:29:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:29:15 +0000 UTC FinishedAt: 2026-08-07 01:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:29:15 +0000 UTC FinishedAt: 2026-08-07 01:51:14 +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:*560fe822-3636-4533-9c36-64c9537a5b39,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-workflowthmnv/series-workflowthmnv-convert-artifact-2778107078/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": "4184d098-5ba8-485a-94ff-0f35d2faae82", "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-workflowthmnv/series-workflowthmnv-build-action-3640856586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:29:15 +0000 UTC FinishedAt: 2026-08-07 01:51:04 +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:*560fe822-3636-4533-9c36-64c9537a5b39,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-workflowthmnv/series-workflowthmnv-convert-artifact-2778107078/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": "4184d098-5ba8-485a-94ff-0f35d2faae82", "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-workflowthmnv/series-workflowthmnv-build-action-3640856586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:51:14 +0000 UTC FinishedAt: 2026-08-07 01:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:51:14 +0000 UTC FinishedAt: 2026-08-07 01:51:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:51:14 +0000 UTC FinishedAt: 2026-08-07 01:53:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:51:14 +0000 UTC FinishedAt: 2026-08-07 01:53:13 +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:*4184d098-5ba8-485a-94ff-0f35d2faae82,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-workflowthmnv/series-workflowthmnv-build-action-3640856586/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-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +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":["dns_resolver_preparse"],"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:*a35b3160-ab77-4967-a86a-3f4b15ffe18e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4184d098-5ba8-485a-94ff-0f35d2faae82,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-workflowthmnv/series-workflowthmnv-build-action-250605037/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-workflowthmnv/series-workflowthmnv-build-action-3640856586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 01:53:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 01:53:41 +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":["dns_resolver_preparse"],"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-workflowthmnv/series-workflowthmnv-convert-artifact-448232075/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 01:53:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 01:53:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:22 +0000 UTC FinishedAt: 2026-08-07 01:53:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:53 +0000 UTC FinishedAt: 2026-08-07 02:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowthmnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"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":["dns_resolver_preparse"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4fa4977a0d900f936bcae5cd2c510be5554e8dd6","config_name":"upstream-apparmor-kasan.config","enable_configs":["DNS_RESOLVER","KEYS"],"series_id":"f9b967fd-7b03-4a9a-a2e0-c817a7b9dfdd","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-07 01:53:53 +0000 UTC FinishedAt: 2026-08-07 02:53:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a35b3160-ab77-4967-a86a-3f4b15ffe18e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4184d098-5ba8-485a-94ff-0f35d2faae82,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-workflowthmnv/series-workflowthmnv-build-action-250605037/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-workflowthmnv/series-workflowthmnv-build-action-3640856586/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-workflowthmnv/series-workflowthmnv-convert-artifact-448232075/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,}