Name: series-workflow8dxmc Phase: Succeeded StartedAt: 2026-08-16 21:32:07 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[0] Phase: Succeeded StartedAt: 2026-08-16 21:32:07 +0000 UTC FinishedAt: 2026-08-16 21:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 21:32:07 +0000 UTC FinishedAt: 2026-08-16 21:49:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO" ], "series_id": "dadb92ea-650a-4ea6-aacd-5dd419a91c09" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_ao_connect_init", "tcp_parse_ao" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9hb19jb25uZWN0X2luaXQmIzM0OywKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIHN0ZXAgKGBzeW5jaHJvbml6ZV9yY3UoKWApIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0KClgIHdoZW4gYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gb3IgYSB1c2UtYWZ0ZXItZnJlZSBidWcsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxM2FhZWVhMGRmN2UyYzEwOTVjNmJhOGY4Yjc4OTc1MjI3M2RjYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCBlNGVjNjBhMzM0OTYzLi41MDk0MjY3NDQ3YWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCBcdTAwMjZhb19pbmZvLVx1MDAzZWhlYWQsIG5vZGUpIHtcbiYjNDM7XHRcdGlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cdTAwM2VwcmVmaXhsZW4sXG4mIzQzO1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4mIzQzO1x0XHRcdC8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovXG4mIzQzO1x0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYW9fY29ubmVjdF9pbml0JiMzNDssCiAgICAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxM2FhZWVhMGRmN2UyYzEwOTVjNmJhOGY4Yjc4OTc1MjI3M2RjYmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgdm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaykKIAlsM2luZGV4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwKIAkJCQkJCSBzay0mZ3Q7c2tfYm91bmRfZGV2X2lmKTsKIAomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZhbXA7YW9faW5mby0mZ3Q7aGVhZCwgbm9kZSkgewomIzQzOwkJaWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LSZndDtwcmVmaXhsZW4sCiYjNDM7CQkJCSAgIGZhbWlseSwgLTEsIC0xKSkgewomIzQzOwkJCS8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovCiYjNDM7CQkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgbmV4dCwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CiAJCWlmICghdGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktJmd0O3ByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKQogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AtQU8pIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvdGNwX2FvLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBsb29wIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmU6CgpgYGBjCglobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZhbXA7YW9faW5mby0mZ3Q7aGVhZCwgbm9kZSkgewoJCWlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS0mZ3Q7cHJlZml4bGVuLAoJCQkJICAgZmFtaWx5LCAtMSwgLTEpKSB7CgkJCS8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovCgkJCXN5bmNocm9uaXplX3JjdSgpOwoJCQlicmVhazsKCQl9Cgl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXRzZWxmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFRoZSBhZGRlZCBsb29wLCBhcyBJIHNlZSBpdCwgaXMgbW9zdCBsaWtlbHkgZGVzaWduZWQgZm9yIHNvbWUgc29ydCBvZiBrZXkgbG9va3VwIG9yIGNvbmZsaWN0IHJlc29sdXRpb24sIHBhcnRpY3VsYXJseSBhcyB0aGUgY29tbWVudCBhbGx1ZGVzIHRvIGEgcGFpcmluZyB3aXRoIGB0Y3BfaW5ib3VuZF9hb19oYXNoKClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsb29wIGlzICpkb2luZyogd2l0aCB0aGUgYHRjcF9hb19rZXlfY21wYCByZXN1bHQuIEkgYXNzdW1lIGl0JiMzOTtzIGNoZWNraW5nIGZvciBzb21lIHByZS1leGlzdGluZyBhdXRoZW50aWNhdGlvbiBrZXkgb3IgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bGwgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVENQLUFPIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZvciBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBvcHRpb25zIGFyZSBpbml0aWFsaXplZCwgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGZlZWRzIGludG8gc3Vic2VxdWVudCBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIGFuZCBpc29sYXRlIHRoZSBjcml0aWNhbCBkYXRhIGZsb3cuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3BfYW8uaD0yNzg9dm9pZCB0Y3BfYW9fZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjI3OTp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTI4MC12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX3RpbWVfd2FpdChzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3LFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTMzMi1cbmluY2x1ZGUvbmV0L3RjcF9hby5oOjMzMzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0zMzQte1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTE2Olx0dGNwX2FvX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBjb2RlIHNheXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIGB0Y3BfY29ubmVjdF9pbml0YC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gQmVmb3JlIEkgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZSBpbiBkZXRhaWwsIEkgYWx3YXlzIGZpbmQgaXQgdXNlZnVsIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgZm9yIGB0Y3BfYW8uY2AuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgZmVhdHVyZSBmbGFncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEl0JiMzOTtsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCAtIGNvbnRleHQgaXMga2V5LCB5b3Uga25vdy4gVGhlbiBJIGNhbiBkaXZlIGRlZXBlciB3aXRoIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW8ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cdFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVENQX0FPIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfVENQX0FPYCBuZWVkcyB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHBpbnBvaW50IHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgYW5kIGFsc28sIHdoZXJlIHRoZSBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCBiZSBlbmFibGVkIHJlc2lkZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFRDUF9BT2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IHRoZXJlLiBLbm93aW5nIHRoaXMsIGl0IG1ha2VzIG15IGFwcHJvYWNoIGV4dHJlbWVseSBlZmZpY2llbnQuIE5vdyBpdCYjMzk7cyBhIG1hdHRlciBvZiBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgcmV2aWV3aW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkZWZhdWx0IHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVENQX0FPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzQzLVxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xubmV0L2lwdjQvS2NvbmZpZy03NDUtXHRib29sIFwmIzM0O1RDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBUQ1BfQU9gIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgZnVuY3Rpb24uIEJ1dCwgaXMgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb24gSSBzaG91bGQgYmUgbG9va2luZyBhdCByaWdodCBub3c/IExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aHMgZm9yIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucy4gU2hvdWxkIEkgY29uY2VudHJhdGUgZXhjbHVzaXZlbHkgb24gYHRjcF9hb19jb25uZWN0X2luaXRgIGl0c2VsZj8gV2VsbCwgaXQgaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBjb25uZWN0aW9uIGlmIFRDUF9BTyBpcyBhY3RpdmUsIHNvIHRoZSBmcmVxdWVuY3kgaXMgZGVmaW5pdGVseSBhIGNvbmNlcm4uIFdhaXQuLi4gSSBuZWVkIHRvIGJlIGNhcmVmdWw7IGB0Y3BfY29ubmVjdF9pbml0YCBjYWxscyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuCgpBbHJpZ2h0LCBtYXliZSBJIHNob3VsZCBzaGlmdCB0aGUgZm9jdXMgdG8gdGhlIHNwZWNpZmljIFRDUCBBTyBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCB3b3VsZCBiZSBpbXBsZW1lbnRlZC4gT2theSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBgdGNwX2FvX2luZm9fY21kYCwgYHRjcF9hb19zZXRzb2Nrb3B0YCwgYW5kIGB0Y3BfYW9fZ2V0c29ja29wdGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGFuZCBodW50IGZvciB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcywgb3Igb25lcyBzaW1pbGFyLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fLipfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXHRcdFx0aWYgKGtleSlcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XHRcdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVx0XHRcdFx0V1JJVEVfT05DRShpbmZvLVx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNTQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX2FvX2tleV9hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTU4MC1cbm5ldC9pcHY0L3RjcF9hby5jOjE1ODE6c3RhdGljIGludCB0Y3BfYW9fYWRkX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0xNTgyLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTkyNj1zdGF0aWMgaW50IHRjcF9hb19yZXF1aXJlZF92ZXJpZnkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5NDUtXG5uZXQvaXB2NC90Y3BfYW8uYzoxOTQ2OnN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE5NDctXHRcdFx0ICAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM1PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwNDItXHRjYXNlIFRDUF9BT19BRERfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0MzpcdFx0cmV0dXJuIHRjcF9hb19hZGRfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDQtXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NTpcdFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDYtXHRjYXNlIFRDUF9BT19JTkZPOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NzpcdFx0cmV0dXJuIHRjcF9hb19pbmZvX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ4LVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUCBBTykgQ29kZSoqCgpPa2F5LCBzbyBgdGNwX3BhcnNlX2FvYCBpcyB0aGUgaW5pdGlhbCBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGBzZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIFRDUCBBTy4gTGV0JiMzOTtzIHJldmlzaXQgYHRjcF9hb19jb25uZWN0X2luaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCmBgYGMKCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CgkJaWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LSZndDtwcmVmaXhsZW4sCgkJCQkgICBmYW1pbHksIC0xLCAtMSkpIHsKCQkJLyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi8KCQkJc3luY2hyb25pemVfcmN1KCk7CgkJCWJyZWFrOwoJCX0KCX0KYGBgCgpBaGEhIFRoaXMgY29kZSBibG9jayBpbnRyb2R1Y2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaWYgYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBhbHRlcmF0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIHNpZ25pZmljYW50bHksIGJlY2F1c2UgYHN5bmNocm9uaXplX3JjdWAgKmNhbiogYmxvY2ssIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4gR2l2ZW4gdGhhdCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgaW52b2tlZCBvbiBldmVyeSBjb25uZWN0aW9uIGF0dGVtcHQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgaG90IHBhdGguIEhvd2V2ZXIsIGl0IG9ubHkgcGVyZm9ybXMgdGhpcyBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24gaWYgYGFvX2luZm9gIGlzIGFjdHVhbGx5IHByZXNlbnQuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbmFsIHBhdGhzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzY6XHR2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuMTEzNzpcdHtcbjExMzg6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMTEzOTpcdFx0c3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvO1xuMTE0MDpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4xMTQxOlx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjExNDI6XHRcdHN0cnVjdCB0Y3BfYW9fa2V5ICprZXk7XG4xMTQzOlx0XHRpbnQgZmFtaWx5LCBsM2luZGV4O1xuMTE0NDpcdFxuMTE0NTpcdFx0YW9faW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHAtXHUwMDNlYW9faW5mbyxcbjExNDY6XHRcdFx0XHRcdFx0ICAgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG4xMTQ3Olx0XHRpZiAoIWFvX2luZm8pXG4xMTQ4Olx0XHRcdHJldHVybjtcbjExNDk6XHRcbjExNTA6XHRcdC8qIFJlbW92ZSBhbGwga2V5cyB0aGF0IGRvbiYjMzk7dCBtYXRjaCB0aGUgcGVlciAqL1xuMTE1MTpcdFx0ZmFtaWx5ID0gc2stXHUwMDNlc2tfZmFtaWx5O1xuMTE1MjpcdFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKVxuMTE1MzpcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2c2stXHUwMDNlc2tfZGFkZHI7XG4xMTU0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xMTU1Olx0XHRlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4xMTU2Olx0XHRcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcjtcbjExNTc6XHQjZW5kaWZcbjExNTg6XHRcdGVsc2VcbjExNTk6XHRcdFx0cmV0dXJuO1xuMTE2MDpcdFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4xMTYxOlx0XHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4xMTYyOlx0XG4xMTYzOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuMTE2NDpcdFx0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuMTE2NTpcdFx0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4xMTY2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbjExNjc6XHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbjExNjg6XHRcdFx0XHRicmVhaztcbjExNjk6XHRcdFx0fVxuMTE3MDpcdFx0fVxuMTE3MTpcdFxuMTE3MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuMTE3MzpcdFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuMTE3NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHRpZiAoa2V5ID09IGFvX2luZm8tXHUwMDNlY3VycmVudF9rZXkpXG4xMTc3Olx0XHRcdFx0YW9faW5mby1cdTAwM2VjdXJyZW50X2tleSA9IE5VTEw7XG4xMTc4Olx0XHRcdGlmIChrZXkgPT0gYW9faW5mby1cdTAwM2VybmV4dF9rZXkpXG4xMTc5Olx0XHRcdFx0YW9faW5mby1cdTAwM2VybmV4dF9rZXkgPSBOVUxMO1xuMTE4MDpcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmtleS1cdTAwM2Vub2RlKTtcbjExODE6XHRcdFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcdTAwMjZzay1cdTAwM2Vza19vbWVtX2FsbG9jKTtcbjExODI6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2a2V5LVx1MDAzZXJjdSwgdGNwX2FvX2tleV9mcmVlX3JjdSk7XG4xMTgzOlx0XHR9XG4xMTg0Olx0XG4xMTg1Olx0XHRrZXkgPSB0cC1cdTAwM2VhZl9zcGVjaWZpYy1cdTAwM2Vhb19sb29rdXAoc2ssIHNrLCAtMSwgLTEpO1xuMTE4NjpcdFx0aWYgKGtleSkge1xuMTE4NzpcdFx0XHQvKiBpZiBjdXJyZW50X2tleSBvciBybmV4dF9rZXkgd2VyZSBub3QgcHJvdmlkZWQsXG4xMTg4Olx0XHRcdCAqIHVzZSB0aGUgZmlyc3Qga2V5IG1hdGNoaW5nIHRoZSBwZWVyXG4xMTg5Olx0XHRcdCAqL1xuMTE5MDpcdFx0XHRpZiAoIWFvX2luZm8tXHUwMDNlY3VycmVudF9rZXkpXG4xMTkxOlx0XHRcdFx0YW9faW5mby1cdTAwM2VjdXJyZW50X2tleSA9IGtleTtcbjExOTI6XHRcdFx0aWYgKCFhb19pbmZvLVx1MDAzZXJuZXh0X2tleSlcbjExOTM6XHRcdFx0XHRhb19pbmZvLVx1MDAzZXJuZXh0X2tleSA9IGtleTtcbjExOTQ6XHRcdFx0dHAtXHUwMDNldGNwX2hlYWRlcl9sZW4gJiM0Mzs9IHRjcF9hb19sZW5fYWxpZ25lZChrZXkpO1xuMTE5NTpcdFxuMTE5NjpcdFx0XHRhb19pbmZvLVx1MDAzZWxpc24gPSBodG9ubCh0cC1cdTAwM2V3cml0ZV9zZXEpO1xuMTE5NzpcdFx0XHRhb19pbmZvLVx1MDAzZXNuZF9zbmUgPSAwO1xuMTE5ODpcdFx0fSBlbHNlIHtcbjExOTk6XHRcdFx0LyogQ2FuJiMzOTt0IGhhcHBlbjogdGNwX2Nvbm5lY3QoKSB2ZXJpZmllcyB0aGF0IHRoZXJlJiMzOTtzXG4xMjAwOlx0XHRcdCAqIGF0IGxlYXN0IG9uZSB0Y3AtYW8ga2V5IHRoYXQgbWF0Y2hlcyB0aGUgcmVtb3RlIHBlZXIuXG4xMjAxOlx0XHRcdCAqL1xuMTIwMjpcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4xMjAzOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cdTAwM2Vhb19pbmZvLCBOVUxMKTtcbjEyMDQ6XHRcdFx0a2ZyZWUoYW9faW5mbyk7XG4xMjA1Olx0XHR9XG4xMjA2Olx0fVxuMTIwNzpcdFxuMTIwODpcdHZvaWQgdGNwX2FvX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaylcbjEyMDk6XHR7XG4xMjEwOlx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xuMTIxMTpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcbjEyMTI6XHRcbjEyMTM6XHRcdGFvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0Y3Bfc2soc2spLVx1MDAzZWFvX2luZm8sXG4xMjE0Olx0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcbjEyMTU6XHRcdGlmICghYW8pXG4xMjE2Olx0XHRcdHJldHVybjtcbjEyMTc6XHRcbjEyMTg6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksIFx1MDAyNmFvLVx1MDAzZWhlYWQsIG5vZGUsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSlcbjEyMTk6XHRcdFx0dGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhzaywgYW8sIGtleSk7XG4xMjIwOlx0fVxuMTIyMTpcdFxuMTIyMjpcdHZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyMjM6XHR7XG4xMjI0Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xuMTIyNTpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcbjEyMjY6XHRcbjEyMjc6XHRcdGFvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0Y3Bfc2soc2spLVx1MDAzZWFvX2luZm8sXG4xMjI4Olx0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcbjEyMjk6XHRcdGlmICghYW8pXG4xMjMwOlx0XHRcdHJldHVybjtcbjEyMzE6XHRcbjEyMzI6XHRcdC8qIHNrIHdpdGggVENQX1JFUEFJUl9PTiBkb2VzIG5vdCBoYXZlIHNrYiBpbiB0Y3BfZmluaXNoX2Nvbm5lY3QgKi9cbjEyMzM6XHRcdGlmIChza2IpXG4xMjM0Olx0XHRcdFdSSVRFX09OQ0UoYW8tXHUwMDNlcmlzbiwgdGNwX2hkcihza2IpLVx1MDAzZXNlcSk7XG4xMjM1Olx0XHRhby1cdTAwM2VyY3Zfc25lID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGFsdGVyYXRpb24gaXMgd2l0aGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxvb3AsIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBrZXkgbWF0Y2hpbmcgY2hlY2sgYWdhaW5zdCB0aGUgcGVlci4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYCB3aGVuIGEgbWF0Y2ggaXMgZm91bmQuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCYjMzk7cyBzZWUuLi4gYFRDUF9BT2AgaXMgdGhlIG9idmlvdXMgb25lLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QgYW5kIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIGRpdmUgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIGlmIGBUQ1BfQU9gIHJlbGllcyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQ1BfQU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NDMtXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVENQX0FPIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBgY29uZmlnIFRDUF9BT2AgYmxvY2suIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzZXR0aW5ncz8gSSBjYW4mIzM5O3QgcmVhbGx5IG1ha2UgYSBqdWRnbWVudCBvciB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzZWVpbmcgKmV2ZXJ5dGhpbmcqLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgY29tcGF0aWJpbGl0eS4gSnVzdCBrbm93aW5nICp0aGF0KiBUQ1BfQU8gaXMgY29uZmlndXJlZCBpc24mIzM5O3QgbmVhcmx5IGVub3VnaCBpbmZvcm1hdGlvbiB0byBiZSB1c2VmdWwuIEkgbmVlZCBncmFudWxhcml0eS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQ0Olx0Y29uZmlnIFRDUF9BT1xuIDc0NTpcdFx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiA3NDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuIDc0NzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDc0ODpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gNzQ5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc1MDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxuIDc1MTpcdFx0aGVscFxuIDc1MjpcdFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXG4gNzUzOlx0XHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxuIDc1NDpcdFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXG4gNzU1Olx0XHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXG4gNzU2Olx0XG4gNzU3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzU4Olx0XG4gNzU5Olx0Y29uZmlnIFRDUF9NRDVTSUdcbiA3NjA6XHRcdGJvb2wgXCYjMzQ7VENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVwmIzM0O1xuIDc2MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfTUQ1XG4gNzYyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc2MzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1BfQU8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGBUQ1BfQU9gLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBJbml0aWFsbHksIEkgdGhvdWdodCBJJiMzOTtkIG5lZWQgdG8gdGFyZ2V0IHRoZXNlIHN5bWJvbHM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4KCkhvbGQgb24sIHRob3VnaC4gYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfY29ubmVjdF9pbml0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgdGNwX3Y0X2Nvbm5lY3RgIGFuZCBgdGNwX3Y2X2Nvbm5lY3RgLiBUaGF0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBpdCBvbmx5ICpkb2VzKiBzb21ldGhpbmcgaWYgYGFvX2luZm9gIGlzIHByZXNlbnQsIHJpZ2h0PyBNeSBpbml0aWFsIGluY2xpbmF0aW9uIHdhcyB0byBpbmNsdWRlIGl0IGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBidXQgSSBuZWVkIHRvIGJlIHN0cmF0ZWdpYy4gSXQgbWlnaHQgc2tldyBteSBmdXp6aW5nIHRvd2FyZHMgYWxsIGNvbm5lY3RzIGlmIEkgZm9jdXMgdGhlcmUgYWxvbmUuCgpgdGNwX3BhcnNlX2FvYCBpcyB0aGUgYHNldHNvY2tvcHRgIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgc29saWQgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGUgb3RoZXIgY2hvaWNlcyBhcmUgZ29vZC4gTGV0JiMzOTtzIHNlZSBpZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgc3RhdGljLiBOb3BlLCBpdCYjMzk7cyBub3QuIEkgY2FuIGluY2x1ZGUgaXQuIE9rYXksIG9yaWdpbmFsIHBsYW4gd2FzIHRvIGluY2x1ZGUgYHRjcF9hb19jb25uZWN0X2luaXRgLCBgdGNwX3BhcnNlX2FvYCwgYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgLgoKSG93ZXZlciwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGNhbGxlZCBvbiAqZXZlcnkqIGNvbm5lY3QuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgLgoKQWZ0ZXIgcmUtZXZhbHVhdGluZyB0aGUgb3B0aW9ucywgaXQgc2VlbXMgYmVzdCB0byBqdXN0IHRhcmdldCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyBJIG5lZWQgdG8gY29uc2lkZXIuIE5vcGUsIGBUQ1BfQU9gIGRlcGVuZHMgb24gYDY0QklUYCwgYnV0IHRoYXQmIzM5O3MgaXQuIFNvIGBUQ1BfQU9gIGFsb25lIGlzIHN1ZmZpY2llbnQuCgpMZXQmIzM5O3Mgc3VtbWFyaXplOgotICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoQmVjYXVzZSBvZiB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGFkZGVkIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB1bmRlciBzcGVjaWZpYyBrZXkgY29uZGl0aW9ucy4gVGhpcyBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gaW1wYWN0IGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcuKQotICAgKipGb2N1c1N5bWJvbHM6IHRjcF9hb19jb25uZWN0X2luaXQsIHRjcF9wYXJzZV9hbyoqIChLZWVwaW5nIHRoZSBjaG9pY2VzIHRvIG5vbi1zdGF0aWMsIEFQSS1lbnRyeXBvaW50IGZ1bmN0aW9ucy4pCi0gICAqKkVuYWJsZUNvbmZpZ3M6IFRDUF9BTyoqCgpXYWl0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBzeW1ib2xzIGFyZSBhcHByb3ByaWF0ZS4gYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBpbnRlcm5hbCBoZWxwZXJzLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRob3NlICh0aGUgcHJvbXB0IHJlY29tbWVuZHMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucykuIExldCYjMzk7cyBkb3VibGUtY2hlY2suIFl1cCwgdGhleSYjMzk7cmUgc3RhdGljLgoKU28sIEkgd2lsbCBzdGljayB3aXRoIHRoZSB1cGRhdGVkOiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHRjcF9hb18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTYxNj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9oZWFkZXIoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTY0NC1cbm5ldC9pcHY0L3RjcF9hby5jOjY0NTppbnQgdGNwX2FvX2hhc2hfaGRyKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIGNoYXIgKmFvX2hhc2gsXG5uZXQvaXB2NC90Y3BfYW8uYy02NDYtXHRcdCAgICBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCBjb25zdCB1OCAqdGtleSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz02ODI9c3RhdGljIHZvaWQgdGNwX2FvX2hhc2hfc2tiX2RhdGEoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTcxMi1cbm5ldC9pcHY0L3RjcF9hby5jOjcxMzppbnQgdGNwX2FvX2hhc2hfc2tiKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy03MTQtXHRcdCAgICBjaGFyICphb19oYXNoLCBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTc3Mj1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTc4MS1cbm5ldC9pcHY0L3RjcF9hby5jOjc4MjppbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX2FvLmMtNzgzLVx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwX2FvX2hkciAqYW9oLCBpbnQgbDNpbmRleCwgdTMyIHNlcSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xMjIyPXZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQwLVxubmV0L2lwdjQvdGNwX2FvLmM6MTI0MTppbnQgdGNwX2FvX2NvcHlfYWxsX21hdGNoaW5nKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxubmV0L2lwdjQvdGNwX2FvLmMtMTI0Mi1cdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDk0PXN0YXRpYyBpbnQgdGNwX2FvX2NvcHlfbWt0c190b191c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMjk3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjI5ODppbnQgdGNwX2FvX2dldF9ta3RzKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTIyOTkte1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIzMTAtXG5uZXQvaXB2NC90Y3BfYW8uYzoyMzExOmludCB0Y3BfYW9fZ2V0X3NvY2tfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEyLXtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzY1LVxubmV0L2lwdjQvdGNwX2FvLmM6MjM2NjppbnQgdGNwX2FvX3NldF9yZXBhaXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxubmV0L2lwdjQvdGNwX2FvLmMtMjM2Ny17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMC1cbm5ldC9pcHY0L3RjcF9hby5jOjI0MDE6aW50IHRjcF9hb19nZXRfcmVwYWlyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTI0MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4MgoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBBTyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGB0Y3BfcGFyc2VfYW9gIGlzbiYjMzk7dCBzaG93aW5nIHVwIGluIHRoZSBpbml0aWFsIHN5bWJvbCBsaXN0IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBtYXRjaCB0aGUgcmVnZXggYF5pbnQgdGNwX2FvXy4qYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYzogYGludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKWAuIEdvb2QuIFRoaXMgY29uZmlybXMgdGhhdCBib3RoIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBhbmQgYHRjcF9wYXJzZV9hb2AgYXJlIHZhbGlkIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZXkgd2lsbCBib3RoIGJlIGluc3RydW1lbnRhbC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHRjcF9hb19jb25uZWN0X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBUQ1AgQU8ga2V5cy4gVGhpcyBsb29wIGlzIG1lYW50IHRvIGNoZWNrIGZvciBhIG1hdGNoIGJldHdlZW4gdGhlIGxvY2FsIGFuZCBwZWVyIGtleXMuIENyaXRpY2FsbHksIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGl0IHRoZW4gY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBtb2RpZmljYXRpb24gdG8gaG93IHRoZSBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBwcm9jZWVkcywgaW1wYWN0aW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcG90ZW50aWFsbHkgdGhlIHRpbWluZyBvZiBzcGVjaWZpYyBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZSB3aWxsIGJlIGhpdCB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIHRoZSBzeXN0ZW0uCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSSYjMzk7bGwgdXNlIGBUQ1BfQU9gIGFzIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcyB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIGRpcmVjdCBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYXNzb2NpYXRlZCB0aW1pbmcgaW1wYWN0cyB0byBtYWtlIGl0IGV4cGxpY2l0LgoKSSYjMzk7bGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9hb19jb25uZWN0X2luaXQmIzM0OywKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byBhZGQgYSBsb29wIHRoYXQgY2hlY2tzIGlmIGFueSBUQ1AgQU8ga2V5IG1hdGNoZXMgdGhlIHBlZXIuIElmIGEgbWF0Y2ggaXMgZm91bmQsIGl0IGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBkdXJpbmcgVENQIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uIEl0IGlzIHJlYWNoYWJsZSB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uYwppbmRleCBlNGVjNjBhMzM0OTYzLi41MDk0MjY3NDQ3YWVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYW8uYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogCWwzaW5kZXggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfYnlfaW5kZXgoc29ja19uZXQoc2spLAogCQkJCQkJIHNrLSZndDtza19ib3VuZF9kZXZfaWYpOwogCiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CiYjNDM7CQlpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktJmd0O3ByZWZpeGxlbiwKJiM0MzsJCQkJICAgZmFtaWx5LCAtMSwgLTEpKSB7CiYjNDM7CQkJLyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi8KJiM0MzsJCQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBuZXh0LCAmYW1wO2FvX2luZm8tJmd0O2hlYWQsIG5vZGUpIHsKIAkJaWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS0mZ3Q7cHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpCiAJCQljb250aW51ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbG9vcCBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgc2VlIGl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIGBhb19pbmZvLSZndDtoZWFkYCB1c2luZyBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLCBhbmQgaW5zaWRlIHRoZSBsb29wLCBpdCYjMzk7cyBjYWxsaW5nIGB0Y3BfYW9fa2V5X2NtcGAgdG8gY29tcGFyZSBhIGtleS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgd2hpY2ggc3VnZ2VzdHMgYSBrZXkgY29uZmxpY3QgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgYHN5bmNocm9uaXplX3JjdSgpYCBpcyBjYWxsZWQsIGFuZCB0aGUgbG9vcCBicmVha3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBiZSBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIGZpeC4gR2l2ZW4gdGhlIGNvbnRleHQgYW5kIHRoZSB1c2Ugb2YgYHN5bmNocm9uaXplX3JjdSgpYCwgbXkgZ3V0IHNheXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpLCBsaWtlbHkgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgdXNlLWFmdGVyLWZyZWUgb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIG1hbmFnaW5nIFRDUC1BTyBrZXlzLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBvcmRlcmluZyBtZW1vcnkgYWNjZXNzZXMuCgpJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm90aGluZyYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0IGFwcGVhcnMgdG8gYmUgYSBmb2N1c2VkIGFkZGl0aW9uIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhIGZvY3VzZWQgZml4IGlzIHVzdWFsbHkgdGhlIGJlc3QgYXBwcm9hY2guCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbG9vcCBhbmQgY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGJ1dCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fY29ubmVjdF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9MTExOD1zdGF0aWMgaW50IHRjcF9hb19jYWNoZV90cmFmZmljX2tleXMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTExMzUtXG5uZXQvaXB2NC90Y3BfYW8uYzoxMTM2OnZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM3LXtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xODAwPXN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE4NDQtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXG5uZXQvaXB2NC90Y3BfYW8uYzoxODQ1Olx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1Rcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDYtXHQgKiBpZiB0aGVyZSYjMzk7cyBhbnkuXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTk0Nj1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTk4OC1cdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9wb3J0L1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTk4OTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTkwLVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMga2luZCBvZiBmaXggdXN1YWxseSBzY3JlYW1zICYjMzQ7S0FTQU4gZm91bmQgc29tZXRoaW5nISYjMzQ7IGFuZCBpcyBsaWtlbHkgcmVzb2x2aW5nIGFuIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLiBJJiMzOTttIHF1aXRlIGNvbmZpZGVudCB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIHNpdHVhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgaXMgcHJlc2VudCBoZXJlLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIEtBU0FOIG1pdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDc6NTcuMjIzMDEyNjU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTQxNDc4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ3OjU3LjIyMzAxODY4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4MTI1NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXFxuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXFxuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRsM2luZGV4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X2J5X2luZGV4KHNvY2tfbmV0KHNrKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbiBcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCBcXHUwMDI2YW9faW5mby1cXHUwMDNlaGVhZCwgbm9kZSkge1xcbitcXHRcXHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXFx1MDAzZXByZWZpeGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XFxuK1xcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovXFxuK1xcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgbmV4dCwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cXHUwMDNlcHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0Nzo1Ny42MzI2ODY0ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzUxNzI0NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYW9fY29ubmVjdF9pbml0XCIsXG4gICAgXCJ0Y3BfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uY1xuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYW8uY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuK1x0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuK1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4rXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbitcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDc6NTcuNjMyNjg4NTc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODYxMDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUC1BTykgQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC90Y3BfYW8uY2AsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGxvb3Agd2l0aGluIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGlzIG9uZTpcblxuYGBgY1xuXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuXHRcdGlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cdTAwM2VwcmVmaXhsZW4sXG5cdFx0XHRcdCAgIGZhbWlseSwgLTEsIC0xKSkge1xuXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cblx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXRzZWxmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFRoZSBhZGRlZCBsb29wLCBhcyBJIHNlZSBpdCwgaXMgbW9zdCBsaWtlbHkgZGVzaWduZWQgZm9yIHNvbWUgc29ydCBvZiBrZXkgbG9va3VwIG9yIGNvbmZsaWN0IHJlc29sdXRpb24sIHBhcnRpY3VsYXJseSBhcyB0aGUgY29tbWVudCBhbGx1ZGVzIHRvIGEgcGFpcmluZyB3aXRoIGB0Y3BfaW5ib3VuZF9hb19oYXNoKClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsb29wIGlzICpkb2luZyogd2l0aCB0aGUgYHRjcF9hb19rZXlfY21wYCByZXN1bHQuIEkgYXNzdW1lIGl0J3MgY2hlY2tpbmcgZm9yIHNvbWUgcHJlLWV4aXN0aW5nIGF1dGhlbnRpY2F0aW9uIGtleSBvciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIFRDUC1BTyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDIuMTMxMzAzMDQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTgwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19jb25uZWN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTExOD1zdGF0aWMgaW50IHRjcF9hb19jYWNoZV90cmFmZmljX2tleXMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNS1cXG5uZXQvaXB2NC90Y3BfYW8uYzoxMTM2OnZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xODAwPXN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTg0NC1cXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDYtXFx0ICogaWYgdGhlcmUncyBhbnkuXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xOTQ2PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL3BvcnQvVlJGL2V0YyksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTk4OTpcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbm5ldC9pcHY0L3RjcF9hby5jLTE5OTAtXFx0ICogaWYgdGhlcmUncyBhbnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjAyLjE3ODQ5MDgyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTA5NjM2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgR2VuZXNpcyBvZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZm9yIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50cyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBvcHRpb25zIGFyZSBpbml0aWFsaXplZCwgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGZlZWRzIGludG8gc3Vic2VxdWVudCBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIGFuZCBpc29sYXRlIHRoZSBjcml0aWNhbCBkYXRhIGZsb3cuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODowNC44ODk0NTgwODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDY5MjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fY29ubmVjdF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTI3OD12b2lkIHRjcF9hb19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjI3OTp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yODAtdm9pZCB0Y3BfYW9fc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX3RpbWVfd2FpdChzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMzMyLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjMzMzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMzM0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTExMzUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9hby5jLTExMzcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDQtXFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxcbm5ldC9pcHY0L3RjcF9hby5jOjE4NDU6XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVxcdCAqIGlmIHRoZXJlJ3MgYW55Llxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTk0Nj1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTg4LVxcdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9wb3J0L1ZSRi9ldGMpLFxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTkwLVxcdCAqIGlmIHRoZXJlJ3MgYW55Llxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQxMDE9c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDExNjpcXHR0Y3BfYW9fY29ubmVjdF9pbml0KHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDYuNzYwMTU1MDA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4MDUwOTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUCBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIGNvZGUgc2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCB3aXRoaW4gYHRjcF9jb25uZWN0X2luaXRgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEJlZm9yZSBJIHN0YXJ0IGRpc3NlY3RpbmcgdGhlIGNvZGUgaW4gZGV0YWlsLCBJIGFsd2F5cyBmaW5kIGl0IHVzZWZ1bCB0byBjaGVjayB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGVudHJ5IGZvciBgdGNwX2FvLmNgLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYW55IHJlbGV2YW50IGZlYXR1cmUgZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJdCdsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCAtIGNvbnRleHQgaXMga2V5LCB5b3Uga25vdy4gVGhlbiBJIGNhbiBkaXZlIGRlZXBlciB3aXRoIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjA5LjM0MDY2Njk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Nz1vYmotJChDT05GSUdfWEZSTSkgKz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cXHRcXHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgKz0gdGNwX2FvLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDkuMzg4MTQyMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NTE1MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVENQX0FPIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSBzZWUgYENPTkZJR19UQ1BfQU9gIG5lZWRzIHRvIGJlIGVuYWJsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBwaW5wb2ludCB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCBhbHNvLCB3aGVyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgYmUgZW5hYmxlZCByZXNpZGUuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFRDUF9BT2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IHRoZXJlLiBLbm93aW5nIHRoaXMsIGl0IG1ha2VzIG15IGFwcHJvYWNoIGV4dHJlbWVseSBlZmZpY2llbnQuIE5vdyBpdCdzIGEgbWF0dGVyIG9mIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCByZXZpZXdpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGRlZmF1bHQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoxMi4zNTMyOTg1MjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjIwNDQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX0FPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzQzLVxcbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjEyLjYwOTUwODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTA3NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUF9BTyBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFRDUF9BT2Ag4oCTIHRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgYHRjcF9hb19jb25uZWN0X2luaXRgIGZ1bmN0aW9uLiBCdXQsIGlzIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgcmlnaHQgbm93PyBMZXQncyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aHMgZm9yIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucy4gU2hvdWxkIEkgY29uY2VudHJhdGUgZXhjbHVzaXZlbHkgb24gYHRjcF9hb19jb25uZWN0X2luaXRgIGl0c2VsZj8gV2VsbCwgaXQgaXNuJ3Qgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgb24gZXZlcnkgY29ubmVjdGlvbiBpZiBUQ1BfQU8gaXMgYWN0aXZlLCBzbyB0aGUgZnJlcXVlbmN5IGlzIGRlZmluaXRlbHkgYSBjb25jZXJuLiBXYWl0Li4uIEkgbmVlZCB0byBiZSBjYXJlZnVsOyBgdGNwX2Nvbm5lY3RfaW5pdGAgY2FsbHMgYHRjcF9hb19jb25uZWN0X2luaXRgLlxuXG5BbHJpZ2h0LCBtYXliZSBJIHNob3VsZCBzaGlmdCB0aGUgZm9jdXMgdG8gdGhlIHNwZWNpZmljIFRDUCBBTyBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCB3b3VsZCBiZSBpbXBsZW1lbnRlZC4gT2theSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBgdGNwX2FvX2luZm9fY21kYCwgYHRjcF9hb19zZXRzb2Nrb3B0YCwgYW5kIGB0Y3BfYW9fZ2V0c29ja29wdGAuIExldCdzIHRha2UgYSBsb29rIGluIGBuZXQvaXB2NC90Y3BfYW8uY2AgYW5kIGh1bnQgZm9yIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzLCBvciBvbmVzIHNpbWlsYXIuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoxNy4yNzQ1ODg5MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjk4Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb18uKl9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cXHRcXHRcXHRpZiAoa2V5KVxcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpbmZvLVxcdTAwM2VjdXJyZW50X2tleSwga2V5KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXFx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5OlxcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTU0OT1zdGF0aWMgc3RydWN0IHRjcF9hb19rZXkgKnRjcF9hb19rZXlfYWxsb2Moc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTU4MC1cXG5uZXQvaXB2NC90Y3BfYW8uYzoxNTgxOnN0YXRpYyBpbnQgdGNwX2FvX2FkZF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE1ODItXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5MjY9c3RhdGljIGludCB0Y3BfYW9fcmVxdWlyZWRfdmVyaWZ5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE5NDUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MTk0NjpzdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk0Ny1cXHRcXHRcXHQgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzNT1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDItXFx0Y2FzZSBUQ1BfQU9fQUREX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQzOlxcdFxcdHJldHVybiB0Y3BfYW9fYWRkX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0NC1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDU6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ2LVxcdGNhc2UgVENQX0FPX0lORk86XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NzpcXHRcXHRyZXR1cm4gdGNwX2FvX2luZm9fY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ4LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjE3LjMxODg5MjkxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM1MjU2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQIEFPKSBDb2RlKipcblxuT2theSwgc28gYHRjcF9wYXJzZV9hb2AgaXMgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgc2V0c29ja29wdGAgY2FsbHMgcmVsYXRlZCB0byBUQ1AgQU8uIExldCdzIHJldmlzaXQgYHRjcF9hb19jb25uZWN0X2luaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5gYGBjXG5cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkLCBub2RlKSB7XG5cdFx0aWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbixcblx0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG5cdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9pbmJvdW5kX2FvX2hhc2goKSAqL1xuXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbmBgYFxuXG5BaGEhIFRoaXMgY29kZSBibG9jayBpbnRyb2R1Y2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaWYgYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGFsdGVyYXRpb24gaGFzIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgc2lnbmlmaWNhbnRseSwgYmVjYXVzZSBgc3luY2hyb25pemVfcmN1YCAqY2FuKiBibG9jaywgd2hpY2ggbWFrZXMgaXQgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4gR2l2ZW4gdGhhdCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgaW52b2tlZCBvbiBldmVyeSBjb25uZWN0aW9uIGF0dGVtcHQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgaG90IHBhdGguIEhvd2V2ZXIsIGl0IG9ubHkgcGVyZm9ybXMgdGhpcyBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24gaWYgYGFvX2luZm9gIGlzIGFjdHVhbGx5IHByZXNlbnQuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbmFsIHBhdGhzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoyMi41NTQxNTIxNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTM2OlxcdHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4xMTM5OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbztcXG4xMTQwOlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xcbjExNDE6XFx0XFx0dW5pb24gdGNwX2FvX2FkZHIgKmFkZHI7XFxuMTE0MjpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5O1xcbjExNDM6XFx0XFx0aW50IGZhbWlseSwgbDNpbmRleDtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0YW9faW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHAtXFx1MDAzZWFvX2luZm8sXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG4xMTQ3OlxcdFxcdGlmICghYW9faW5mbylcXG4xMTQ4OlxcdFxcdFxcdHJldHVybjtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0LyogUmVtb3ZlIGFsbCBrZXlzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHBlZXIgKi9cXG4xMTUxOlxcdFxcdGZhbWlseSA9IHNrLVxcdTAwM2Vza19mYW1pbHk7XFxuMTE1MjpcXHRcXHRpZiAoZmFtaWx5ID09IEFGX0lORVQpXFxuMTE1MzpcXHRcXHRcXHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXFx1MDAyNnNrLVxcdTAwM2Vza19kYWRkcjtcXG4xMTU0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjExNTU6XFx0XFx0ZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbjExNTY6XFx0XFx0XFx0YWRkciA9ICh1bmlvbiB0Y3BfYW9fYWRkciAqKVxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHI7XFxuMTE1NzpcXHQjZW5kaWZcXG4xMTU4OlxcdFxcdGVsc2VcXG4xMTU5OlxcdFxcdFxcdHJldHVybjtcXG4xMTYwOlxcdFxcdGwzaW5kZXggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfYnlfaW5kZXgoc29ja19uZXQoc2spLFxcbjExNjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFxcdTAwMjZhb19pbmZvLVxcdTAwM2VoZWFkLCBub2RlKSB7XFxuMTE2NDpcXHRcXHRcXHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXFx1MDAzZXByZWZpeGxlbixcXG4xMTY1OlxcdFxcdFxcdFxcdFxcdCAgIGZhbWlseSwgLTEsIC0xKSkge1xcbjExNjY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cXG4xMTY3OlxcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbjExNjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2OTpcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBuZXh0LCBcXHUwMDI2YW9faW5mby1cXHUwMDNlaGVhZCwgbm9kZSkge1xcbjExNzM6XFx0XFx0XFx0aWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cXHUwMDNlcHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpXFxuMTE3NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0aWYgKGtleSA9PSBhb19pbmZvLVxcdTAwM2VjdXJyZW50X2tleSlcXG4xMTc3OlxcdFxcdFxcdFxcdGFvX2luZm8tXFx1MDAzZWN1cnJlbnRfa2V5ID0gTlVMTDtcXG4xMTc4OlxcdFxcdFxcdGlmIChrZXkgPT0gYW9faW5mby1cXHUwMDNlcm5leHRfa2V5KVxcbjExNzk6XFx0XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlcm5leHRfa2V5ID0gTlVMTDtcXG4xMTgwOlxcdFxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlbm9kZSk7XFxuMTE4MTpcXHRcXHRcXHRhdG9taWNfc3ViKHRjcF9hb19zaXplb2Zfa2V5KGtleSksIFxcdTAwMjZzay1cXHUwMDNlc2tfb21lbV9hbGxvYyk7XFxuMTE4MjpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2a2V5LVxcdTAwM2VyY3UsIHRjcF9hb19rZXlfZnJlZV9yY3UpO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRrZXkgPSB0cC1cXHUwMDNlYWZfc3BlY2lmaWMtXFx1MDAzZWFvX2xvb2t1cChzaywgc2ssIC0xLCAtMSk7XFxuMTE4NjpcXHRcXHRpZiAoa2V5KSB7XFxuMTE4NzpcXHRcXHRcXHQvKiBpZiBjdXJyZW50X2tleSBvciBybmV4dF9rZXkgd2VyZSBub3QgcHJvdmlkZWQsXFxuMTE4ODpcXHRcXHRcXHQgKiB1c2UgdGhlIGZpcnN0IGtleSBtYXRjaGluZyB0aGUgcGVlclxcbjExODk6XFx0XFx0XFx0ICovXFxuMTE5MDpcXHRcXHRcXHRpZiAoIWFvX2luZm8tXFx1MDAzZWN1cnJlbnRfa2V5KVxcbjExOTE6XFx0XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlY3VycmVudF9rZXkgPSBrZXk7XFxuMTE5MjpcXHRcXHRcXHRpZiAoIWFvX2luZm8tXFx1MDAzZXJuZXh0X2tleSlcXG4xMTkzOlxcdFxcdFxcdFxcdGFvX2luZm8tXFx1MDAzZXJuZXh0X2tleSA9IGtleTtcXG4xMTk0OlxcdFxcdFxcdHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbiArPSB0Y3BfYW9fbGVuX2FsaWduZWQoa2V5KTtcXG4xMTk1OlxcdFxcbjExOTY6XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlbGlzbiA9IGh0b25sKHRwLVxcdTAwM2V3cml0ZV9zZXEpO1xcbjExOTc6XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlc25kX3NuZSA9IDA7XFxuMTE5ODpcXHRcXHR9IGVsc2Uge1xcbjExOTk6XFx0XFx0XFx0LyogQ2FuJ3QgaGFwcGVuOiB0Y3BfY29ubmVjdCgpIHZlcmlmaWVzIHRoYXQgdGhlcmUnc1xcbjEyMDA6XFx0XFx0XFx0ICogYXQgbGVhc3Qgb25lIHRjcC1hbyBrZXkgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgcGVlci5cXG4xMjAxOlxcdFxcdFxcdCAqL1xcbjEyMDI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbjEyMDM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVxcdTAwM2Vhb19pbmZvLCBOVUxMKTtcXG4xMjA0OlxcdFxcdFxcdGtmcmVlKGFvX2luZm8pO1xcbjEyMDU6XFx0XFx0fVxcbjEyMDY6XFx0fVxcbjEyMDc6XFx0XFxuMTIwODpcXHR2b2lkIHRjcF9hb19lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2spXFxuMTIwOTpcXHR7XFxuMTIxMDpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xcbjEyMTE6XFx0XFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0YW8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRjcF9zayhzayktXFx1MDAzZWFvX2luZm8sXFxuMTIxNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG4xMjE1OlxcdFxcdGlmICghYW8pXFxuMTIxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTIxNzpcXHRcXG4xMjE4OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksIFxcdTAwMjZhby1cXHUwMDNlaGVhZCwgbm9kZSwgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKVxcbjEyMTk6XFx0XFx0XFx0dGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhzaywgYW8sIGtleSk7XFxuMTIyMDpcXHR9XFxuMTIyMTpcXHRcXG4xMjIyOlxcdHZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjIzOlxcdHtcXG4xMjI0OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW87XFxuMTIyNTpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5O1xcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRhbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGNwX3NrKHNrKS1cXHUwMDNlYW9faW5mbyxcXG4xMjI4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xcbjEyMjk6XFx0XFx0aWYgKCFhbylcXG4xMjMwOlxcdFxcdFxcdHJldHVybjtcXG4xMjMxOlxcdFxcbjEyMzI6XFx0XFx0Lyogc2sgd2l0aCBUQ1BfUkVQQUlSX09OIGRvZXMgbm90IGhhdmUgc2tiIGluIHRjcF9maW5pc2hfY29ubmVjdCAqL1xcbjEyMzM6XFx0XFx0aWYgKHNrYilcXG4xMjM0OlxcdFxcdFxcdFdSSVRFX09OQ0UoYW8tXFx1MDAzZXJpc24sIHRjcF9oZHIoc2tiKS1cXHUwMDNlc2VxKTtcXG4xMjM1OlxcdFxcdGFvLVxcdTAwM2VyY3Zfc25lID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjIuNTU0MzIwMzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjI3MTM3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGFsdGVyYXRpb24gaXMgd2l0aGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxvb3AsIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBrZXkgbWF0Y2hpbmcgY2hlY2sgYWdhaW5zdCB0aGUgcGVlci4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYCB3aGVuIGEgbWF0Y2ggaXMgZm91bmQuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0J3Mgc2VlLi4uIGBUQ1BfQU9gIGlzIHRoZSBvYnZpb3VzIG9uZSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QgYW5kIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIEknbGwgZGl2ZSBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgaWYgYFRDUF9BT2AgcmVsaWVzIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjUuODE3MDM2MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTQ4NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQ1BfQU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03NDMtXFxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xcbm5ldC9pcHY0L0tjb25maWctNzQ1LVxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjUuODY2MTg4ODQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjEzMzEyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBgY29uZmlnIFRDUF9BT2AgYmxvY2suIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzZXR0aW5ncz8gSSBjYW4ndCByZWFsbHkgbWFrZSBhIGp1ZGdtZW50IG9yIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aXRob3V0IHNlZWluZyAqZXZlcnl0aGluZyouIEkgbmVlZCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBKdXN0IGtub3dpbmcgKnRoYXQqIFRDUF9BTyBpcyBjb25maWd1cmVkIGlzbid0IG5lYXJseSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYmUgdXNlZnVsLiBJIG5lZWQgZ3JhbnVsYXJpdHkuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoyOC42Mjc1MjMwOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDQ6XFx0Y29uZmlnIFRDUF9BT1xcbiA3NDU6XFx0XFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcbiA3NDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXFxuIDc0NzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuIDc0ODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gNzQ5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuIDc1MDpcXHRcXHRkZXBlbmRzIG9uIDY0QklUICMgc2VxLW51bWJlciBleHRlbnNpb24gbmVlZHMgV1JJVEVfT05DRSh1NjQpXFxuIDc1MTpcXHRcXHRoZWxwXFxuIDc1MjpcXHRcXHQgIFRDUC1BTyBzcGVjaWZpZXMgdGhlIHVzZSBvZiBzdHJvbmdlciBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzIChNQUNzKSxcXG4gNzUzOlxcdFxcdCAgcHJvdGVjdHMgYWdhaW5zdCByZXBsYXlzIGZvciBsb25nLWxpdmVkIFRDUCBjb25uZWN0aW9ucywgYW5kXFxuIDc1NDpcXHRcXHQgIHByb3ZpZGVzIG1vcmUgZGV0YWlscyBvbiB0aGUgYXNzb2NpYXRpb24gb2Ygc2VjdXJpdHkgd2l0aCBUQ1BcXG4gNzU1OlxcdFxcdCAgY29ubmVjdGlvbnMgdGhhbiBUQ1AgTUQ1IChTZWUgUkZDNTkyNSlcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA3NTg6XFx0XFxuIDc1OTpcXHRjb25maWcgVENQX01ENVNJR1xcbiA3NjA6XFx0XFx0Ym9vbCBcXFwiVENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVxcXCJcXG4gNzYxOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX01ENVxcbiA3NjI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gNzYzOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjguNjI3NjA4Nzg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzY1MTA2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1BfQU8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBgVENQX0FPYCwgYW5kIHRoYXQncyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBJbml0aWFsbHksIEkgdGhvdWdodCBJJ2QgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3ltYm9sczogYHRjcF9hb19jb25uZWN0X2luaXRgLCBgdGNwX3BhcnNlX2FvYCwgYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgLlxuXG5Ib2xkIG9uLCB0aG91Z2guIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhhdCdzIGEgaG90IHBhdGgsIGJ1dCBpdCBvbmx5ICpkb2VzKiBzb21ldGhpbmcgaWYgYGFvX2luZm9gIGlzIHByZXNlbnQsIHJpZ2h0PyBNeSBpbml0aWFsIGluY2xpbmF0aW9uIHdhcyB0byBpbmNsdWRlIGl0IGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBidXQgSSBuZWVkIHRvIGJlIHN0cmF0ZWdpYy4gSXQgbWlnaHQgc2tldyBteSBmdXp6aW5nIHRvd2FyZHMgYWxsIGNvbm5lY3RzIGlmIEkgZm9jdXMgdGhlcmUgYWxvbmUuXG5cbmB0Y3BfcGFyc2VfYW9gIGlzIHRoZSBgc2V0c29ja29wdGAgZW50cnkgcG9pbnQuIFRoYXQncyBhIHNvbGlkIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlIG90aGVyIGNob2ljZXMgYXJlIGdvb2QuIExldCdzIHNlZSBpZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgc3RhdGljLiBOb3BlLCBpdCdzIG5vdC4gSSBjYW4gaW5jbHVkZSBpdC4gT2theSwgb3JpZ2luYWwgcGxhbiB3YXMgdG8gaW5jbHVkZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBhbmQgYHRjcF9hb19pbmZvX2NtZGAuXG5cbkhvd2V2ZXIsIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBjb25uZWN0LiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGB0Y3BfYW9fY29ubmVjdF9pbml0YC5cblxuQWZ0ZXIgcmUtZXZhbHVhdGluZyB0aGUgb3B0aW9ucywgaXQgc2VlbXMgYmVzdCB0byBqdXN0IHRhcmdldCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyLiBOb3BlLCBgVENQX0FPYCBkZXBlbmRzIG9uIGA2NEJJVGAsIGJ1dCB0aGF0J3MgaXQuIFNvIGBUQ1BfQU9gIGFsb25lIGlzIHN1ZmZpY2llbnQuXG5cbkxldCdzIHN1bW1hcml6ZTpcbi0gICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIChCZWNhdXNlIG9mIHRoZSBgc3luY2hyb25pemVfcmN1KClgIGNhbGwgYWRkZWQgaW4gYHRjcF9hb19jb25uZWN0X2luaXRgIHVuZGVyIHNwZWNpZmljIGtleSBjb25kaXRpb25zLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBpbXBhY3QgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZy4pXG4tICAgKipGb2N1c1N5bWJvbHM6IHRjcF9hb19jb25uZWN0X2luaXQsIHRjcF9wYXJzZV9hbyoqIChLZWVwaW5nIHRoZSBjaG9pY2VzIHRvIG5vbi1zdGF0aWMsIEFQSS1lbnRyeXBvaW50IGZ1bmN0aW9ucy4pXG4tICAgKipFbmFibGVDb25maWdzOiBUQ1BfQU8qKlxuXG5XYWl0LCBsZXQncyBtYWtlIHN1cmUgdGhlIHN5bWJvbHMgYXJlIGFwcHJvcHJpYXRlLiBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBhbmQgYHRjcF9hb19pbmZvX2NtZGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkncmUgaW50ZXJuYWwgaGVscGVycywgYW5kIEkgd2FudCB0byBhdm9pZCB0aG9zZSAodGhlIHByb21wdCByZWNvbW1lbmRzIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMpLiBMZXQncyBkb3VibGUtY2hlY2suIFl1cCwgdGhleSdyZSBzdGF0aWMuXG5cblNvLCBJIHdpbGwgc3RpY2sgd2l0aCB0aGUgdXBkYXRlZDogYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYC4gVGhhdCdzIGEgbXVjaCBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MzkuMzkyNzE4NDAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyMzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHRjcF9hb18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTYxNj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9oZWFkZXIoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtNjQ0LVxcbm5ldC9pcHY0L3RjcF9hby5jOjY0NTppbnQgdGNwX2FvX2hhc2hfaGRyKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIGNoYXIgKmFvX2hhc2gsXFxubmV0L2lwdjQvdGNwX2FvLmMtNjQ2LVxcdFxcdCAgICBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCBjb25zdCB1OCAqdGtleSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTY4Mj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9za2JfZGF0YShzdHJ1Y3QgdGNwX2FvX21hY19jdHggKm1hY19jdHgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy03MTItXFxubmV0L2lwdjQvdGNwX2FvLmM6NzEzOmludCB0Y3BfYW9faGFzaF9za2IodW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy03MTQtXFx0XFx0ICAgIGNoYXIgKmFvX2hhc2gsIHN0cnVjdCB0Y3BfYW9fa2V5ICprZXksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz03NzI9c3RydWN0IHRjcF9hb19rZXkgKnRjcF92NF9hb19sb29rdXAoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTc4MS1cXG5uZXQvaXB2NC90Y3BfYW8uYzo3ODI6aW50IHRjcF9hb19wcmVwYXJlX3Jlc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfYW8uYy03ODMtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y3BfYW9faGRyICphb2gsIGludCBsM2luZGV4LCB1MzIgc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTIyMj12b2lkIHRjcF9hb19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQwLVxcbm5ldC9pcHY0L3RjcF9hby5jOjEyNDE6aW50IHRjcF9hb19jb3B5X2FsbF9tYXRjaGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQyLVxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjA5ND1zdGF0aWMgaW50IHRjcF9hb19jb3B5X21rdHNfdG9fdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMjk3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIyOTg6aW50IHRjcF9hb19nZXRfbWt0cyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjI5OS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEwLVxcbm5ldC9pcHY0L3RjcF9hby5jOjIzMTE6aW50IHRjcF9hb19nZXRfc29ja19pbmZvKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEyLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIzNjUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MjM2NjppbnQgdGNwX2FvX3NldF9yZXBhaXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIzNjcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMC1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyNDAxOmludCB0Y3BfYW9fZ2V0X3JlcGFpcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjM5LjQ0MDQ0OTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzY1NTkyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBBTyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHRjcF9wYXJzZV9hb2AgaXNuJ3Qgc2hvd2luZyB1cCBpbiB0aGUgaW5pdGlhbCBzeW1ib2wgbGlzdCBiZWNhdXNlIGl0IGRpZG4ndCBtYXRjaCB0aGUgcmVnZXggYF5pbnQgdGNwX2FvXy4qYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCB5ZXMsIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljOiBgaW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pYC4gR29vZC4gVGhpcyBjb25maXJtcyB0aGF0IGJvdGggYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcmUgdmFsaWQgc3ltYm9scyB0byBmb2N1cyBvbi4gVGhleSB3aWxsIGJvdGggYmUgaW5zdHJ1bWVudGFsLlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHRjcF9hb19jb25uZWN0X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBUQ1AgQU8ga2V5cy4gVGhpcyBsb29wIGlzIG1lYW50IHRvIGNoZWNrIGZvciBhIG1hdGNoIGJldHdlZW4gdGhlIGxvY2FsIGFuZCBwZWVyIGtleXMuIENyaXRpY2FsbHksIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGl0IHRoZW4gY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBtb2RpZmljYXRpb24gdG8gaG93IHRoZSBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBwcm9jZWVkcywgaW1wYWN0aW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcG90ZW50aWFsbHkgdGhlIHRpbWluZyBvZiBzcGVjaWZpYyBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZSB3aWxsIGJlIGhpdCB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIHRoZSBzeXN0ZW0uXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIEknbGwgdXNlIGBUQ1BfQU9gIGFzIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcyB0aGUgZm9jdXMgc3ltYm9scy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhc3NvY2lhdGVkIHRpbWluZyBpbXBhY3RzIHRvIG1ha2UgaXQgZXhwbGljaXQuXG5cbkknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4MiwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDUuMDc3MDEyMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkxNzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ1LjE0OTkzNTY3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4NzIxNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ1LjE1MDQwMDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTg2NzQ2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uY1xuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYW8uY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuK1x0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuK1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4rXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbitcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDUuMTUwNDAxNzI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTc2MDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9hby5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgbG9vcCBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgc2VlIGl0J3MgaXRlcmF0aW5nIHRocm91Z2ggYGFvX2luZm8tXHUwMDNlaGVhZGAgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYW5kIGluc2lkZSB0aGUgbG9vcCwgaXQncyBjYWxsaW5nIGB0Y3BfYW9fa2V5X2NtcGAgdG8gY29tcGFyZSBhIGtleS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgd2hpY2ggc3VnZ2VzdHMgYSBrZXkgY29uZmxpY3QgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgYHN5bmNocm9uaXplX3JjdSgpYCBpcyBjYWxsZWQsIGFuZCB0aGUgbG9vcCBicmVha3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24gZml4LiBHaXZlbiB0aGUgY29udGV4dCBhbmQgdGhlIHVzZSBvZiBgc3luY2hyb25pemVfcmN1KClgLCBteSBndXQgc2F5cyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gUkNVIChSZWFkLUNvcHkgVXBkYXRlKSwgbGlrZWx5IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24gd2hlbiBtYW5hZ2luZyBUQ1AtQU8ga2V5cy4gSXQncyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIHNvIGl0J3MgYWxsIGFib3V0IG9yZGVyaW5nIG1lbW9yeSBhY2Nlc3Nlcy5cblxuSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm90aGluZydzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIGVpdGhlci4gSXQgYXBwZWFycyB0byBiZSBhIGZvY3VzZWQgYWRkaXRpb24gdG8gZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24uIFRoYXQncyBhIGdvb2Qgc2lnbiwgYSBmb2N1c2VkIGZpeCBpcyB1c3VhbGx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcmVzdCBvZiB0aGUgYHRjcF9hb19jb25uZWN0X2luaXRgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBsb29wIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCwgYnV0IGl0J3MgbG9va2luZyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ5LjkwODAxMDY0NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNDg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz0xMTE4PXN0YXRpYyBpbnQgdGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxcbm5ldC9pcHY0L3RjcF9hby5jOjExMzY6dm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM3LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE4MDA9c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVxcdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9WUkYvZXRjKSxcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODQ1OlxcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXFxubmV0L2lwdjQvdGNwX2FvLmMtMTg0Ni1cXHQgKiBpZiB0aGVyZSdzIGFueS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk4OC1cXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcXG5uZXQvaXB2NC90Y3BfYW8uYzoxOTg5OlxcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cXHQgKiBpZiB0aGVyZSdzIGFueS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDkuOTYwMTY0NDQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzY5NTc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMga2luZCBvZiBmaXggdXN1YWxseSBzY3JlYW1zIFwiS0FTQU4gZm91bmQgc29tZXRoaW5nIVwiIGFuZCBpcyBsaWtlbHkgcmVzb2x2aW5nIGFuIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLiBJJ20gcXVpdGUgY29uZmlkZW50IHRoYXQgdGhlcmUgaXNuJ3QgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIGlzIHByZXNlbnQgaGVyZS4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIEtBU0FOIG1pdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDIsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NTQuMTM3MTI1MjU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIHN0ZXAgKGBzeW5jaHJvbml6ZV9yY3UoKWApIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0KClgIHdoZW4gYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gb3IgYSB1c2UtYWZ0ZXItZnJlZSBidWcsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 21:32:07 +0000 UTC FinishedAt: 2026-08-16 21:48:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TCP_AO" ], "series_id": "dadb92ea-650a-4ea6-aacd-5dd419a91c09" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_ao_connect_init", "tcp_parse_ao" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9hb19jb25uZWN0X2luaXQmIzM0OywKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIHN0ZXAgKGBzeW5jaHJvbml6ZV9yY3UoKWApIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0KClgIHdoZW4gYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gb3IgYSB1c2UtYWZ0ZXItZnJlZSBidWcsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxM2FhZWVhMGRmN2UyYzEwOTVjNmJhOGY4Yjc4OTc1MjI3M2RjYmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXG5pbmRleCBlNGVjNjBhMzM0OTYzLi41MDk0MjY3NDQ3YWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9hby5jXG5AQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4mIzQzO1x0aGxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCBcdTAwMjZhb19pbmZvLVx1MDAzZWhlYWQsIG5vZGUpIHtcbiYjNDM7XHRcdGlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cdTAwM2VwcmVmaXhsZW4sXG4mIzQzO1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4mIzQzO1x0XHRcdC8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovXG4mIzQzO1x0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUQ1BfQU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfYW9fY29ubmVjdF9pbml0JiMzNDssCiAgICAmIzM0O3RjcF9wYXJzZV9hbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMxM2FhZWVhMGRmN2UyYzEwOTVjNmJhOGY4Yjc4OTc1MjI3M2RjYmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9hby5jIGIvbmV0L2lwdjQvdGNwX2FvLmMKaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2FvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2FvLmMKQEAgLTExNjAsNiAmIzQzOzExNjAsMTUgQEAgdm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaykKIAlsM2luZGV4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwKIAkJCQkJCSBzay0mZ3Q7c2tfYm91bmRfZGV2X2lmKTsKIAomIzQzOwlobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZhbXA7YW9faW5mby0mZ3Q7aGVhZCwgbm9kZSkgewomIzQzOwkJaWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LSZndDtwcmVmaXhsZW4sCiYjNDM7CQkJCSAgIGZhbWlseSwgLTEsIC0xKSkgewomIzQzOwkJCS8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovCiYjNDM7CQkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgbmV4dCwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CiAJCWlmICghdGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktJmd0O3ByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKQogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgQXV0aGVudGljYXRpb24gT3B0aW9uIChUQ1AtQU8pIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byBgbmV0L2lwdjQvdGNwX2FvLmNgLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIHRoZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBsb29wIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgdGhpcyBvbmU6CgpgYGBjCglobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZhbXA7YW9faW5mby0mZ3Q7aGVhZCwgbm9kZSkgewoJCWlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS0mZ3Q7cHJlZml4bGVuLAoJCQkJICAgZmFtaWx5LCAtMSwgLTEpKSB7CgkJCS8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovCgkJCXN5bmNocm9uaXplX3JjdSgpOwoJCQlicmVhazsKCQl9Cgl9CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXRzZWxmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFRoZSBhZGRlZCBsb29wLCBhcyBJIHNlZSBpdCwgaXMgbW9zdCBsaWtlbHkgZGVzaWduZWQgZm9yIHNvbWUgc29ydCBvZiBrZXkgbG9va3VwIG9yIGNvbmZsaWN0IHJlc29sdXRpb24sIHBhcnRpY3VsYXJseSBhcyB0aGUgY29tbWVudCBhbGx1ZGVzIHRvIGEgcGFpcmluZyB3aXRoIGB0Y3BfaW5ib3VuZF9hb19oYXNoKClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsb29wIGlzICpkb2luZyogd2l0aCB0aGUgYHRjcF9hb19rZXlfY21wYCByZXN1bHQuIEkgYXNzdW1lIGl0JiMzOTtzIGNoZWNraW5nIGZvciBzb21lIHByZS1leGlzdGluZyBhdXRoZW50aWNhdGlvbiBrZXkgb3IgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgSSYjMzk7bGwgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gVENQLUFPIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBHZW5lc2lzIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZvciBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBlbnRyeSBwb2ludHMgdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBwcm9jZXNzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBvcHRpb25zIGFyZSBpbml0aWFsaXplZCwgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGZlZWRzIGludG8gc3Vic2VxdWVudCBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIGFuZCBpc29sYXRlIHRoZSBjcml0aWNhbCBkYXRhIGZsb3cuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3BfYW8uaD0yNzg9dm9pZCB0Y3BfYW9fZmluaXNoX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjI3OTp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKTtcbmluY2x1ZGUvbmV0L3RjcF9hby5oLTI4MC12b2lkIHRjcF9hb19zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX3RpbWVfd2FpdChzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3LFxuLS1cbmluY2x1ZGUvbmV0L3RjcF9hby5oLTMzMi1cbmluY2x1ZGUvbmV0L3RjcF9hby5oOjMzMzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0zMzQte1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cdCAqIGlmIHRoZXJlJiMzOTtzIGFueS5cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTE2Olx0dGNwX2FvX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZSBjb2RlIHNheXMgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGhhbmRsZWQgd2l0aGluIGB0Y3BfY29ubmVjdF9pbml0YC4gUmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gQmVmb3JlIEkgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZSBpbiBkZXRhaWwsIEkgYWx3YXlzIGZpbmQgaXQgdXNlZnVsIHRvIGNoZWNrIHRoZSBhc3NvY2lhdGVkIEtjb25maWcgZW50cnkgZm9yIGB0Y3BfYW8uY2AuIFRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBhbnkgcmVsZXZhbnQgZmVhdHVyZSBmbGFncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEl0JiMzOTtsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCAtIGNvbnRleHQgaXMga2V5LCB5b3Uga25vdy4gVGhlbiBJIGNhbiBkaXZlIGRlZXBlciB3aXRoIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW8ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cdFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjM5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgVENQX0FPIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIEkgc2VlIGBDT05GSUdfVENQX0FPYCBuZWVkcyB0byBiZSBlbmFibGVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRyaWxsIGRvd24gYW5kIHBpbnBvaW50IHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgYW5kIGFsc28sIHdoZXJlIHRoZSBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCBiZSBlbmFibGVkIHJlc2lkZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFRDUF9BT2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IHRoZXJlLiBLbm93aW5nIHRoaXMsIGl0IG1ha2VzIG15IGFwcHJvYWNoIGV4dHJlbWVseSBlZmZpY2llbnQuIE5vdyBpdCYjMzk7cyBhIG1hdHRlciBvZiBxdWlja2x5IHNjYW5uaW5nIGZvciB0aGUgcmVsZXZhbnQgc2VjdGlvbiBhbmQgcmV2aWV3aW5nIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBkZWZhdWx0IHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVENQX0FPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xuLS1cbm5ldC9pcHY0L0tjb25maWctNzQzLVxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xubmV0L2lwdjQvS2NvbmZpZy03NDUtXHRib29sIFwmIzM0O1RDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBUQ1BfQU9gIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgZnVuY3Rpb24uIEJ1dCwgaXMgdGhlcmUgYW55ICpvdGhlciogZnVuY3Rpb24gSSBzaG91bGQgYmUgbG9va2luZyBhdCByaWdodCBub3c/IExldCYjMzk7cyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aHMgZm9yIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucy4gU2hvdWxkIEkgY29uY2VudHJhdGUgZXhjbHVzaXZlbHkgb24gYHRjcF9hb19jb25uZWN0X2luaXRgIGl0c2VsZj8gV2VsbCwgaXQgaXNuJiMzOTt0IHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBjb25uZWN0aW9uIGlmIFRDUF9BTyBpcyBhY3RpdmUsIHNvIHRoZSBmcmVxdWVuY3kgaXMgZGVmaW5pdGVseSBhIGNvbmNlcm4uIFdhaXQuLi4gSSBuZWVkIHRvIGJlIGNhcmVmdWw7IGB0Y3BfY29ubmVjdF9pbml0YCBjYWxscyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuCgpBbHJpZ2h0LCBtYXliZSBJIHNob3VsZCBzaGlmdCB0aGUgZm9jdXMgdG8gdGhlIHNwZWNpZmljIFRDUCBBTyBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCB3b3VsZCBiZSBpbXBsZW1lbnRlZC4gT2theSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBgdGNwX2FvX2luZm9fY21kYCwgYHRjcF9hb19zZXRzb2Nrb3B0YCwgYW5kIGB0Y3BfYW9fZ2V0c29ja29wdGAuIExldCYjMzk7cyB0YWtlIGEgbG9vayBpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIGFuZCBodW50IGZvciB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcywgb3Igb25lcyBzaW1pbGFyLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fLipfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNTUtXHRcdFx0aWYgKGtleSlcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XHRcdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9hb19kZWxfY21kICovXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDU3LVx0XHRcdFx0V1JJVEVfT05DRShpbmZvLVx1MDAzZWN1cnJlbnRfa2V5LCBrZXkpO1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXHQgKiAtIHJlcXVlc3Qgc29ja2V0cyB3b3VsZCByYWNlIG9uIHRob3NlIGtleSBwb2ludGVyc1xubmV0L2lwdjQvdGNwX2FvLmM6MTA2OTpcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNzAtXHQgKi9cbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNTQ5PXN0YXRpYyBzdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX2FvX2tleV9hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTU4MC1cbm5ldC9pcHY0L3RjcF9hby5jOjE1ODE6c3RhdGljIGludCB0Y3BfYW9fYWRkX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy0xNTgyLVx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xNzQ2PXN0YXRpYyBpbnQgdGNwX2FvX2RlbGV0ZV9rZXkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvX2luZm8sXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXG5uZXQvaXB2NC90Y3BfYW8uYzoxODAwOnN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxubmV0L2lwdjQvdGNwX2FvLmMtMTgwMS1cdFx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTkyNj1zdGF0aWMgaW50IHRjcF9hb19yZXF1aXJlZF92ZXJpZnkoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE5NDUtXG5uZXQvaXB2NC90Y3BfYW8uYzoxOTQ2OnN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcbm5ldC9pcHY0L3RjcF9hby5jLTE5NDctXHRcdFx0ICAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDM1PWludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIwNDItXHRjYXNlIFRDUF9BT19BRERfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0MzpcdFx0cmV0dXJuIHRjcF9hb19hZGRfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDQtXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NTpcdFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDYtXHRjYXNlIFRDUF9BT19JTkZPOlxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NzpcdFx0cmV0dXJuIHRjcF9hb19pbmZvX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ4LVx0ZGVmYXVsdDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA0OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUCBBTykgQ29kZSoqCgpPa2F5LCBzbyBgdGNwX3BhcnNlX2FvYCBpcyB0aGUgaW5pdGlhbCBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGBzZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIFRDUCBBTy4gTGV0JiMzOTtzIHJldmlzaXQgYHRjcF9hb19jb25uZWN0X2luaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4KCmBgYGMKCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CgkJaWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LSZndDtwcmVmaXhsZW4sCgkJCQkgICBmYW1pbHksIC0xLCAtMSkpIHsKCQkJLyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi8KCQkJc3luY2hyb25pemVfcmN1KCk7CgkJCWJyZWFrOwoJCX0KCX0KYGBgCgpBaGEhIFRoaXMgY29kZSBibG9jayBpbnRyb2R1Y2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaWYgYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBhbHRlcmF0aW9uIGhhcyB0aGUgcG90ZW50aWFsIHRvIG1vZGlmeSBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIHNpZ25pZmljYW50bHksIGJlY2F1c2UgYHN5bmNocm9uaXplX3JjdWAgKmNhbiogYmxvY2ssIHdoaWNoIG1ha2VzIGl0IGltcG9ydGFudCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCYjMzk7cyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4gR2l2ZW4gdGhhdCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgaW52b2tlZCBvbiBldmVyeSBjb25uZWN0aW9uIGF0dGVtcHQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgaG90IHBhdGguIEhvd2V2ZXIsIGl0IG9ubHkgcGVyZm9ybXMgdGhpcyBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24gaWYgYGFvX2luZm9gIGlzIGFjdHVhbGx5IHByZXNlbnQuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbmFsIHBhdGhzIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfYW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMzY6XHR2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuMTEzNzpcdHtcbjExMzg6XHRcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuMTEzOTpcdFx0c3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvO1xuMTE0MDpcdFx0c3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4xMTQxOlx0XHR1bmlvbiB0Y3BfYW9fYWRkciAqYWRkcjtcbjExNDI6XHRcdHN0cnVjdCB0Y3BfYW9fa2V5ICprZXk7XG4xMTQzOlx0XHRpbnQgZmFtaWx5LCBsM2luZGV4O1xuMTE0NDpcdFxuMTE0NTpcdFx0YW9faW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHAtXHUwMDNlYW9faW5mbyxcbjExNDY6XHRcdFx0XHRcdFx0ICAgIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSk7XG4xMTQ3Olx0XHRpZiAoIWFvX2luZm8pXG4xMTQ4Olx0XHRcdHJldHVybjtcbjExNDk6XHRcbjExNTA6XHRcdC8qIFJlbW92ZSBhbGwga2V5cyB0aGF0IGRvbiYjMzk7dCBtYXRjaCB0aGUgcGVlciAqL1xuMTE1MTpcdFx0ZmFtaWx5ID0gc2stXHUwMDNlc2tfZmFtaWx5O1xuMTE1MjpcdFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUKVxuMTE1MzpcdFx0XHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXHUwMDI2c2stXHUwMDNlc2tfZGFkZHI7XG4xMTU0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xMTU1Olx0XHRlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4xMTU2Olx0XHRcdGFkZHIgPSAodW5pb24gdGNwX2FvX2FkZHIgKilcdTAwMjZzay1cdTAwM2Vza192Nl9kYWRkcjtcbjExNTc6XHQjZW5kaWZcbjExNTg6XHRcdGVsc2VcbjExNTk6XHRcdFx0cmV0dXJuO1xuMTE2MDpcdFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4xMTYxOlx0XHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4xMTYyOlx0XG4xMTYzOlx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuMTE2NDpcdFx0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuMTE2NTpcdFx0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4xMTY2Olx0XHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbjExNjc6XHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbjExNjg6XHRcdFx0XHRicmVhaztcbjExNjk6XHRcdFx0fVxuMTE3MDpcdFx0fVxuMTE3MTpcdFxuMTE3MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuMTE3MzpcdFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuMTE3NDpcdFx0XHRcdGNvbnRpbnVlO1xuMTE3NTpcdFxuMTE3NjpcdFx0XHRpZiAoa2V5ID09IGFvX2luZm8tXHUwMDNlY3VycmVudF9rZXkpXG4xMTc3Olx0XHRcdFx0YW9faW5mby1cdTAwM2VjdXJyZW50X2tleSA9IE5VTEw7XG4xMTc4Olx0XHRcdGlmIChrZXkgPT0gYW9faW5mby1cdTAwM2VybmV4dF9rZXkpXG4xMTc5Olx0XHRcdFx0YW9faW5mby1cdTAwM2VybmV4dF9rZXkgPSBOVUxMO1xuMTE4MDpcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNmtleS1cdTAwM2Vub2RlKTtcbjExODE6XHRcdFx0YXRvbWljX3N1Yih0Y3BfYW9fc2l6ZW9mX2tleShrZXkpLCBcdTAwMjZzay1cdTAwM2Vza19vbWVtX2FsbG9jKTtcbjExODI6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2a2V5LVx1MDAzZXJjdSwgdGNwX2FvX2tleV9mcmVlX3JjdSk7XG4xMTgzOlx0XHR9XG4xMTg0Olx0XG4xMTg1Olx0XHRrZXkgPSB0cC1cdTAwM2VhZl9zcGVjaWZpYy1cdTAwM2Vhb19sb29rdXAoc2ssIHNrLCAtMSwgLTEpO1xuMTE4NjpcdFx0aWYgKGtleSkge1xuMTE4NzpcdFx0XHQvKiBpZiBjdXJyZW50X2tleSBvciBybmV4dF9rZXkgd2VyZSBub3QgcHJvdmlkZWQsXG4xMTg4Olx0XHRcdCAqIHVzZSB0aGUgZmlyc3Qga2V5IG1hdGNoaW5nIHRoZSBwZWVyXG4xMTg5Olx0XHRcdCAqL1xuMTE5MDpcdFx0XHRpZiAoIWFvX2luZm8tXHUwMDNlY3VycmVudF9rZXkpXG4xMTkxOlx0XHRcdFx0YW9faW5mby1cdTAwM2VjdXJyZW50X2tleSA9IGtleTtcbjExOTI6XHRcdFx0aWYgKCFhb19pbmZvLVx1MDAzZXJuZXh0X2tleSlcbjExOTM6XHRcdFx0XHRhb19pbmZvLVx1MDAzZXJuZXh0X2tleSA9IGtleTtcbjExOTQ6XHRcdFx0dHAtXHUwMDNldGNwX2hlYWRlcl9sZW4gJiM0Mzs9IHRjcF9hb19sZW5fYWxpZ25lZChrZXkpO1xuMTE5NTpcdFxuMTE5NjpcdFx0XHRhb19pbmZvLVx1MDAzZWxpc24gPSBodG9ubCh0cC1cdTAwM2V3cml0ZV9zZXEpO1xuMTE5NzpcdFx0XHRhb19pbmZvLVx1MDAzZXNuZF9zbmUgPSAwO1xuMTE5ODpcdFx0fSBlbHNlIHtcbjExOTk6XHRcdFx0LyogQ2FuJiMzOTt0IGhhcHBlbjogdGNwX2Nvbm5lY3QoKSB2ZXJpZmllcyB0aGF0IHRoZXJlJiMzOTtzXG4xMjAwOlx0XHRcdCAqIGF0IGxlYXN0IG9uZSB0Y3AtYW8ga2V5IHRoYXQgbWF0Y2hlcyB0aGUgcmVtb3RlIHBlZXIuXG4xMjAxOlx0XHRcdCAqL1xuMTIwMjpcdFx0XHRXQVJOX09OX09OQ0UoMSk7XG4xMjAzOlx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cdTAwM2Vhb19pbmZvLCBOVUxMKTtcbjEyMDQ6XHRcdFx0a2ZyZWUoYW9faW5mbyk7XG4xMjA1Olx0XHR9XG4xMjA2Olx0fVxuMTIwNzpcdFxuMTIwODpcdHZvaWQgdGNwX2FvX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaylcbjEyMDk6XHR7XG4xMjEwOlx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xuMTIxMTpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcbjEyMTI6XHRcbjEyMTM6XHRcdGFvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0Y3Bfc2soc2spLVx1MDAzZWFvX2luZm8sXG4xMjE0Olx0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcbjEyMTU6XHRcdGlmICghYW8pXG4xMjE2Olx0XHRcdHJldHVybjtcbjEyMTc6XHRcbjEyMTg6XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksIFx1MDAyNmFvLVx1MDAzZWhlYWQsIG5vZGUsIGxvY2tkZXBfc29ja19pc19oZWxkKHNrKSlcbjEyMTk6XHRcdFx0dGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhzaywgYW8sIGtleSk7XG4xMjIwOlx0fVxuMTIyMTpcdFxuMTIyMjpcdHZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjEyMjM6XHR7XG4xMjI0Olx0XHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xuMTIyNTpcdFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcbjEyMjY6XHRcbjEyMjc6XHRcdGFvID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0Y3Bfc2soc2spLVx1MDAzZWFvX2luZm8sXG4xMjI4Olx0XHRcdFx0XHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcbjEyMjk6XHRcdGlmICghYW8pXG4xMjMwOlx0XHRcdHJldHVybjtcbjEyMzE6XHRcbjEyMzI6XHRcdC8qIHNrIHdpdGggVENQX1JFUEFJUl9PTiBkb2VzIG5vdCBoYXZlIHNrYiBpbiB0Y3BfZmluaXNoX2Nvbm5lY3QgKi9cbjEyMzM6XHRcdGlmIChza2IpXG4xMjM0Olx0XHRcdFdSSVRFX09OQ0UoYW8tXHUwMDNlcmlzbiwgdGNwX2hkcihza2IpLVx1MDAzZXNlcSk7XG4xMjM1Olx0XHRhby1cdTAwM2VyY3Zfc25lID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMjE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQX0FPIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGFsdGVyYXRpb24gaXMgd2l0aGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxvb3AsIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBrZXkgbWF0Y2hpbmcgY2hlY2sgYWdhaW5zdCB0aGUgcGVlci4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYCB3aGVuIGEgbWF0Y2ggaXMgZm91bmQuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCYjMzk7cyBzZWUuLi4gYFRDUF9BT2AgaXMgdGhlIG9idmlvdXMgb25lLCBzbyBsZXQmIzM5O3Mgc3RhcnQgdGhlcmUuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QgYW5kIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIEkmIzM5O2xsIGRpdmUgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gc2VlIGlmIGBUQ1BfQU9gIHJlbGllcyBvbiBhbnl0aGluZyBlbHNlLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUQ1BfQU8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NDMtXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgVENQX0FPIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBgY29uZmlnIFRDUF9BT2AgYmxvY2suIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzZXR0aW5ncz8gSSBjYW4mIzM5O3QgcmVhbGx5IG1ha2UgYSBqdWRnbWVudCBvciB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aG91dCBzZWVpbmcgKmV2ZXJ5dGhpbmcqLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21wbGV0ZSBwaWN0dXJlIHRvIGJlIGFibGUgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBhbmQgY29tcGF0aWJpbGl0eS4gSnVzdCBrbm93aW5nICp0aGF0KiBUQ1BfQU8gaXMgY29uZmlndXJlZCBpc24mIzM5O3QgbmVhcmx5IGVub3VnaCBpbmZvcm1hdGlvbiB0byBiZSB1c2VmdWwuIEkgbmVlZCBncmFudWxhcml0eS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQ0Olx0Y29uZmlnIFRDUF9BT1xuIDc0NTpcdFx0Ym9vbCBcJiMzNDtUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcJiMzNDtcbiA3NDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xuIDc0NzpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuIDc0ODpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gNzQ5Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc1MDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCAjIHNlcS1udW1iZXIgZXh0ZW5zaW9uIG5lZWRzIFdSSVRFX09OQ0UodTY0KVxuIDc1MTpcdFx0aGVscFxuIDc1MjpcdFx0ICBUQ1AtQU8gc3BlY2lmaWVzIHRoZSB1c2Ugb2Ygc3Ryb25nZXIgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlcyAoTUFDcyksXG4gNzUzOlx0XHQgIHByb3RlY3RzIGFnYWluc3QgcmVwbGF5cyBmb3IgbG9uZy1saXZlZCBUQ1AgY29ubmVjdGlvbnMsIGFuZFxuIDc1NDpcdFx0ICBwcm92aWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGFzc29jaWF0aW9uIG9mIHNlY3VyaXR5IHdpdGggVENQXG4gNzU1Olx0XHQgIGNvbm5lY3Rpb25zIHRoYW4gVENQIE1ENSAoU2VlIFJGQzU5MjUpXG4gNzU2Olx0XG4gNzU3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gNzU4Olx0XG4gNzU5Olx0Y29uZmlnIFRDUF9NRDVTSUdcbiA3NjA6XHRcdGJvb2wgXCYjMzQ7VENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVwmIzM0O1xuIDc2MTpcdFx0c2VsZWN0IENSWVBUT19MSUJfTUQ1XG4gNzYyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuIDc2MzpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1BfQU8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIGNlbnRlcnMgYXJvdW5kIGBUQ1BfQU9gLCBhbmQgdGhhdCYjMzk7cyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBJbml0aWFsbHksIEkgdGhvdWdodCBJJiMzOTtkIG5lZWQgdG8gdGFyZ2V0IHRoZXNlIHN5bWJvbHM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4KCkhvbGQgb24sIHRob3VnaC4gYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfY29ubmVjdF9pbml0YCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgZnJvbSBgdGNwX3Y0X2Nvbm5lY3RgIGFuZCBgdGNwX3Y2X2Nvbm5lY3RgLiBUaGF0JiMzOTtzIGEgaG90IHBhdGgsIGJ1dCBpdCBvbmx5ICpkb2VzKiBzb21ldGhpbmcgaWYgYGFvX2luZm9gIGlzIHByZXNlbnQsIHJpZ2h0PyBNeSBpbml0aWFsIGluY2xpbmF0aW9uIHdhcyB0byBpbmNsdWRlIGl0IGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBidXQgSSBuZWVkIHRvIGJlIHN0cmF0ZWdpYy4gSXQgbWlnaHQgc2tldyBteSBmdXp6aW5nIHRvd2FyZHMgYWxsIGNvbm5lY3RzIGlmIEkgZm9jdXMgdGhlcmUgYWxvbmUuCgpgdGNwX3BhcnNlX2FvYCBpcyB0aGUgYHNldHNvY2tvcHRgIGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIGEgc29saWQgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGVuc3VyZSB0aGUgb3RoZXIgY2hvaWNlcyBhcmUgZ29vZC4gTGV0JiMzOTtzIHNlZSBpZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgc3RhdGljLiBOb3BlLCBpdCYjMzk7cyBub3QuIEkgY2FuIGluY2x1ZGUgaXQuIE9rYXksIG9yaWdpbmFsIHBsYW4gd2FzIHRvIGluY2x1ZGUgYHRjcF9hb19jb25uZWN0X2luaXRgLCBgdGNwX3BhcnNlX2FvYCwgYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgLgoKSG93ZXZlciwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGNhbGxlZCBvbiAqZXZlcnkqIGNvbm5lY3QuIEkgc2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgLgoKQWZ0ZXIgcmUtZXZhbHVhdGluZyB0aGUgb3B0aW9ucywgaXQgc2VlbXMgYmVzdCB0byBqdXN0IHRhcmdldCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY29uZmlncyBJIG5lZWQgdG8gY29uc2lkZXIuIE5vcGUsIGBUQ1BfQU9gIGRlcGVuZHMgb24gYDY0QklUYCwgYnV0IHRoYXQmIzM5O3MgaXQuIFNvIGBUQ1BfQU9gIGFsb25lIGlzIHN1ZmZpY2llbnQuCgpMZXQmIzM5O3Mgc3VtbWFyaXplOgotICAgKipXb3J0aEZ1enppbmc6IHRydWUqKiAoQmVjYXVzZSBvZiB0aGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGFkZGVkIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB1bmRlciBzcGVjaWZpYyBrZXkgY29uZGl0aW9ucy4gVGhpcyBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBjYW4gaW1wYWN0IGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcuKQotICAgKipGb2N1c1N5bWJvbHM6IHRjcF9hb19jb25uZWN0X2luaXQsIHRjcF9wYXJzZV9hbyoqIChLZWVwaW5nIHRoZSBjaG9pY2VzIHRvIG5vbi1zdGF0aWMsIEFQSS1lbnRyeXBvaW50IGZ1bmN0aW9ucy4pCi0gICAqKkVuYWJsZUNvbmZpZ3M6IFRDUF9BTyoqCgpXYWl0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZSBzeW1ib2xzIGFyZSBhcHByb3ByaWF0ZS4gYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBpbnRlcm5hbCBoZWxwZXJzLCBhbmQgSSB3YW50IHRvIGF2b2lkIHRob3NlICh0aGUgcHJvbXB0IHJlY29tbWVuZHMgcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucykuIExldCYjMzk7cyBkb3VibGUtY2hlY2suIFl1cCwgdGhleSYjMzk7cmUgc3RhdGljLgoKU28sIEkgd2lsbCBzdGljayB3aXRoIHRoZSB1cGRhdGVkOiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLiBUaGF0JiMzOTtzIGEgbXVjaCBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHRjcF9hb18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9hby5jPTYxNj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9oZWFkZXIoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTY0NC1cbm5ldC9pcHY0L3RjcF9hby5jOjY0NTppbnQgdGNwX2FvX2hhc2hfaGRyKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIGNoYXIgKmFvX2hhc2gsXG5uZXQvaXB2NC90Y3BfYW8uYy02NDYtXHRcdCAgICBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCBjb25zdCB1OCAqdGtleSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz02ODI9c3RhdGljIHZvaWQgdGNwX2FvX2hhc2hfc2tiX2RhdGEoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTcxMi1cbm5ldC9pcHY0L3RjcF9hby5jOjcxMzppbnQgdGNwX2FvX2hhc2hfc2tiKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG5uZXQvaXB2NC90Y3BfYW8uYy03MTQtXHRcdCAgICBjaGFyICphb19oYXNoLCBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTc3Mj1zdHJ1Y3QgdGNwX2FvX2tleSAqdGNwX3Y0X2FvX2xvb2t1cChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICphZGRyX3NrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTc4MS1cbm5ldC9pcHY0L3RjcF9hby5jOjc4MjppbnQgdGNwX2FvX3ByZXBhcmVfcmVzZXQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvdGNwX2FvLmMtNzgzLVx0XHRcdCBjb25zdCBzdHJ1Y3QgdGNwX2FvX2hkciAqYW9oLCBpbnQgbDNpbmRleCwgdTMyIHNlcSxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xMjIyPXZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQwLVxubmV0L2lwdjQvdGNwX2FvLmM6MTI0MTppbnQgdGNwX2FvX2NvcHlfYWxsX21hdGNoaW5nKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrLFxubmV0L2lwdjQvdGNwX2FvLmMtMTI0Mi1cdFx0XHQgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0yMDk0PXN0YXRpYyBpbnQgdGNwX2FvX2NvcHlfbWt0c190b191c2VyKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMjk3LVxubmV0L2lwdjQvdGNwX2FvLmM6MjI5ODppbnQgdGNwX2FvX2dldF9ta3RzKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTIyOTkte1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTIzMTAtXG5uZXQvaXB2NC90Y3BfYW8uYzoyMzExOmludCB0Y3BfYW9fZ2V0X3NvY2tfaW5mbyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEyLXtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzY1LVxubmV0L2lwdjQvdGNwX2FvLmM6MjM2NjppbnQgdGNwX2FvX3NldF9yZXBhaXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxubmV0L2lwdjQvdGNwX2FvLmMtMjM2Ny17XG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMC1cbm5ldC9pcHY0L3RjcF9hby5jOjI0MDE6aW50IHRjcF9hb19nZXRfcmVwYWlyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbm5ldC9pcHY0L3RjcF9hby5jLTI0MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4MgoJCQkJCQkJb3V0cHV0OiAxMjMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBBTyBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGB0Y3BfcGFyc2VfYW9gIGlzbiYjMzk7dCBzaG93aW5nIHVwIGluIHRoZSBpbml0aWFsIHN5bWJvbCBsaXN0IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBtYXRjaCB0aGUgcmVnZXggYF5pbnQgdGNwX2FvXy4qYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgbm9uLXN0YXRpYzogYGludCB0Y3BfcGFyc2VfYW8oc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LCBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKWAuIEdvb2QuIFRoaXMgY29uZmlybXMgdGhhdCBib3RoIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBhbmQgYHRjcF9wYXJzZV9hb2AgYXJlIHZhbGlkIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZXkgd2lsbCBib3RoIGJlIGluc3RydW1lbnRhbC4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHRjcF9hb19jb25uZWN0X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBUQ1AgQU8ga2V5cy4gVGhpcyBsb29wIGlzIG1lYW50IHRvIGNoZWNrIGZvciBhIG1hdGNoIGJldHdlZW4gdGhlIGxvY2FsIGFuZCBwZWVyIGtleXMuIENyaXRpY2FsbHksIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGl0IHRoZW4gY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBtb2RpZmljYXRpb24gdG8gaG93IHRoZSBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBwcm9jZWVkcywgaW1wYWN0aW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcG90ZW50aWFsbHkgdGhlIHRpbWluZyBvZiBzcGVjaWZpYyBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZSB3aWxsIGJlIGhpdCB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIHRoZSBzeXN0ZW0uCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSSYjMzk7bGwgdXNlIGBUQ1BfQU9gIGFzIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcyB0aGUgZm9jdXMgc3ltYm9scy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIGRpcmVjdCBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgYXNzb2NpYXRlZCB0aW1pbmcgaW1wYWN0cyB0byBtYWtlIGl0IGV4cGxpY2l0LgoKSSYjMzk7bGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VENQX0FPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2FvX2Nvbm5lY3RfaW5pdCYjMzQ7LAogICAgJiMzNDt0Y3BfcGFyc2VfYW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RDUF9BTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9hb19jb25uZWN0X2luaXQmIzM0OywKICAgICYjMzQ7dGNwX3BhcnNlX2FvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byBhZGQgYSBsb29wIHRoYXQgY2hlY2tzIGlmIGFueSBUQ1AgQU8ga2V5IG1hdGNoZXMgdGhlIHBlZXIuIElmIGEgbWF0Y2ggaXMgZm91bmQsIGl0IGNhbGxzIGBzeW5jaHJvbml6ZV9yY3UoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZyBkdXJpbmcgVENQIGNvbm5lY3Rpb24gaW5pdGlhbGl6YXRpb24uIEl0IGlzIHJlYWNoYWJsZSB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uYwppbmRleCBlNGVjNjBhMzM0OTYzLi41MDk0MjY3NDQ3YWVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYW8uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYW8uYwpAQCAtMTE2MCw2ICYjNDM7MTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogCWwzaW5kZXggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfYnlfaW5kZXgoc29ja19uZXQoc2spLAogCQkJCQkJIHNrLSZndDtza19ib3VuZF9kZXZfaWYpOwogCiYjNDM7CWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJmFtcDthb19pbmZvLSZndDtoZWFkLCBub2RlKSB7CiYjNDM7CQlpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktJmd0O3ByZWZpeGxlbiwKJiM0MzsJCQkJICAgZmFtaWx5LCAtMSwgLTEpKSB7CiYjNDM7CQkJLyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi8KJiM0MzsJCQlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBuZXh0LCAmYW1wO2FvX2luZm8tJmd0O2hlYWQsIG5vZGUpIHsKIAkJaWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS0mZ3Q7cHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpCiAJCQljb250aW51ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMDgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgbG9vcCBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgc2VlIGl0JiMzOTtzIGl0ZXJhdGluZyB0aHJvdWdoIGBhb19pbmZvLSZndDtoZWFkYCB1c2luZyBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLCBhbmQgaW5zaWRlIHRoZSBsb29wLCBpdCYjMzk7cyBjYWxsaW5nIGB0Y3BfYW9fa2V5X2NtcGAgdG8gY29tcGFyZSBhIGtleS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgd2hpY2ggc3VnZ2VzdHMgYSBrZXkgY29uZmxpY3QgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgYHN5bmNocm9uaXplX3JjdSgpYCBpcyBjYWxsZWQsIGFuZCB0aGUgbG9vcCBicmVha3MuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGhhcyB0byBiZSBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIGZpeC4gR2l2ZW4gdGhlIGNvbnRleHQgYW5kIHRoZSB1c2Ugb2YgYHN5bmNocm9uaXplX3JjdSgpYCwgbXkgZ3V0IHNheXMgaXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBSQ1UgKFJlYWQtQ29weSBVcGRhdGUpLCBsaWtlbHkgdG8gcHJldmVudCBzb21lIGtpbmQgb2YgdXNlLWFmdGVyLWZyZWUgb3IgYSByYWNlIGNvbmRpdGlvbiB3aGVuIG1hbmFnaW5nIFRDUC1BTyBrZXlzLiBJdCYjMzk7cyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBvcmRlcmluZyBtZW1vcnkgYWNjZXNzZXMuCgpJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm90aGluZyYjMzk7cyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSBlaXRoZXIuIEl0IGFwcGVhcnMgdG8gYmUgYSBmb2N1c2VkIGFkZGl0aW9uIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLCBhIGZvY3VzZWQgZml4IGlzIHVzdWFsbHkgdGhlIGJlc3QgYXBwcm9hY2guCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbG9vcCBhbmQgY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQsIGJ1dCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYW9fY29ubmVjdF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2FvLmM9MTExOD1zdGF0aWMgaW50IHRjcF9hb19jYWNoZV90cmFmZmljX2tleXMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTExMzUtXG5uZXQvaXB2NC90Y3BfYW8uYzoxMTM2OnZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM3LXtcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYz0xODAwPXN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxuLS1cbm5ldC9pcHY0L3RjcF9hby5jLTE4NDQtXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXG5uZXQvaXB2NC90Y3BfYW8uYzoxODQ1Olx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1Rcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDYtXHQgKiBpZiB0aGVyZSYjMzk7cyBhbnkuXG4tLVxubmV0L2lwdjQvdGNwX2FvLmM9MTk0Nj1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXG4tLVxubmV0L2lwdjQvdGNwX2FvLmMtMTk4OC1cdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9wb3J0L1ZSRi9ldGMpLFxubmV0L2lwdjQvdGNwX2FvLmM6MTk4OTpcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTkwLVx0ICogaWYgdGhlcmUmIzM5O3MgYW55LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAyMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTAyCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMga2luZCBvZiBmaXggdXN1YWxseSBzY3JlYW1zICYjMzQ7S0FTQU4gZm91bmQgc29tZXRoaW5nISYjMzQ7IGFuZCBpcyBsaWtlbHkgcmVzb2x2aW5nIGFuIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLiBJJiMzOTttIHF1aXRlIGNvbmZpZGVudCB0aGF0IHRoZXJlIGlzbiYjMzk7dCBhIHNpdHVhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWthZ2UgaXMgcHJlc2VudCBoZXJlLiBUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIEtBU0FOIG1pdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDIxOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBzdGVwIChgc3luY2hyb25pemVfcmN1KClgKSBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdCgpYCB3aGVuIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kLiBUaGlzIGlzIGEgZml4IGZvciBhIHJhY2UgY29uZGl0aW9uIG9yIGEgdXNlLWFmdGVyLWZyZWUgYnVnLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDc6NTcuMjIzMDEyNjU4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY5MTQxNDc4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ3OjU3LjIyMzAxODY4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA4MTI1NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAyMTo0Nzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYW8uYyBiL25ldC9pcHY0L3RjcF9hby5jXFxuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfYW8uY1xcbisrKyBiL25ldC9pcHY0L3RjcF9hby5jXFxuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbiBcXHRsM2luZGV4ID0gbDNtZGV2X21hc3Rlcl9pZmluZGV4X2J5X2luZGV4KHNvY2tfbmV0KHNrKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbiBcXG4rXFx0aGxpc3RfZm9yX2VhY2hfZW50cnkoa2V5LCBcXHUwMDI2YW9faW5mby1cXHUwMDNlaGVhZCwgbm9kZSkge1xcbitcXHRcXHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXFx1MDAzZXByZWZpeGxlbixcXG4rXFx0XFx0XFx0XFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XFxuK1xcdFxcdFxcdC8qIHBhaXJzIHdpdGggdGNwX2luYm91bmRfYW9faGFzaCgpICovXFxuK1xcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGtleSwgbmV4dCwgXFx1MDAyNmFvX2luZm8tXFx1MDAzZWhlYWQsIG5vZGUpIHtcXG4gXFx0XFx0aWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cXHUwMDNlcHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0Nzo1Ny42MzI2ODY0ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzUxNzI0NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUQ1BfQU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYW9fY29ubmVjdF9pbml0XCIsXG4gICAgXCJ0Y3BfcGFyc2VfYW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgdG8gYWRkIGEgbG9vcCB0aGF0IGNoZWNrcyBpZiBhbnkgVENQIEFPIGtleSBtYXRjaGVzIHRoZSBwZWVyLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCBpdCBjYWxscyBgc3luY2hyb25pemVfcmN1KClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgZHVyaW5nIFRDUCBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLiBJdCBpcyByZWFjaGFibGUgd2hlbiBUQ1AgQU8gaXMgZW5hYmxlZCBhbmQgY29uZmlndXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uY1xuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYW8uY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuK1x0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuK1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4rXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbitcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDc6NTcuNjMyNjg4NTc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5ODYxMDc0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFRDUC1BTykgQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2Ugd2UndmUgZ290IGEgbW9kaWZpY2F0aW9uIHRvIGBuZXQvaXB2NC90Y3BfYW8uY2AsIHNwZWNpZmljYWxseSBpbXBhY3RpbmcgdGhlIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IGxvb3Agd2l0aGluIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB0aGlzIG9uZTpcblxuYGBgY1xuXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuXHRcdGlmICh0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cdTAwM2VwcmVmaXhsZW4sXG5cdFx0XHRcdCAgIGZhbWlseSwgLTEsIC0xKSkge1xuXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cblx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5gYGBcblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGRpdmUgaW50byBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXRzZWxmIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2FvLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2UuIFRoZSBhZGRlZCBsb29wLCBhcyBJIHNlZSBpdCwgaXMgbW9zdCBsaWtlbHkgZGVzaWduZWQgZm9yIHNvbWUgc29ydCBvZiBrZXkgbG9va3VwIG9yIGNvbmZsaWN0IHJlc29sdXRpb24sIHBhcnRpY3VsYXJseSBhcyB0aGUgY29tbWVudCBhbGx1ZGVzIHRvIGEgcGFpcmluZyB3aXRoIGB0Y3BfaW5ib3VuZF9hb19oYXNoKClgLiBUaGUgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgbWVudGFsIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBsb29wIGlzICpkb2luZyogd2l0aCB0aGUgYHRjcF9hb19rZXlfY21wYCByZXN1bHQuIEkgYXNzdW1lIGl0J3MgY2hlY2tpbmcgZm9yIHNvbWUgcHJlLWV4aXN0aW5nIGF1dGhlbnRpY2F0aW9uIGtleSBvciBjb25maWd1cmF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyBJJ2xsIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBiZWZvcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIFRDUC1BTyBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDIuMTMxMzAzMDQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTgwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb19jb25uZWN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9MTExOD1zdGF0aWMgaW50IHRjcF9hb19jYWNoZV90cmFmZmljX2tleXMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNS1cXG5uZXQvaXB2NC90Y3BfYW8uYzoxMTM2OnZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX2FvLmMtMTEzNy17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xODAwPXN0YXRpYyBpbnQgdGNwX2FvX2RlbF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTg0NC1cXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvVlJGL2V0YyksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTg0NTpcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDYtXFx0ICogaWYgdGhlcmUncyBhbnkuXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xOTQ2PXN0YXRpYyBpbnQgdGNwX2FvX2luZm9fY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE5ODgtXFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL3BvcnQvVlJGL2V0YyksXFxubmV0L2lwdjQvdGNwX2FvLmM6MTk4OTpcXHQgKiB0Y3BfYW9fY29ubmVjdF9pbml0KCkgd2lsbCBjaG9vc2UgYSBjb3JyZWN0IG1hdGNoaW5nIE1LVFxcbm5ldC9pcHY0L3RjcF9hby5jLTE5OTAtXFx0ICogaWYgdGhlcmUncyBhbnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjAyLjE3ODQ5MDgyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MTA5NjM2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVHJhY2luZyB0aGUgR2VuZXNpcyBvZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZm9yIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGVudHJ5IHBvaW50cyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgY29ubmVjdGlvbiBvcHRpb25zIGFyZSBpbml0aWFsaXplZCwgaG93IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgYW5kIHVsdGltYXRlbHksIGhvdyB0aGF0IGluaXRpYWxpemF0aW9uIGZlZWRzIGludG8gc3Vic2VxdWVudCBjb25uZWN0aW9uLXJlbGF0ZWQgc3RhdGUgY2hhbmdlcy4gTXkgZ29hbCBpcyB0byBtYXAgb3V0IHRoZSBjYWxsIHBhdGhzIGFuZCBpc29sYXRlIHRoZSBjcml0aWNhbCBkYXRhIGZsb3cuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqdXNlZCouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODowNC44ODk0NTgwODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MDY5MjIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW9fY29ubmVjdF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcF9hby5oPTI3OD12b2lkIHRjcF9hb19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjI3OTp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKTtcXG5pbmNsdWRlL25ldC90Y3BfYW8uaC0yODAtdm9pZCB0Y3BfYW9fc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oPTMyOD1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX3RpbWVfd2FpdChzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnRjcHR3LFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMzMyLVxcbmluY2x1ZGUvbmV0L3RjcF9hby5oOjMzMzpzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuaW5jbHVkZS9uZXQvdGNwX2FvLmgtMzM0LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTExMTg9c3RhdGljIGludCB0Y3BfYW9fY2FjaGVfdHJhZmZpY19rZXlzKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTExMzUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MTEzNjp2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9pcHY0L3RjcF9hby5jLTExMzcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTgwMD1zdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE4NDQtXFx0ICogbWF0Y2hpbmcgdGhlIGZ1dHVyZSBwZWVyIChhZGRyZXNzL1ZSRi9ldGMpLFxcbm5ldC9pcHY0L3RjcF9hby5jOjE4NDU6XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ2LVxcdCAqIGlmIHRoZXJlJ3MgYW55Llxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTk0Nj1zdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTg4LVxcdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9wb3J0L1ZSRi9ldGMpLFxcbm5ldC9pcHY0L3RjcF9hby5jOjE5ODk6XFx0ICogdGNwX2FvX2Nvbm5lY3RfaW5pdCgpIHdpbGwgY2hvb3NlIGEgY29ycmVjdCBtYXRjaGluZyBNS1RcXG5uZXQvaXB2NC90Y3BfYW8uYy0xOTkwLVxcdCAqIGlmIHRoZXJlJ3MgYW55Llxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQxMDE9c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDExNjpcXHR0Y3BfYW9fY29ubmVjdF9pbml0KHNrKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDExNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDYuNzYwMTU1MDA3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4MDUwOTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFRDUCBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gdGhlIGNvZGUgc2F5cyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCB3aXRoaW4gYHRjcF9jb25uZWN0X2luaXRgLiBSaWdodCwgdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEJlZm9yZSBJIHN0YXJ0IGRpc3NlY3RpbmcgdGhlIGNvZGUgaW4gZGV0YWlsLCBJIGFsd2F5cyBmaW5kIGl0IHVzZWZ1bCB0byBjaGVjayB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIGVudHJ5IGZvciBgdGNwX2FvLmNgLiBUaGF0IHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgYW55IHJlbGV2YW50IGZlYXR1cmUgZmxhZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJdCdsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBmaXJzdCAtIGNvbnRleHQgaXMga2V5LCB5b3Uga25vdy4gVGhlbiBJIGNhbiBkaXZlIGRlZXBlciB3aXRoIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjA5LjM0MDY2Njk2OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ2OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYW8ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Nz1vYmotJChDT05GSUdfWEZSTSkgKz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cXHRcXHQgICAgICB4ZnJtNF9vdXRwdXQubyB4ZnJtNF9wcm90b2NvbC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgKz0gdGNwX2FvLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MDkuMzg4MTQyMTE3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk2NTE1MzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVENQX0FPIERlcGVuZGVuY3kqKlxuXG5SaWdodCwgc28gSSBzZWUgYENPTkZJR19UQ1BfQU9gIG5lZWRzIHRvIGJlIGVuYWJsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkcmlsbCBkb3duIGFuZCBwaW5wb2ludCB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCBhbHNvLCB3aGVyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIG9yIG5vdCBpdCBzaG91bGQgYmUgZW5hYmxlZCByZXNpZGUuIEknbSBnb2luZyBzdHJhaWdodCB0byBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgYFRDUF9BT2AgYWxtb3N0IGNlcnRhaW5seSBoYXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IHRoZXJlLiBLbm93aW5nIHRoaXMsIGl0IG1ha2VzIG15IGFwcHJvYWNoIGV4dHJlbWVseSBlZmZpY2llbnQuIE5vdyBpdCdzIGEgbWF0dGVyIG9mIHF1aWNrbHkgc2Nhbm5pbmcgZm9yIHRoZSByZWxldmFudCBzZWN0aW9uIGFuZCByZXZpZXdpbmcgaXRzIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGRlZmF1bHQgc2V0dGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoxMi4zNTMyOTg1MjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjIwNDQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX0FPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz03Mjk9Y29uZmlnIERFRkFVTFRfVENQX0NPTkdcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzQzLVxcbm5ldC9pcHY0L0tjb25maWc6NzQ0OmNvbmZpZyBUQ1BfQU9cXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cXHRib29sIFxcXCJUQ1A6IEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoUkZDNTkyNSlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjEyLjYwOTUwODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2NTA3NzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUF9BTyBDb25uZWN0aW9uIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYFRDUF9BT2Ag4oCTIHRoYXQncyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgYHRjcF9hb19jb25uZWN0X2luaXRgIGZ1bmN0aW9uLiBCdXQsIGlzIHRoZXJlIGFueSAqb3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgcmlnaHQgbm93PyBMZXQncyB0cmFjZSBpdCBiYWNrLiBSaWdodCwgYHRjcF9hb19jb25uZWN0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgYnkgYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiBob3QgcGF0aHMgZm9yIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucy4gU2hvdWxkIEkgY29uY2VudHJhdGUgZXhjbHVzaXZlbHkgb24gYHRjcF9hb19jb25uZWN0X2luaXRgIGl0c2VsZj8gV2VsbCwgaXQgaXNuJ3Qgc3RhdGljLCBidXQgaXQncyBjYWxsZWQgb24gZXZlcnkgY29ubmVjdGlvbiBpZiBUQ1BfQU8gaXMgYWN0aXZlLCBzbyB0aGUgZnJlcXVlbmN5IGlzIGRlZmluaXRlbHkgYSBjb25jZXJuLiBXYWl0Li4uIEkgbmVlZCB0byBiZSBjYXJlZnVsOyBgdGNwX2Nvbm5lY3RfaW5pdGAgY2FsbHMgYHRjcF9hb19jb25uZWN0X2luaXRgLlxuXG5BbHJpZ2h0LCBtYXliZSBJIHNob3VsZCBzaGlmdCB0aGUgZm9jdXMgdG8gdGhlIHNwZWNpZmljIFRDUCBBTyBmdW5jdGlvbnMsIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZywgb3IgbW9yZSBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCB3b3VsZCBiZSBpbXBsZW1lbnRlZC4gT2theSwgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGluZ3MgbGlrZSBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBgdGNwX2FvX2luZm9fY21kYCwgYHRjcF9hb19zZXRzb2Nrb3B0YCwgYW5kIGB0Y3BfYW9fZ2V0c29ja29wdGAuIExldCdzIHRha2UgYSBsb29rIGluIGBuZXQvaXB2NC90Y3BfYW8uY2AgYW5kIGh1bnQgZm9yIHRob3NlIHNwZWNpZmljIGZ1bmN0aW9uIG5hbWVzLCBvciBvbmVzIHNpbWlsYXIuIFRoYXQncyB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoxNy4yNzQ1ODg5MDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjk4Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9hb18uKl9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2FvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2FvLmM9OTkwPXRjcF9pbmJvdW5kX2FvX2hhc2goc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTA1NS1cXHRcXHRcXHRpZiAoa2V5KVxcbm5ldC9pcHY0L3RjcF9hby5jOjEwNTY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfYW9fZGVsX2NtZCAqL1xcbm5ldC9pcHY0L3RjcF9hby5jLTEwNTctXFx0XFx0XFx0XFx0V1JJVEVfT05DRShpbmZvLVxcdTAwM2VjdXJyZW50X2tleSwga2V5KTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTEwNjgtXFx0ICogLSByZXF1ZXN0IHNvY2tldHMgd291bGQgcmFjZSBvbiB0aG9zZSBrZXkgcG9pbnRlcnNcXG5uZXQvaXB2NC90Y3BfYW8uYzoxMDY5OlxcdCAqIC0gdGNwX2FvX2RlbF9jbWQoKSBhbGxvd3MgYXN5bmMga2V5IHJlbW92YWxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMDcwLVxcdCAqL1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTU0OT1zdGF0aWMgc3RydWN0IHRjcF9hb19rZXkgKnRjcF9hb19rZXlfYWxsb2Moc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTU4MC1cXG5uZXQvaXB2NC90Y3BfYW8uYzoxNTgxOnN0YXRpYyBpbnQgdGNwX2FvX2FkZF9jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbm5ldC9pcHY0L3RjcF9hby5jLTE1ODItXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTc0Nj1zdGF0aWMgaW50IHRjcF9hb19kZWxldGVfa2V5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRjcF9hb19pbmZvICphb19pbmZvLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTc5OS0jZGVmaW5lIFRDUF9BT19ERUxfS0VZRl9BTEwgKFRDUF9BT19LRVlGX0lGSU5ERVgpXFxubmV0L2lwdjQvdGNwX2FvLmM6MTgwMDpzdGF0aWMgaW50IHRjcF9hb19kZWxfY21kKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xODAxLVxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5MjY9c3RhdGljIGludCB0Y3BfYW9fcmVxdWlyZWRfdmVyaWZ5KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTE5NDUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MTk0NjpzdGF0aWMgaW50IHRjcF9hb19pbmZvX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk0Ny1cXHRcXHRcXHQgICBzb2NrcHRyX3Qgb3B0dmFsLCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjAzNT1pbnQgdGNwX3BhcnNlX2FvKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIwNDItXFx0Y2FzZSBUQ1BfQU9fQUREX0tFWTpcXG5uZXQvaXB2NC90Y3BfYW8uYzoyMDQzOlxcdFxcdHJldHVybiB0Y3BfYW9fYWRkX2NtZChzaywgZmFtaWx5LCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvdGNwX2FvLmMtMjA0NC1cXHRjYXNlIFRDUF9BT19ERUxfS0VZOlxcbm5ldC9pcHY0L3RjcF9hby5jOjIwNDU6XFx0XFx0cmV0dXJuIHRjcF9hb19kZWxfY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ2LVxcdGNhc2UgVENQX0FPX0lORk86XFxubmV0L2lwdjQvdGNwX2FvLmM6MjA0NzpcXHRcXHRyZXR1cm4gdGNwX2FvX2luZm9fY21kKHNrLCBmYW1pbHksIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMDQ4LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjE3LjMxODg5MjkxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjM1MjU2MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIEF1dGhlbnRpY2F0aW9uIE9wdGlvbiAoVENQIEFPKSBDb2RlKipcblxuT2theSwgc28gYHRjcF9wYXJzZV9hb2AgaXMgdGhlIGluaXRpYWwgcG9pbnQgb2YgZW50cnkgZm9yIHRoZSBgc2V0c29ja29wdGAgY2FsbHMgcmVsYXRlZCB0byBUQ1AgQU8uIExldCdzIHJldmlzaXQgYHRjcF9hb19jb25uZWN0X2luaXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLlxuXG5gYGBjXG5cdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgXHUwMDI2YW9faW5mby1cdTAwM2VoZWFkLCBub2RlKSB7XG5cdFx0aWYgKHRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbixcblx0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG5cdFx0XHQvKiBwYWlycyB3aXRoIHRjcF9pbmJvdW5kX2FvX2hhc2goKSAqL1xuXHRcdFx0c3luY2hyb25pemVfcmN1KCk7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbmBgYFxuXG5BaGEhIFRoaXMgY29kZSBibG9jayBpbnRyb2R1Y2VzIGEgYHN5bmNocm9uaXplX3JjdSgpYCBjYWxsIHdpdGhpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaWYgYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoYXQncyBhIGRlZmluaXRlIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGlzIGFsdGVyYXRpb24gaGFzIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IGV4ZWN1dGlvbiBmbG93IGFuZCB0aW1pbmcgc2lnbmlmaWNhbnRseSwgYmVjYXVzZSBgc3luY2hyb25pemVfcmN1YCAqY2FuKiBibG9jaywgd2hpY2ggbWFrZXMgaXQgaW1wb3J0YW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIEl0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB0Y3BfYW9fY29ubmVjdF9pbml0YCwgYHRjcF9wYXJzZV9hb2AsIGB0Y3BfYW9fYWRkX2NtZGAsIGB0Y3BfYW9fZGVsX2NtZGAsIGFuZCBgdGNwX2FvX2luZm9fY21kYC4gR2l2ZW4gdGhhdCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgaW52b2tlZCBvbiBldmVyeSBjb25uZWN0aW9uIGF0dGVtcHQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgaG90IHBhdGguIEhvd2V2ZXIsIGl0IG9ubHkgcGVyZm9ybXMgdGhpcyBwb3RlbnRpYWxseSBibG9ja2luZyBvcGVyYXRpb24gaWYgYGFvX2luZm9gIGlzIGFjdHVhbGx5IHByZXNlbnQuIEkgc2hvdWxkIGRpdmUgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGB0Y3BfYW9fY29ubmVjdF9pbml0YCB0byB1bmRlcnN0YW5kIHRob3NlIGNvbmRpdGlvbmFsIHBhdGhzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoyMi41NTQxNTIxNjlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTM2OlxcdHZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuMTEzNzpcXHR7XFxuMTEzODpcXHRcXHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcXG4xMTM5OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW9faW5mbztcXG4xMTQwOlxcdFxcdHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xcbjExNDE6XFx0XFx0dW5pb24gdGNwX2FvX2FkZHIgKmFkZHI7XFxuMTE0MjpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5O1xcbjExNDM6XFx0XFx0aW50IGZhbWlseSwgbDNpbmRleDtcXG4xMTQ0OlxcdFxcbjExNDU6XFx0XFx0YW9faW5mbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHAtXFx1MDAzZWFvX2luZm8sXFxuMTE0NjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG4xMTQ3OlxcdFxcdGlmICghYW9faW5mbylcXG4xMTQ4OlxcdFxcdFxcdHJldHVybjtcXG4xMTQ5OlxcdFxcbjExNTA6XFx0XFx0LyogUmVtb3ZlIGFsbCBrZXlzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHBlZXIgKi9cXG4xMTUxOlxcdFxcdGZhbWlseSA9IHNrLVxcdTAwM2Vza19mYW1pbHk7XFxuMTE1MjpcXHRcXHRpZiAoZmFtaWx5ID09IEFGX0lORVQpXFxuMTE1MzpcXHRcXHRcXHRhZGRyID0gKHVuaW9uIHRjcF9hb19hZGRyICopXFx1MDAyNnNrLVxcdTAwM2Vza19kYWRkcjtcXG4xMTU0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjExNTU6XFx0XFx0ZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbjExNTY6XFx0XFx0XFx0YWRkciA9ICh1bmlvbiB0Y3BfYW9fYWRkciAqKVxcdTAwMjZzay1cXHUwMDNlc2tfdjZfZGFkZHI7XFxuMTE1NzpcXHQjZW5kaWZcXG4xMTU4OlxcdFxcdGVsc2VcXG4xMTU5OlxcdFxcdFxcdHJldHVybjtcXG4xMTYwOlxcdFxcdGwzaW5kZXggPSBsM21kZXZfbWFzdGVyX2lmaW5kZXhfYnlfaW5kZXgoc29ja19uZXQoc2spLFxcbjExNjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHNrLVxcdTAwM2Vza19ib3VuZF9kZXZfaWYpO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFxcdTAwMjZhb19pbmZvLVxcdTAwM2VoZWFkLCBub2RlKSB7XFxuMTE2NDpcXHRcXHRcXHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXFx1MDAzZXByZWZpeGxlbixcXG4xMTY1OlxcdFxcdFxcdFxcdFxcdCAgIGZhbWlseSwgLTEsIC0xKSkge1xcbjExNjY6XFx0XFx0XFx0XFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cXG4xMTY3OlxcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbjExNjg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTE2OTpcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXHR9XFxuMTE3MTpcXHRcXG4xMTcyOlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoa2V5LCBuZXh0LCBcXHUwMDI2YW9faW5mby1cXHUwMDNlaGVhZCwgbm9kZSkge1xcbjExNzM6XFx0XFx0XFx0aWYgKCF0Y3BfYW9fa2V5X2NtcChrZXksIGwzaW5kZXgsIGFkZHIsIGtleS1cXHUwMDNlcHJlZml4bGVuLCBmYW1pbHksIC0xLCAtMSkpXFxuMTE3NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTc1OlxcdFxcbjExNzY6XFx0XFx0XFx0aWYgKGtleSA9PSBhb19pbmZvLVxcdTAwM2VjdXJyZW50X2tleSlcXG4xMTc3OlxcdFxcdFxcdFxcdGFvX2luZm8tXFx1MDAzZWN1cnJlbnRfa2V5ID0gTlVMTDtcXG4xMTc4OlxcdFxcdFxcdGlmIChrZXkgPT0gYW9faW5mby1cXHUwMDNlcm5leHRfa2V5KVxcbjExNzk6XFx0XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlcm5leHRfa2V5ID0gTlVMTDtcXG4xMTgwOlxcdFxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNmtleS1cXHUwMDNlbm9kZSk7XFxuMTE4MTpcXHRcXHRcXHRhdG9taWNfc3ViKHRjcF9hb19zaXplb2Zfa2V5KGtleSksIFxcdTAwMjZzay1cXHUwMDNlc2tfb21lbV9hbGxvYyk7XFxuMTE4MjpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2a2V5LVxcdTAwM2VyY3UsIHRjcF9hb19rZXlfZnJlZV9yY3UpO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRrZXkgPSB0cC1cXHUwMDNlYWZfc3BlY2lmaWMtXFx1MDAzZWFvX2xvb2t1cChzaywgc2ssIC0xLCAtMSk7XFxuMTE4NjpcXHRcXHRpZiAoa2V5KSB7XFxuMTE4NzpcXHRcXHRcXHQvKiBpZiBjdXJyZW50X2tleSBvciBybmV4dF9rZXkgd2VyZSBub3QgcHJvdmlkZWQsXFxuMTE4ODpcXHRcXHRcXHQgKiB1c2UgdGhlIGZpcnN0IGtleSBtYXRjaGluZyB0aGUgcGVlclxcbjExODk6XFx0XFx0XFx0ICovXFxuMTE5MDpcXHRcXHRcXHRpZiAoIWFvX2luZm8tXFx1MDAzZWN1cnJlbnRfa2V5KVxcbjExOTE6XFx0XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlY3VycmVudF9rZXkgPSBrZXk7XFxuMTE5MjpcXHRcXHRcXHRpZiAoIWFvX2luZm8tXFx1MDAzZXJuZXh0X2tleSlcXG4xMTkzOlxcdFxcdFxcdFxcdGFvX2luZm8tXFx1MDAzZXJuZXh0X2tleSA9IGtleTtcXG4xMTk0OlxcdFxcdFxcdHRwLVxcdTAwM2V0Y3BfaGVhZGVyX2xlbiArPSB0Y3BfYW9fbGVuX2FsaWduZWQoa2V5KTtcXG4xMTk1OlxcdFxcbjExOTY6XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlbGlzbiA9IGh0b25sKHRwLVxcdTAwM2V3cml0ZV9zZXEpO1xcbjExOTc6XFx0XFx0XFx0YW9faW5mby1cXHUwMDNlc25kX3NuZSA9IDA7XFxuMTE5ODpcXHRcXHR9IGVsc2Uge1xcbjExOTk6XFx0XFx0XFx0LyogQ2FuJ3QgaGFwcGVuOiB0Y3BfY29ubmVjdCgpIHZlcmlmaWVzIHRoYXQgdGhlcmUnc1xcbjEyMDA6XFx0XFx0XFx0ICogYXQgbGVhc3Qgb25lIHRjcC1hbyBrZXkgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgcGVlci5cXG4xMjAxOlxcdFxcdFxcdCAqL1xcbjEyMDI6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbjEyMDM6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVxcdTAwM2Vhb19pbmZvLCBOVUxMKTtcXG4xMjA0OlxcdFxcdFxcdGtmcmVlKGFvX2luZm8pO1xcbjEyMDU6XFx0XFx0fVxcbjEyMDY6XFx0fVxcbjEyMDc6XFx0XFxuMTIwODpcXHR2b2lkIHRjcF9hb19lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2spXFxuMTIwOTpcXHR7XFxuMTIxMDpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2luZm8gKmFvO1xcbjEyMTE6XFx0XFx0c3RydWN0IHRjcF9hb19rZXkgKmtleTtcXG4xMjEyOlxcdFxcbjEyMTM6XFx0XFx0YW8gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRjcF9zayhzayktXFx1MDAzZWFvX2luZm8sXFxuMTIxNDpcXHRcXHRcXHRcXHRcXHQgICAgICAgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKTtcXG4xMjE1OlxcdFxcdGlmICghYW8pXFxuMTIxNjpcXHRcXHRcXHRyZXR1cm47XFxuMTIxNzpcXHRcXG4xMjE4OlxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksIFxcdTAwMjZhby1cXHUwMDNlaGVhZCwgbm9kZSwgbG9ja2RlcF9zb2NrX2lzX2hlbGQoc2spKVxcbjEyMTk6XFx0XFx0XFx0dGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhzaywgYW8sIGtleSk7XFxuMTIyMDpcXHR9XFxuMTIyMTpcXHRcXG4xMjIyOlxcdHZvaWQgdGNwX2FvX2ZpbmlzaF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xMjIzOlxcdHtcXG4xMjI0OlxcdFxcdHN0cnVjdCB0Y3BfYW9faW5mbyAqYW87XFxuMTIyNTpcXHRcXHRzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5O1xcbjEyMjY6XFx0XFxuMTIyNzpcXHRcXHRhbyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodGNwX3NrKHNrKS1cXHUwMDNlYW9faW5mbyxcXG4xMjI4OlxcdFxcdFxcdFxcdFxcdCAgICAgICBsb2NrZGVwX3NvY2tfaXNfaGVsZChzaykpO1xcbjEyMjk6XFx0XFx0aWYgKCFhbylcXG4xMjMwOlxcdFxcdFxcdHJldHVybjtcXG4xMjMxOlxcdFxcbjEyMzI6XFx0XFx0Lyogc2sgd2l0aCBUQ1BfUkVQQUlSX09OIGRvZXMgbm90IGhhdmUgc2tiIGluIHRjcF9maW5pc2hfY29ubmVjdCAqL1xcbjEyMzM6XFx0XFx0aWYgKHNrYilcXG4xMjM0OlxcdFxcdFxcdFdSSVRFX09OQ0UoYW8tXFx1MDAzZXJpc24sIHRjcF9oZHIoc2tiKS1cXHUwMDNlc2VxKTtcXG4xMjM1OlxcdFxcdGFvLVxcdTAwM2VyY3Zfc25lID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjIuNTU0MzIwMzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjI3MTM3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBhcHBlYXJzIHRoZSBwcmltYXJ5IGFsdGVyYXRpb24gaXMgd2l0aGluIGB0Y3BfYW9fY29ubmVjdF9pbml0YC4gVGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGEgbmV3IGxvb3AsIGVzc2VudGlhbGx5IHBlcmZvcm1pbmcgYSBrZXkgbWF0Y2hpbmcgY2hlY2sgYWdhaW5zdCB0aGUgcGVlci4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhlIGNhbGwgdG8gYHN5bmNocm9uaXplX3JjdSgpYCB3aGVuIGEgbWF0Y2ggaXMgZm91bmQuIEhtbSwgdGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gTGV0J3Mgc2VlLi4uIGBUQ1BfQU9gIGlzIHRoZSBvYnZpb3VzIG9uZSwgc28gbGV0J3Mgc3RhcnQgdGhlcmUuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBhY3QgYW5kIGFueSBpbXBsaWNpdCBkZXBlbmRlbmNpZXMsIEknbGwgZGl2ZSBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCB0byBzZWUgaWYgYFRDUF9BT2AgcmVsaWVzIG9uIGFueXRoaW5nIGVsc2UuIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBjb25maWd1cmF0aW9uIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjUuODE3MDM2MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTQ4NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUQ1BfQU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03NDMtXFxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xcbm5ldC9pcHY0L0tjb25maWctNzQ1LVxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjUuODY2MTg4ODQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjEzMzEyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUQ1BfQU8gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgZnVsbCB2aWV3IG9mIHRoZSBgY29uZmlnIFRDUF9BT2AgYmxvY2suIFdoYXQgYXJlIHRoZSBzcGVjaWZpYyBzZXR0aW5ncz8gSSBjYW4ndCByZWFsbHkgbWFrZSBhIGp1ZGdtZW50IG9yIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aXRob3V0IHNlZWluZyAqZXZlcnl0aGluZyouIEkgbmVlZCB0byBzZWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgdG8gYmUgYWJsZSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb21wYXRpYmlsaXR5LiBKdXN0IGtub3dpbmcgKnRoYXQqIFRDUF9BTyBpcyBjb25maWd1cmVkIGlzbid0IG5lYXJseSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYmUgdXNlZnVsLiBJIG5lZWQgZ3JhbnVsYXJpdHkuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3ODAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQyMTo0ODoyOC42Mjc1MjMwOTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDQ6XFx0Y29uZmlnIFRDUF9BT1xcbiA3NDU6XFx0XFx0Ym9vbCBcXFwiVENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXFxcIlxcbiA3NDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXFxuIDc0NzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuIDc0ODpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gNzQ5OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuIDc1MDpcXHRcXHRkZXBlbmRzIG9uIDY0QklUICMgc2VxLW51bWJlciBleHRlbnNpb24gbmVlZHMgV1JJVEVfT05DRSh1NjQpXFxuIDc1MTpcXHRcXHRoZWxwXFxuIDc1MjpcXHRcXHQgIFRDUC1BTyBzcGVjaWZpZXMgdGhlIHVzZSBvZiBzdHJvbmdlciBNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzIChNQUNzKSxcXG4gNzUzOlxcdFxcdCAgcHJvdGVjdHMgYWdhaW5zdCByZXBsYXlzIGZvciBsb25nLWxpdmVkIFRDUCBjb25uZWN0aW9ucywgYW5kXFxuIDc1NDpcXHRcXHQgIHByb3ZpZGVzIG1vcmUgZGV0YWlscyBvbiB0aGUgYXNzb2NpYXRpb24gb2Ygc2VjdXJpdHkgd2l0aCBUQ1BcXG4gNzU1OlxcdFxcdCAgY29ubmVjdGlvbnMgdGhhbiBUQ1AgTUQ1IChTZWUgUkZDNTkyNSlcXG4gNzU2OlxcdFxcbiA3NTc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiA3NTg6XFx0XFxuIDc1OTpcXHRjb25maWcgVENQX01ENVNJR1xcbiA3NjA6XFx0XFx0Ym9vbCBcXFwiVENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVxcXCJcXG4gNzYxOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX01ENVxcbiA3NjI6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gNzYzOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MjguNjI3NjA4Nzg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzY1MTA2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1BfQU8gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBjZW50ZXJzIGFyb3VuZCBgVENQX0FPYCwgYW5kIHRoYXQncyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGZvY3VzIG9uLiBJbml0aWFsbHksIEkgdGhvdWdodCBJJ2QgbmVlZCB0byB0YXJnZXQgdGhlc2Ugc3ltYm9sczogYHRjcF9hb19jb25uZWN0X2luaXRgLCBgdGNwX3BhcnNlX2FvYCwgYHRjcF9hb19hZGRfY21kYCwgYHRjcF9hb19kZWxfY21kYCwgYW5kIGB0Y3BfYW9faW5mb19jbWRgLlxuXG5Ib2xkIG9uLCB0aG91Z2guIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBpcyBjYWxsZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGZyb20gYHRjcF92NF9jb25uZWN0YCBhbmQgYHRjcF92Nl9jb25uZWN0YC4gVGhhdCdzIGEgaG90IHBhdGgsIGJ1dCBpdCBvbmx5ICpkb2VzKiBzb21ldGhpbmcgaWYgYGFvX2luZm9gIGlzIHByZXNlbnQsIHJpZ2h0PyBNeSBpbml0aWFsIGluY2xpbmF0aW9uIHdhcyB0byBpbmNsdWRlIGl0IGJlY2F1c2UgdGhlIHBhdGNoIG1vZGlmaWVzIGl0LCBidXQgSSBuZWVkIHRvIGJlIHN0cmF0ZWdpYy4gSXQgbWlnaHQgc2tldyBteSBmdXp6aW5nIHRvd2FyZHMgYWxsIGNvbm5lY3RzIGlmIEkgZm9jdXMgdGhlcmUgYWxvbmUuXG5cbmB0Y3BfcGFyc2VfYW9gIGlzIHRoZSBgc2V0c29ja29wdGAgZW50cnkgcG9pbnQuIFRoYXQncyBhIHNvbGlkIGNhbmRpZGF0ZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgdGhlIG90aGVyIGNob2ljZXMgYXJlIGdvb2QuIExldCdzIHNlZSBpZiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgaXMgc3RhdGljLiBOb3BlLCBpdCdzIG5vdC4gSSBjYW4gaW5jbHVkZSBpdC4gT2theSwgb3JpZ2luYWwgcGxhbiB3YXMgdG8gaW5jbHVkZSBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfcGFyc2VfYW9gLCBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBhbmQgYHRjcF9hb19pbmZvX2NtZGAuXG5cbkhvd2V2ZXIsIGB0Y3BfYW9fY29ubmVjdF9pbml0YCBpcyBjYWxsZWQgb24gKmV2ZXJ5KiBjb25uZWN0LiBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1vZGlmaWVzIGB0Y3BfYW9fY29ubmVjdF9pbml0YC5cblxuQWZ0ZXIgcmUtZXZhbHVhdGluZyB0aGUgb3B0aW9ucywgaXQgc2VlbXMgYmVzdCB0byBqdXN0IHRhcmdldCBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAgYW5kIGB0Y3BfcGFyc2VfYW9gLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIGNvbmZpZ3MgSSBuZWVkIHRvIGNvbnNpZGVyLiBOb3BlLCBgVENQX0FPYCBkZXBlbmRzIG9uIGA2NEJJVGAsIGJ1dCB0aGF0J3MgaXQuIFNvIGBUQ1BfQU9gIGFsb25lIGlzIHN1ZmZpY2llbnQuXG5cbkxldCdzIHN1bW1hcml6ZTpcbi0gICAqKldvcnRoRnV6emluZzogdHJ1ZSoqIChCZWNhdXNlIG9mIHRoZSBgc3luY2hyb25pemVfcmN1KClgIGNhbGwgYWRkZWQgaW4gYHRjcF9hb19jb25uZWN0X2luaXRgIHVuZGVyIHNwZWNpZmljIGtleSBjb25kaXRpb25zLiBUaGlzIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGNhbiBpbXBhY3QgZXhlY3V0aW9uIGZsb3cgYW5kIHRpbWluZy4pXG4tICAgKipGb2N1c1N5bWJvbHM6IHRjcF9hb19jb25uZWN0X2luaXQsIHRjcF9wYXJzZV9hbyoqIChLZWVwaW5nIHRoZSBjaG9pY2VzIHRvIG5vbi1zdGF0aWMsIEFQSS1lbnRyeXBvaW50IGZ1bmN0aW9ucy4pXG4tICAgKipFbmFibGVDb25maWdzOiBUQ1BfQU8qKlxuXG5XYWl0LCBsZXQncyBtYWtlIHN1cmUgdGhlIHN5bWJvbHMgYXJlIGFwcHJvcHJpYXRlLiBgdGNwX2FvX2FkZF9jbWRgLCBgdGNwX2FvX2RlbF9jbWRgLCBhbmQgYHRjcF9hb19pbmZvX2NtZGAgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZXkncmUgaW50ZXJuYWwgaGVscGVycywgYW5kIEkgd2FudCB0byBhdm9pZCB0aG9zZSAodGhlIHByb21wdCByZWNvbW1lbmRzIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMpLiBMZXQncyBkb3VibGUtY2hlY2suIFl1cCwgdGhleSdyZSBzdGF0aWMuXG5cblNvLCBJIHdpbGwgc3RpY2sgd2l0aCB0aGUgdXBkYXRlZDogYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYC4gVGhhdCdzIGEgbXVjaCBtb3JlIHRhcmdldGVkIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6MzkuMzkyNzE4NDAyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcyMzM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IHRjcF9hb18uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9hby5jPTYxNj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9oZWFkZXIoc3RydWN0IHRjcF9hb19tYWNfY3R4ICptYWNfY3R4LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtNjQ0LVxcbm5ldC9pcHY0L3RjcF9hby5jOjY0NTppbnQgdGNwX2FvX2hhc2hfaGRyKHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIGNoYXIgKmFvX2hhc2gsXFxubmV0L2lwdjQvdGNwX2FvLmMtNjQ2LVxcdFxcdCAgICBzdHJ1Y3QgdGNwX2FvX2tleSAqa2V5LCBjb25zdCB1OCAqdGtleSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTY4Mj1zdGF0aWMgdm9pZCB0Y3BfYW9faGFzaF9za2JfZGF0YShzdHJ1Y3QgdGNwX2FvX21hY19jdHggKm1hY19jdHgsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy03MTItXFxubmV0L2lwdjQvdGNwX2FvLmM6NzEzOmludCB0Y3BfYW9faGFzaF9za2IodW5zaWduZWQgc2hvcnQgaW50IGZhbWlseSxcXG5uZXQvaXB2NC90Y3BfYW8uYy03MTQtXFx0XFx0ICAgIGNoYXIgKmFvX2hhc2gsIHN0cnVjdCB0Y3BfYW9fa2V5ICprZXksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz03NzI9c3RydWN0IHRjcF9hb19rZXkgKnRjcF92NF9hb19sb29rdXAoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTc4MS1cXG5uZXQvaXB2NC90Y3BfYW8uYzo3ODI6aW50IHRjcF9hb19wcmVwYXJlX3Jlc2V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC90Y3BfYW8uYy03ODMtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y3BfYW9faGRyICphb2gsIGludCBsM2luZGV4LCB1MzIgc2VxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MTIyMj12b2lkIHRjcF9hb19maW5pc2hfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQwLVxcbm5ldC9pcHY0L3RjcF9hby5jOjEyNDE6aW50IHRjcF9hb19jb3B5X2FsbF9tYXRjaGluZyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzayxcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMjQyLVxcdFxcdFxcdCAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmM9MjA5ND1zdGF0aWMgaW50IHRjcF9hb19jb3B5X21rdHNfdG9fdXNlcihjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMjk3LVxcbm5ldC9pcHY0L3RjcF9hby5jOjIyOTg6aW50IHRjcF9hb19nZXRfbWt0cyhzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjI5OS17XFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEwLVxcbm5ldC9pcHY0L3RjcF9hby5jOjIzMTE6aW50IHRjcF9hb19nZXRfc29ja19pbmZvKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG5uZXQvaXB2NC90Y3BfYW8uYy0yMzEyLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jLTIzNjUtXFxubmV0L2lwdjQvdGNwX2FvLmM6MjM2NjppbnQgdGNwX2FvX3NldF9yZXBhaXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbm5ldC9pcHY0L3RjcF9hby5jLTIzNjcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMC1cXG5uZXQvaXB2NC90Y3BfYW8uYzoyNDAxOmludCB0Y3BfYW9fZ2V0X3JlcGFpcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxubmV0L2lwdjQvdGNwX2FvLmMtMjQwMi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjM5LjQ0MDQ0OTU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzY1NTkyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBBTyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgYHRjcF9wYXJzZV9hb2AgaXNuJ3Qgc2hvd2luZyB1cCBpbiB0aGUgaW5pdGlhbCBzeW1ib2wgbGlzdCBiZWNhdXNlIGl0IGRpZG4ndCBtYXRjaCB0aGUgcmVnZXggYF5pbnQgdGNwX2FvXy4qYC4gSSBoYWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCB5ZXMsIGl0J3MgZGVmaW5pdGVseSBub24tc3RhdGljOiBgaW50IHRjcF9wYXJzZV9hbyhzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksIHNvY2twdHJfdCBvcHR2YWwsIGludCBvcHRsZW4pYC4gR29vZC4gVGhpcyBjb25maXJtcyB0aGF0IGJvdGggYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcmUgdmFsaWQgc3ltYm9scyB0byBmb2N1cyBvbi4gVGhleSB3aWxsIGJvdGggYmUgaW5zdHJ1bWVudGFsLlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYHRjcF9hb19jb25uZWN0X2luaXRgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgYSBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBUQ1AgQU8ga2V5cy4gVGhpcyBsb29wIGlzIG1lYW50IHRvIGNoZWNrIGZvciBhIG1hdGNoIGJldHdlZW4gdGhlIGxvY2FsIGFuZCBwZWVyIGtleXMuIENyaXRpY2FsbHksIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIGl0IHRoZW4gY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBtb2RpZmljYXRpb24gdG8gaG93IHRoZSBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiBwcm9jZWVkcywgaW1wYWN0aW5nIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgcG90ZW50aWFsbHkgdGhlIHRpbWluZyBvZiBzcGVjaWZpYyBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZSB3aWxsIGJlIGhpdCB3aGVuIFRDUCBBTyBpcyBlbmFibGVkIGFuZCBjb25maWd1cmVkIGluIHRoZSBzeXN0ZW0uXG5cbkknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIEknbGwgdXNlIGBUQ1BfQU9gIGFzIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgYHRjcF9hb19jb25uZWN0X2luaXRgIGFuZCBgdGNwX3BhcnNlX2FvYCBhcyB0aGUgZm9jdXMgc3ltYm9scy4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGUgZGlyZWN0IGZ1bmN0aW9uYWwgY2hhbmdlIGFuZCBhc3NvY2lhdGVkIHRpbWluZyBpbXBhY3RzIHRvIG1ha2UgaXQgZXhwbGljaXQuXG5cbkknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc4MiwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDUuMDc3MDEyMDNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjkxNzMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVENQX0FPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICAgIFwidGNwX3BhcnNlX2FvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRjcF9hb19jb25uZWN0X2luaXRgIHRvIGFkZCBhIGxvb3AgdGhhdCBjaGVja3MgaWYgYW55IFRDUCBBTyBrZXkgbWF0Y2hlcyB0aGUgcGVlci4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgaXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBleGVjdXRpb24gZmxvdyBhbmQgdGltaW5nIGR1cmluZyBUQ1AgY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbi4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gVENQIEFPIGlzIGVuYWJsZWQgYW5kIGNvbmZpZ3VyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ1LjE0OTkzNTY3N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4NzIxNDkyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ1LjE1MDQwMDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4OTg2NzQ2OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzYWFlZWEwZGY3ZTJjMTA5NWM2YmE4ZjhiNzg5NzUyMjczZGNiZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDIxOjQ3OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2FvLmMgYi9uZXQvaXB2NC90Y3BfYW8uY1xuaW5kZXggZTRlYzYwYTMzNDk2My4uNTA5NDI2NzQ0N2FlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9hby5jXG4rKysgYi9uZXQvaXB2NC90Y3BfYW8uY1xuQEAgLTExNjAsNiArMTE2MCwxNSBAQCB2b2lkIHRjcF9hb19jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxuIFx0bDNpbmRleCA9IGwzbWRldl9tYXN0ZXJfaWZpbmRleF9ieV9pbmRleChzb2NrX25ldChzayksXG4gXHRcdFx0XHRcdFx0IHNrLVx1MDAzZXNrX2JvdW5kX2Rldl9pZik7XG4gXG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeShrZXksIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuK1x0XHRpZiAodGNwX2FvX2tleV9jbXAoa2V5LCBsM2luZGV4LCBhZGRyLCBrZXktXHUwMDNlcHJlZml4bGVuLFxuK1x0XHRcdFx0ICAgZmFtaWx5LCAtMSwgLTEpKSB7XG4rXHRcdFx0LyogcGFpcnMgd2l0aCB0Y3BfaW5ib3VuZF9hb19oYXNoKCkgKi9cbitcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIG5leHQsIFx1MDAyNmFvX2luZm8tXHUwMDNlaGVhZCwgbm9kZSkge1xuIFx0XHRpZiAoIXRjcF9hb19rZXlfY21wKGtleSwgbDNpbmRleCwgYWRkciwga2V5LVx1MDAzZXByZWZpeGxlbiwgZmFtaWx5LCAtMSwgLTEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDUuMTUwNDAxNzI4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NTc2MDU3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQLUFPIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9pcHY0L3RjcF9hby5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgbG9vcCBpbiBgdGNwX2FvX2Nvbm5lY3RfaW5pdGAuIEkgc2VlIGl0J3MgaXRlcmF0aW5nIHRocm91Z2ggYGFvX2luZm8tXHUwMDNlaGVhZGAgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYW5kIGluc2lkZSB0aGUgbG9vcCwgaXQncyBjYWxsaW5nIGB0Y3BfYW9fa2V5X2NtcGAgdG8gY29tcGFyZSBhIGtleS4gSWYgYSBtYXRjaCBpcyBmb3VuZCwgd2hpY2ggc3VnZ2VzdHMgYSBrZXkgY29uZmxpY3QgZHVyaW5nIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiwgYHN5bmNocm9uaXplX3JjdSgpYCBpcyBjYWxsZWQsIGFuZCB0aGUgbG9vcCBicmVha3MuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaGFzIHRvIGJlIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24gZml4LiBHaXZlbiB0aGUgY29udGV4dCBhbmQgdGhlIHVzZSBvZiBgc3luY2hyb25pemVfcmN1KClgLCBteSBndXQgc2F5cyBpdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gUkNVIChSZWFkLUNvcHkgVXBkYXRlKSwgbGlrZWx5IHRvIHByZXZlbnQgc29tZSBraW5kIG9mIHVzZS1hZnRlci1mcmVlIG9yIGEgcmFjZSBjb25kaXRpb24gd2hlbiBtYW5hZ2luZyBUQ1AtQU8ga2V5cy4gSXQncyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUsIHNvIGl0J3MgYWxsIGFib3V0IG9yZGVyaW5nIG1lbW9yeSBhY2Nlc3Nlcy5cblxuSSBkb24ndCBzZWUgYW55IG9idmlvdXMgcmVkIGZsYWdzIGxpa2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeTsgbm90aGluZydzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlIGVpdGhlci4gSXQgYXBwZWFycyB0byBiZSBhIGZvY3VzZWQgYWRkaXRpb24gdG8gZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24uIFRoYXQncyBhIGdvb2Qgc2lnbiwgYSBmb2N1c2VkIGZpeCBpcyB1c3VhbGx5IHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcmVzdCBvZiB0aGUgYHRjcF9hb19jb25uZWN0X2luaXRgIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBsb29wIGFuZCBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudCwgYnV0IGl0J3MgbG9va2luZyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCB0byBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDIxOjQ4OjQ5LjkwODAxMDY0NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIxNDg4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2FvX2Nvbm5lY3RfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfYW8uYz0xMTE4PXN0YXRpYyBpbnQgdGNwX2FvX2NhY2hlX3RyYWZmaWNfa2V5cyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM1LVxcbm5ldC9pcHY0L3RjcF9hby5jOjExMzY6dm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTM3LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE4MDA9c3RhdGljIGludCB0Y3BfYW9fZGVsX2NtZChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IGludCBmYW1pbHksXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xODQ0LVxcdCAqIG1hdGNoaW5nIHRoZSBmdXR1cmUgcGVlciAoYWRkcmVzcy9WUkYvZXRjKSxcXG5uZXQvaXB2NC90Y3BfYW8uYzoxODQ1OlxcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXFxubmV0L2lwdjQvdGNwX2FvLmMtMTg0Ni1cXHQgKiBpZiB0aGVyZSdzIGFueS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9hby5jPTE5NDY9c3RhdGljIGludCB0Y3BfYW9faW5mb19jbWQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBpbnQgZmFtaWx5LFxcbi0tXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk4OC1cXHQgKiBtYXRjaGluZyB0aGUgZnV0dXJlIHBlZXIgKGFkZHJlc3MvcG9ydC9WUkYvZXRjKSxcXG5uZXQvaXB2NC90Y3BfYW8uYzoxOTg5OlxcdCAqIHRjcF9hb19jb25uZWN0X2luaXQoKSB3aWxsIGNob29zZSBhIGNvcnJlY3QgbWF0Y2hpbmcgTUtUXFxubmV0L2lwdjQvdGNwX2FvLmMtMTk5MC1cXHQgKiBpZiB0aGVyZSdzIGFueS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NDkuOTYwMTY0NDQyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzY5NTc0NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb29wIHRoYXQgY2FsbHMgYHN5bmNocm9uaXplX3JjdSgpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3IgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoaXMga2luZCBvZiBmaXggdXN1YWxseSBzY3JlYW1zIFwiS0FTQU4gZm91bmQgc29tZXRoaW5nIVwiIGFuZCBpcyBsaWtlbHkgcmVzb2x2aW5nIGFuIGlzc3VlIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLiBJJ20gcXVpdGUgY29uZmlkZW50IHRoYXQgdGhlcmUgaXNuJ3QgYSBzaXR1YXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrYWdlIGlzIHByZXNlbnQgaGVyZS4gVGhlcmVmb3JlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoaXMgbG9va3MgbGlrZSBhIHN0YW5kYXJkIEtBU0FOIG1pdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDIsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMjE6NDg6NTQuMTM3MTI1MjU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGFuIFJDVSBzeW5jaHJvbml6YXRpb24gc3RlcCAoYHN5bmNocm9uaXplX3JjdSgpYCkgaW4gYHRjcF9hb19jb25uZWN0X2luaXQoKWAgd2hlbiBhIG1hdGNoaW5nIGtleSBpcyBmb3VuZC4gVGhpcyBpcyBhIGZpeCBmb3IgYSByYWNlIGNvbmRpdGlvbiBvciBhIHVzZS1hZnRlci1mcmVlIGJ1Zywgd2hpY2ggYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIHN0ZXAgKGBzeW5jaHJvbml6ZV9yY3UoKWApIGluIGB0Y3BfYW9fY29ubmVjdF9pbml0KClgIHdoZW4gYSBtYXRjaGluZyBrZXkgaXMgZm91bmQuIFRoaXMgaXMgYSBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gb3IgYSB1c2UtYWZ0ZXItZnJlZSBidWcsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[1] Phase: Succeeded StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-16 21:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-16 21:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2] Phase: Succeeded StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-16 21:49:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-16 21:49:05 +0000 UTC FinishedAt: 2026-08-16 21:49:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2269378726/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-16 21:49:15 +0000 UTC FinishedAt: 2026-08-16 22:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-16 21:49:15 +0000 UTC FinishedAt: 2026-08-16 22:05:50 +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:*a05ad0d8-d3d5-48db-a9a4-f81748bbff7d,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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2269378726/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": "100b80e5-6c76-43cf-9f3d-bab069898e28", "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-workflow8dxmc/series-workflow8dxmc-build-action-3104446780/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-16 21:49:15 +0000 UTC FinishedAt: 2026-08-16 22:05:40 +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:*a05ad0d8-d3d5-48db-a9a4-f81748bbff7d,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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2269378726/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": "100b80e5-6c76-43cf-9f3d-bab069898e28", "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-workflow8dxmc/series-workflow8dxmc-build-action-3104446780/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-16 22:05:50 +0000 UTC FinishedAt: 2026-08-16 22:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-16 22:05:50 +0000 UTC FinishedAt: 2026-08-16 22:05:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-16 22:05:50 +0000 UTC FinishedAt: 2026-08-16 22:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-16 22:05:50 +0000 UTC FinishedAt: 2026-08-16 22:05:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2169605369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-16 22:06:00 +0000 UTC FinishedAt: 2026-08-16 22:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-16 22:06:00 +0000 UTC FinishedAt: 2026-08-16 22:07:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*100b80e5-6c76-43cf-9f3d-bab069898e28,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-workflow8dxmc/series-workflow8dxmc-build-action-3104446780/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-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-16 22:08:09 +0000 UTC FinishedAt: 2026-08-16 22:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-16 22:08:09 +0000 UTC FinishedAt: 2026-08-16 22:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-16 22:08:09 +0000 UTC FinishedAt: 2026-08-16 22:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-16 22:08:09 +0000 UTC FinishedAt: 2026-08-16 22:24:59 +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:*a05ad0d8-d3d5-48db-a9a4-f81748bbff7d,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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2169605369/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": "94f8c7a5-f067-4b9e-ac53-e8b5182f34df", "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-workflow8dxmc/series-workflow8dxmc-build-action-1152208597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-16 22:08:09 +0000 UTC FinishedAt: 2026-08-16 22:24:49 +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:*a05ad0d8-d3d5-48db-a9a4-f81748bbff7d,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-workflow8dxmc/series-workflow8dxmc-convert-artifact-2169605369/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": "94f8c7a5-f067-4b9e-ac53-e8b5182f34df", "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-workflow8dxmc/series-workflow8dxmc-build-action-1152208597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-16 22:24:59 +0000 UTC FinishedAt: 2026-08-16 22:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-16 22:24:59 +0000 UTC FinishedAt: 2026-08-16 22:24:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-16 22:24:59 +0000 UTC FinishedAt: 2026-08-16 22:27:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-16 22:24:59 +0000 UTC FinishedAt: 2026-08-16 22:26:54 +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:*94f8c7a5-f067-4b9e-ac53-e8b5182f34df,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-workflow8dxmc/series-workflow8dxmc-build-action-1152208597/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-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +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":["tcp_ao_connect_init","tcp_parse_ao"],"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:*100b80e5-6c76-43cf-9f3d-bab069898e28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94f8c7a5-f067-4b9e-ac53-e8b5182f34df,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-workflow8dxmc/series-workflow8dxmc-build-action-3104446780/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-workflow8dxmc/series-workflow8dxmc-build-action-1152208597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-16 22:27:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-16 22:27:08 +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":["tcp_ao_connect_init","tcp_parse_ao"],"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-workflow8dxmc/series-workflow8dxmc-convert-artifact-1239207022/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-16 22:27:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-16 22:27:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-16 22:27:04 +0000 UTC FinishedAt: 2026-08-16 22:27:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-16 22:27:14 +0000 UTC FinishedAt: 2026-08-17 01:30:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dxmc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_ao_connect_init","tcp_parse_ao"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["TCP_AO"],"series_id":"dadb92ea-650a-4ea6-aacd-5dd419a91c09","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-16 22:27:14 +0000 UTC FinishedAt: 2026-08-17 01:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*100b80e5-6c76-43cf-9f3d-bab069898e28,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*94f8c7a5-f067-4b9e-ac53-e8b5182f34df,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-workflow8dxmc/series-workflow8dxmc-build-action-3104446780/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-workflow8dxmc/series-workflow8dxmc-build-action-1152208597/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-workflow8dxmc/series-workflow8dxmc-convert-artifact-1239207022/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,}