Name: series-workflow5t285 Phase: Succeeded StartedAt: 2026-09-08 18:14:10 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[0] Phase: Succeeded StartedAt: 2026-09-08 18:14:10 +0000 UTC FinishedAt: 2026-09-08 18:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 18:14:10 +0000 UTC FinishedAt: 2026-09-08 18:38:54 +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": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "IPV6" ], "series_id": "00c1dbb2-aad6-47c8-ad80-50869f01b0b2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "get_ipv6_ext_hdrs", "parse_ipv6hdr", "ovs_flow_key_extract", "ovs_flow_key_extract_userspace" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZXRfaXB2Nl9leHRfaGRycyYjMzQ7LAogICAgJiMzNDtwYXJzZV9pcHY2aGRyJiMzNDssCiAgICAmIzM0O292c19mbG93X2tleV9leHRyYWN0JiMzNDssCiAgICAmIzM0O292c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuaW5kZXggNDZjMWQ2NmFhZDhjMy4uODY4ZDlmZGYzYWZkZiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbiBcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XG4tXHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IElQUFJPVE9fRlJBR01FTlQgfFxuJiM0MztcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gXHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5AQCAtMzAxLDcgJiM0MzszMDEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gXHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuLVx0XHRcdCAgICAgICBJUFBST1RPX0ZSQUdNRU5UIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuJiM0MztcdFx0XHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcbiBcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiBcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgICAmIzM0O3BhcnNlX2lwdjZoZHImIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3QmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCmluZGV4IDQ2YzFkNjZhYWQ4YzMuLjg2OGQ5ZmRmM2FmZGYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwpAQCAtMjg4LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsCiAJCQlpZiAoKmV4dF9oZHJzICZhbXA7IE9GUElFSDEyX0VTUCkKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7CiAJCQlpZiAoKCpleHRfaGRycyAmYW1wOyB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfAotCQkJCQkgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHwKJiM0MzsJCQkJCSAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfAogCQkJCQkgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fAogCQkJICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgJmd0Oz0gMikgewogCQkJCSpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTsKQEAgLTMwMSw3ICYjNDM7MzAxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLAogCQkJCSpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDsKIAkJCWlmICgoKmV4dF9oZHJzICZhbXA7CiAJCQkgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8Ci0JCQkgICAgICAgSVBQUk9UT19GUkFHTUVOVCB8IE9GUElFSDEyX1VOUkVQKSkgfHwKJiM0MzsJCQkgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHwKIAkJCSAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ICZndDs9IDIpIHsKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjYKCQkJCQkJCW91dHB1dDogNjcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEZsb3cgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSB3b3JraW5nIG9uIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBUaW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBpbnNwZWN0aW9uIG9mIHRoZSBkaWZmLCBwaW5wb2ludGluZyBpdHMgcHJlY2lzZSBsb2NhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIHRoZSBjaGFuZ2VzIGFyb3VuZCBsaW5lIDI4OC4gSSBhbHdheXMgZmluZCBhIHNvbGlkIGNvbnRleHQgY2hlY2sgaXMgY3J1Y2lhbC4KCkFscmlnaHQsIEkmIzM5O2xsIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGZyZXNoIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgYnkgb25seSBsb29raW5nIGF0IHRoZSBwYXRjaC4gQW5kLCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgT3BlbiB2U3dpdGNoLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNoYW5nZXMuIEdvdHRhIGVuc3VyZSBjb21wYXRpYmlsaXR5IGF0IGFsbCBsZXZlbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0XHQgICAgICB1MTYgKmV4dF9oZHJzKVxuIDI3MTpcdHtcbiAyNzI6XHRcdHU4IG5leHRfdHlwZSA9IG5oLVx1MDAzZW5leHRoZHI7XG4gMjczOlx0XHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIDI3NDpcdFx0aW50IGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPSAwO1xuIDI3NTpcdFxuIDI3NjpcdFx0KmV4dF9oZHJzID0gMDtcbiAyNzc6XHRcbiAyNzg6XHRcdHdoaWxlIChpcHY2X2V4dF9oZHIobmV4dF90eXBlKSkge1xuIDI3OTpcdFx0XHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDtcbiAyODA6XHRcbiAyODE6XHRcdFx0c3dpdGNoIChuZXh0X3R5cGUpIHtcbiAyODI6XHRcdFx0Y2FzZSBJUFBST1RPX05PTkU6XG4gMjgzOlx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcbiAyODQ6XHRcdFx0XHQvKiBzdG9wIHBhcnNpbmcgKi9cbiAyODU6XHRcdFx0XHRyZXR1cm47XG4gMjg2Olx0XG4gMjg3Olx0XHRcdGNhc2UgSVBQUk9UT19FU1A6XG4gMjg4Olx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfRVNQKVxuIDI4OTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDI5MDpcdFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuIDI5MTpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbiAyOTI6XHRcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcbiAyOTM6XHRcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiAyOTQ6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiAyOTU6XHRcdFx0XHR9XG4gMjk2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbiAyOTc6XHRcdFx0XHRicmVhaztcbiAyOTg6XHRcbiAyOTk6XHRcdFx0Y2FzZSBJUFBST1RPX0FIOlxuIDMwMDpcdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2IE9GUElFSDEyX0FVVEgpXG4gMzAxOlx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMzAyOlx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gMzAzOlx0XHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuIDMwNDpcdFx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIDMwNTpcdFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIDMwNjpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDMwNzpcdFx0XHRcdH1cbiAzMDg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcbiAzMDk6XHRcdFx0XHRicmVhaztcbiAzMTA6XHRcbiAzMTE6XHRcdFx0Y2FzZSBJUFBST1RPX0RTVE9QVFM6XG4gMzEyOlx0XHRcdFx0aWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMCkge1xuIDMxMzpcdFx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjZcbiAzMTQ6XHRcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX1VOUkVQKSlcbiAzMTU6XHRcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDMxNjpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XG4gMzE3Olx0XHRcdFx0fSBlbHNlIGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDEpIHtcbiAzMTg6XHRcdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG4gMzE5Olx0XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayBvZiBgZ2V0X2lwdjZfZXh0X2hkcnNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZ2V0X2lwdjZfZXh0X2hkcnNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIOKAkyB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGludm9rZWQgZnJvbSwgYW5kIHdoYXQgZnVuY3Rpb25zIGxlYWQgdG8gKnRob3NlKiBjYWxscz8gVGhlIGFpbSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgbGVhZiBmdW5jdGlvbiwgY2FsbGVkIG9ubHkgZnJvbSBhIGNvdXBsZSBvZiBwbGFjZXMsIG9yIGlzIGl0IGEgY3J1Y2lhbCBsaW5rIGRlZXBlciBpbiBzb21lIHNvcnQgb2YgSVB2NiBoZWFkZXIgcHJvY2Vzc2luZyBjaGFpbj8gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgZGVlcGx5IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBzdGFjayBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjM3PXN0YXRpYyBib29sIGljbXBoZHJfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI0My0vKipcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjQ0OiAqIGdldF9pcHY2X2V4dF9oZHJzKCkgLSBQYXJzZXMgcGFja2V0IGFuZCBzZXRzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy5cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ1LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNjgtICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI2OTpzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI3MC1cdFx0XHQgICAgICB1MTYgKmV4dF9oZHJzKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MzgxPXN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM5NS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mzk2Olx0Z2V0X2lwdjZfZXh0X2hkcnMoc2tiLCBuaCwgXHUwMDI2a2V5LVx1MDAzZWlwdjYuZXh0aGRycyk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM5Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIEZsb3cuYyYjMzk7cyBJUHY2IEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBJUHY2IGhlYWRlcnMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBmbG93IGVuZ2luZS4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb25zIGFuZCB1c2FnZSBvZiBhIGZldyBrZXkgZnVuY3Rpb25zIGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OiBgcGFyc2VfaXB2NmhkcmAsIGBrZXlfZXh0cmFjdGAsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIHJlbGV2YW50LiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXkmIzM5O3JlICpjYWxsZWQqLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHdoZXJlIHRoZSBkYXRhIGV4dHJhY3Rpb24gYW5kIHBhcnNpbmcgYXJlIGFjdHVhbGx5IHBsdWdnZWQgaW50byB0aGUgZmxvdyBwcm9jZXNzaW5nIHBpcGVsaW5lLiBGaW5kaW5nIHRob3NlIGNhbGxzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0LCBsZXQgbWUgc2VlIGhvdyBJUHY2IGhlYWRlciBpbmZvcm1hdGlvbiBpbmZsdWVuY2VzIGZsb3cgbWF0Y2hpbmcgYW5kIGFjdGlvbiBzZWxlY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3csIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgcGllY2VzIGlzIHdoYXQgSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV9pcHY2aGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcdFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENhbGxlcnMgb2YgS2V5IEV4dHJhY3Rpb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2Uga2V5IGV4dHJhY3Rpb24gZnVuY3Rpb25zOiBga2V5X2V4dHJhY3RfbDNsNGAsIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAsIGFuZCBhbnkgb3RoZXJzIGluIHRoYXQgdmVpbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGhlcmUsIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBwcmVjaXNlIGlkZW50aWZpY2F0aW9uIG9mIG5ldHdvcmsgZmxvdyBrZXlzLCBwYXJ0aWN1bGFybHkgdGhvc2Ugd2hpY2ggZXh0cmFjdCB0aGUgbGF5ZXIgMyBhbmQgNCBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgbWF0Y2hpbmcgZmxvdyBlbnRyaWVzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGNhbGwgZ3JhcGhzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGNvZGUgYXJlICpyZWx5aW5nKiBvbiB0aGVzZSBzcGVjaWZpYyBrZXkgZXh0cmFjdGlvbnMuIFdoYXQgYXJlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGlzIHVzZWQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgKipGbG93IFRhYmxlIExvb2t1cHMqKjogT2J2aW91c2x5LCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2V5IGlzIGNhbGN1bGF0ZWQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1hdGNoaW5nIGxvZ2ljLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZXh0cmFjdGVkIGtleSBjb21wb25lbnRzIGFyZSBmZWQgaW50byB0aGUgZmxvdyB0YWJsZSBsb29rdXAgcHJvY2VzcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIHBlcmZvcm1lZCBvbiB0aGUgZXh0cmFjdGVkIGtleSB0byBlbnN1cmUgZmFzdGVyIGxvb2t1cHMuCiogICAqKkZsb3cgQ3JlYXRpb24vSW5zZXJ0aW9uKio6IFdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHdoZW4gbmV3IGZsb3dzIGFyZSBiZWluZyBjcmVhdGVkPyBUaGlzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGJ1aWxkaW5nIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1cmluZyBmbG93IGNyZWF0aW9uPwoqICAgKipGbG93IE1vZGlmaWNhdGlvbi9VcGRhdGVzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgYWxzbyBpbnZvbHZlZCB3aGVuIG1vZGlmeWluZyBleGlzdGluZyBmbG93cz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgY29tcG9uZW50cyBjaGFuZ2U/CiogICAqKkVycm9yIEhhbmRsaW5nL0RpYWdub3N0aWNzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBmb3IgYW55IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgb3IgbG9nZ2luZyByZWxhdGVkIHRvIGZsb3cga2V5IG1pc21hdGNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcj8KKiAgICoqUGFja2V0IFByb2Nlc3NpbmcgUGF0aHMqKjogQXJlIHRoZXNlIGZ1bmN0aW9ucyBjYWxsZWQgaW4gdGhlIGZhc3QgcGF0aCBvciBvbmx5IGluIHRoZSBzbG93IHBhdGg/IEhvdyBtdWNoIG9mIGFuIGltcGFjdCBkbyB0aGV5IGhhdmUgb24gb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBsYXRlbmN5PwoKTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZW50aXJlIGtleSBleHRyYWN0aW9uIGFuZCBmbG93IG1hbmFnZW1lbnQgcGlwZWxpbmUuIEl0IHdpbGwgYWxsb3cgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBib3R0bGVuZWNrcyBhbmQgcG9zc2libGUgb3B0aW1pc2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgdml0YWwgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIGtleSBleHRyYWN0aW9uIGxvZ2ljLCBhbmQgdG8gYWxzbyB1bmRlcnN0YW5kIHdoZXJlIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2V5X2V4dHJhY3RfbDNsNHxvdnNfZmxvd19rZXlfZXh0cmFjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zNjc9c3RhdGljIGludCBxdWV1ZV9nc29fcGFja2V0cyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4NC1cdGlmIChnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19VRFApIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM4NTpcdFx0LyogVGhlIGluaXRpYWwgZmxvdyBrZXkgZXh0cmFjdGVkIGJ5IG92c19mbG93X2tleV9leHRyYWN0KClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4Ni1cdFx0ICogaW4gdGhpcyBjYXNlIGlzIGZvciBhIGZpcnN0IGZyYWdtZW50LCBzbyB3ZSBuZWVkIHRvXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NjE0PXN0YXRpYyBpbnQgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTY2OS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjY3MDpcdGVyciA9IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShuZXQsIGFbT1ZTX1BBQ0tFVF9BVFRSX0tFWV0sXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy02NzEtXHRcdFx0XHRcdCAgICAgcGFja2V0LCBcdTAwMjZmbG93LVx1MDAzZWtleSwgbG9nKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYyNT1zdGF0aWMgaW50IHBhcnNlX25zaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3MS0vKipcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NjcyOiAqIGtleV9leHRyYWN0X2wzbDQgLSBleHRyYWN0cyBMMy9MNCBoZWFkZXIgaW5mb3JtYXRpb24uXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3My0gKiBAc2tiOiBza19idWZmIHRoYXQgY29udGFpbnMgdGhlIGZyYW1lLCB3aXRoIHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIHRoZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNjc4LSAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo2Nzk6c3RhdGljIGludCBrZXlfZXh0cmFjdF9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02ODAte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9OTA5PXN0YXRpYyBpbnQga2V5X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NjMtXHQvKiBGaWxsIG91dCBMMy9MNCBrZXkgaW5mbywgaWYgYW55ICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjk2NDpcdHJldHVybiBrZXlfZXh0cmFjdF9sM2w0KHNrYiwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTY1LX1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTk3MD1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NzEte1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo5NzI6XHRyZXR1cm4ga2V5X2V4dHJhY3RfbDNsNChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk3My19XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05ODY9c3RhdGljIGludCBrZXlfZXh0cmFjdF9tYWNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk5OS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MTAwMDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAwMS1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc0LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDc1OmludCBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc2LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4OT1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjkwOmludCBvdnNfZmxvd19rZXlfZXh0cmFjdChjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yOTEtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yOTMtLyogRXh0cmFjdCBrZXkgZnJvbSBwYWNrZXQgY29taW5nIGZyb20gdXNlcnNwYWNlLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDoyOTQ6aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5NS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ0Mi1cdC8qIEV4dHJhY3QgZmxvdyBmcm9tICYjMzk7c2tiJiMzOTsgaW50byAmIzM5O2tleSYjMzk7LiAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDQzOlx0ZXJyb3IgPSBvdnNfZmxvd19rZXlfZXh0cmFjdCh0dW5faW5mbywgc2tiLCBcdTAwMjZrZXkpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ0LVx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2Ugd2l0aGluIGBnZXRfaXB2Nl9leHRfaGRyc2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggRVNQIGFuZCBBSCBwcm90b2NvbHMuIEkgc2VlIGEgZGlyZWN0IHN3YXAtb3V0OiB0aGUgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYE9GUElFSDEyX0ZSQUdgIGluIHRoZSBiaXRtYXNrIGNoZWNrcy4KClJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBidWcgZml4LiBVc2luZyBgSVBQUk9UT19GUkFHTUVOVGAgKGFuIElQIHByb3RvY29sIG51bWJlcikgaW4gYSBiaXRtYXNrIG9wZXJhdGlvbiBmb3IgdGhlIE9wZW5GbG93IGV4dGVuc2lvbiBoZWFkZXJzIGlzIGEgZGVmaW5pdGUgbWlzc3RlcC4gSXQgc2VlbXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jb3JyZWN0bHkgY2hlY2tpbmcgYWdhaW5zdCB0aGUgcHJvdG9jb2wgKnR5cGUqIG9mIGEgZnJhZ21lbnRlZCBwYWNrZXQgKHdoaWNoIHdvdWxkbiYjMzk7dCBiZSBwcmVzZW50IGF0IHRoaXMgbGF5ZXIpLCByYXRoZXIgdGhhbiB0ZXN0aW5nIHdoZXRoZXIgdGhlIGZyYWdtZW50YXRpb24gKmhlYWRlciBmbGFnKiB3YXMgcHJlc2VudCBpbiB0aGUgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy4gVGhlIGludGVudCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgc2VxdWVuY2UgYW5kIHJlLW9yZGVyaW5nIHByb3BlcnRpZXMgd2hlbiBjZXJ0YWluIGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBwcmVzZW50LgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIG15IHN1c3BpY2lvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIGBPRlBJRUgxMl9GUkFHYCBhbmQgdGhlIHJlbGF0ZWQgT3BlbkZsb3cgMS4yIGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gdmVyaWZ5IHRoZSBmbGFnIGJpdCBhc3NpZ25tZW50LiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgYE9GUElFSDEyX0ZSQUdgIGlzIGEgYml0IGZsYWcgd2l0aGluIHRoZSBPRlBJRUgxMiBiaXRmaWVsZC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGxvZ2ljIGVycm9yIHdoZXJlIHRoZSBwcmVzZW5jZSBvZiB0aGUgZnJhZ21lbnRhdGlvbiBoZWFkZXIgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgaWRlbnRpZmllZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgY2xhc3NpZmljYXRpb24gb3IgcHJvY2Vzc2luZyBvZiBmcmFnbWVudGVkIHBhY2tldHMgd2l0aGluIHRoZSBPcGVuRmxvdyBjb250ZXh0LiBJdCYjMzk7cyBhIGNsZWFyIGFuZCBpbXBvcnRhbnQgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhlIHJpZ2h0IGJlaGF2aW9yIGZvciBFU1AgYW5kIEFIIHBhY2tldHMgd2l0aCBmcmFnbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPRlBJRUgxMl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTEtICogaXMgdW5leHBlY3RlZGx5IGVuY291bnRlcmVkLiAoVHdvIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBtYXkgYmVcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTQ6ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cdFx0Y2FzZSBJUFBST1RPX05PTkU6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODQtXHRcdFx0Lyogc3RvcCBwYXJzaW5nICovXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXHRcdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkwOlx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTUtXHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVx0XHRjYXNlIElQUFJPVE9fQUg6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlx0XHRcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0Olx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDUtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4Olx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE3LVx0XHRcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjA6XHRcdFx0XHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX0VTUCB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjM6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI0LVx0XHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXHRcdFx0fSBlbHNlIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzI2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXHRcdFx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVx0XHRjYXNlIElQUFJPVE9fRlJBR01FTlQ6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzOTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQxOlx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDQtXHRcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDU6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDg6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDk6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUwLVx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cdFx0XHR9XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXHRcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1OTpcdFx0XHQvKiBPRlBJRUgxMl9IT1AgaXMgc2V0IHRvIDEgaWYgYSBob3AtYnktaG9wIElQdjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3Rcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2My1cdFx0XHRpZiAoKmV4dF9oZHJzID09IDApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2NS1cdFx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzc6XHRPRlBJRUgxMl9OT05FWFQgPSAxIFx1MDAzY1x1MDAzYyAwLCAgIC8qIFwmIzM0O05vIG5leHQgaGVhZGVyXCYjMzQ7IGVuY291bnRlcmVkLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozODpcdE9GUElFSDEyX0VTUCAgICA9IDEgXHUwMDNjXHUwMDNjIDEsICAgLyogRW5jcnlwdGVkIFNlYyBQYXlsb2FkIGhlYWRlciBwcmVzZW50LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcdE9GUElFSDEyX0FVVEggICA9IDEgXHUwMDNjXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlx0T0ZQSUVIMTJfREVTVCAgID0gMSBcdTAwM2NcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQxOlx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcdTAwM2NcdTAwM2MgNCwgICAvKiBGcmFnbWVudCBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XHRPRlBJRUgxMl9ST1VURVIgPSAxIFx1MDAzY1x1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XHRPRlBJRUgxMl9IT1AgICAgPSAxIFx1MDAzY1x1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ0Olx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcdTAwM2NcdTAwM2MgNywgICAvKiBVbmV4cGVjdGVkIHJlcGVhdHMgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1Olx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcdTAwM2NcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGFuIE9wZW4gdlN3aXRjaCBCdWcgYW5kIEZ1enppbmcgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhaGEhIEkmIzM5O3ZlIHNwb3R0ZWQgc29tZXRoaW5nLiBJdCBzZWVtcyB0aGF0IHRoZSBjaGVjayBoZXJlLCBgSVBQUk9UT19GUkFHTUVOVGAsIHdoaWNoIGlzIDQ0IChvciAweDJDLCBtZWFuaW5nIEFVVEgsIERFU1QsIGFuZCBST1VURVIgYml0cyBzZXQpLCBpcyBiZWluZyB1c2VkIGluc3RlYWQgb2YgYE9GUElFSDEyX0ZSQUdgLCB3aGljaCBpcyBzaW1wbHkgMTYuIFRoYXQmIzM5O3MgYSBjbGVhciBidWcgaW4gYGdldF9pcHY2X2V4dF9oZHJzKClgISBUaGUgd3JvbmcgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgc28gdGhpcyBuZWVkcyB0byBiZSBmaXhlZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IE9wZW4gdlN3aXRjaCBpcyBhIHZpcnR1YWwgZGF0YXBhdGgsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2hgLCBhbmQgaXQmIzM5O3MgZnVsbHkgc3VwcG9ydGVkLiBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHZpYSBOZXRsaW5rLiBTeXprYWxsZXIsIHdoaWNoIEkga25vdyB2ZXJ5IHdlbGwsIGFjdGl2ZWx5IGZ1enpleiBPVlMgdXNpbmcgTmV0bGluayBjb21tYW5kcyBsaWtlIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYCBhbmQgYG92c19mbG93X2NtZF9uZXdgLiBHaXZlbiB0aGlzLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IHJlYWNoYWJsZS4gVGhlcmUgYXJlIG5vIHF1ZXN0aW9ucy4gSXQmIzM5O3MgZnVsbHkgcmVhY2hhYmxlLgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgZmlsZXMuIEkgc2hvdWxkIGNoZWNrIGBLY29uZmlnYCBmb3IgT1BFTlZTV0lUQ0guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHdoYXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgSVB2NiBEZXBlbmRlbmN5IGluIE9wZW4gdlN3aXRjaCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIElQdjYgYW5kIElORVQgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgT3BlbiB2U3dpdGNoLiBJIGtub3cgT1ZTIGlzIGxpbmtlZCB0byBJTkVULCBhbmQgdGhhdCBPVlMgaXRzZWxmIGlzIGNvbXBpbGVkIHdpdGggaXRzIG93biBtb2R1bGVzLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgSVB2NiBzdXBwb3J0IHdpdGhpbiBPVlMgaXMgY29uZGl0aW9uYWwsIHRoYXQgaXMsIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZy4gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYENPTkZJR19JUFY2YCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVG8gY29uZmlybSB0aGlzIGFuZCB0byBhY3R1YWxseSAqc2VlKiBob3cgSVB2NiBzdXBwb3J0IGlzIGhhbmRsZWQsIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluc3RhbmNlcyBvZiBgQ09ORklHX0lQVjZgIG9yIGV2ZW4ganVzdCBwbGFpbiBgSVBWNmAgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjbHVlIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGVtcGxveWVkIHdpdGhpbiBPVlMgcmVnYXJkaW5nIElQdjYuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgZGVwZW5kZW5jeSBhbmQgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZ8SVNfRU5BQkxFRFxcKENPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNDQ2PXN0YXRpYyBib29sIG92c19jdF9uYXRfdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNDc0LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE0NzU6XHRcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTQ3Ni1cdFx0XHQgICBpbmZvLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBGbG93IEhhbmRsaW5nKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gdGhlIElQdjYtcmVsYXRlZCBzdHVmZiBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIGFsd2F5cyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9uLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCB0byBmaWd1cmUgb3V0IGhvdyBJUHY2IHBhY2tldHMgYXJlIGJlaW5nIGNsYXNzaWZpZWQgYW5kIG1hdGNoZWQuIEkgd2FudCB0byBzZWUgZXhhY3RseSAqaG93KiB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aG9zZSBJUHY2IGFkZHJlc3NlcywgdGhlIGZsb3cga2V5cywgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbiBwbGFjZSBmb3IgSVB2NiB0cmFmZmljLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgbWF5YmUgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBwYWNrZXQgaGVhZGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBJUHY2IGZsb3cgcHJvY2Vzc2luZyBpcyBsaWtlbHkgbG9jYXRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgdHJpY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV9pcHY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcdFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgSVBWNmAgY29uZmlndXJhdGlvbiBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfT1BFTlZTV0lUQ0hgIGFyZSBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX0lQVjZgIGlzLCBpbiBmYWN0LCBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciBhbnkgSVB2NiBwcm9jZXNzaW5nIHdpdGhpbiB0aGlzIHNldHVwLiBJbiB0aGUgTGludXgga2VybmVsLCBlbmFibGluZyBgSVBWNmAgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBzbyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGRlcGVuZGVuY3kgaGVyZS4KCkxvb2tpbmcgYXQgYGZsb3cuY2AsIHRoZSB0cmlnZ2VyIHNlZW1zIHRvIGJlIGBrZXktJmd0O2V0aC50eXBlID09IGh0b25zKEVUSF9QX0lQVjYpYCwgd2hpY2ggc3Vic2VxdWVudGx5IGNhbGxzIGBwYXJzZV9pcHY2aGRyYC4gU28sIGRvZXMgYE9QRU5WU1dJVENIYCByZWx5IGRpcmVjdGx5IG9uIGBJUFY2YCBvciBub3Q/IElzIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmN5PyBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGRldGVybWluZSBpZiBpdCYjMzk7cyBzdHJpY3RseSBuZWNlc3NhcnksIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgZXhhbWluZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgYXJvdW5kIGxpbmUgODE4LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gY2hlY2sgaG93IHRoZSBmbGFnIGlzIHVzZWQgd2l0aCByZXNwZWN0IHRvIE9wZW4gdlN3aXRjaC4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIgdGhlcmUgYW5kIGNhbiBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBvZiB0aGUgYElQVjZgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0XHRsYWJlbF9jb3VudCYjNDM7JiM0Mzs7XG4gODExOlx0XHRcdH1cbiA4MTI6XHRcdFx0aWYgKGxhYmVsX2NvdW50IFx1MDAzZSBNUExTX0xBQkVMX0RFUFRIKVxuIDgxMzpcdFx0XHRcdGxhYmVsX2NvdW50ID0gTVBMU19MQUJFTF9ERVBUSDtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0a2V5LVx1MDAzZW1wbHMubnVtX2xhYmVsc19tYXNrID0gR0VOTUFTSyhsYWJlbF9jb3VudCAtIDEsIDApO1xuIDgxNjpcdFx0fSBlbHNlIGlmIChrZXktXHUwMDNlZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA4MTc6XHRcdFx0aW50IG5oX2xlbjsgICAgICAgICAgICAgLyogSVB2NiBIZWFkZXIgJiM0MzsgRXh0ZW5zaW9ucyAqL1xuIDgxODpcdFxuIDgxOTpcdFx0XHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcbiA4MjA6XHRcdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiA4MjE6XHRcdFx0XHRzd2l0Y2ggKG5oX2xlbikge1xuIDgyMjpcdFx0XHRcdGNhc2UgLUVJTlZBTDpcbiA4MjM6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZrZXktXHUwMDNlaXAsIDAsIHNpemVvZihrZXktXHUwMDNlaXApKTtcbiA4MjQ6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZrZXktXHUwMDNlaXB2Ni5hZGRyLCAwLCBzaXplb2Yoa2V5LVx1MDAzZWlwdjYuYWRkcikpO1xuIDgyNTpcdFx0XHRcdFx0ZmFsbHRocm91Z2g7XG4gODI2Olx0XHRcdFx0Y2FzZSAtRVBST1RPOlxuIDgyNzpcdFx0XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4gODI4Olx0XHRcdFx0XHRlcnJvciA9IDA7XG4gODI5Olx0XHRcdFx0XHRicmVhaztcbiA4MzA6XHRcdFx0XHRkZWZhdWx0OlxuIDgzMTpcdFx0XHRcdFx0ZXJyb3IgPSBuaF9sZW47XG4gODMyOlx0XHRcdFx0fVxuIDgzMzpcdFx0XHRcdHJldHVybiBlcnJvcjtcbiA4MzQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg0OAoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA3NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgT3BlbiB2U3dpdGNoIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gaG93IElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYHBhcnNlX2lwdjZoZHJgIGFuZCBgZ2V0X2lwdjZfZXh0X2hkcnNgIGluIGBmbG93LmNgIGFzIGNvcmUgdG8gdGhpcyBhcmVhLCBhbmQgdGhlbiBhbHNvIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAgYW5kIGBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VgIGFzIHRoZSBleHRlcm5hbCBlbnRyeSBwb2ludHMuIEkga25vdyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBgcGFyc2VfaXB2NmhkcmAgYXJlIHN0YXRpYyB3aXRoaW4gYGZsb3cuY2AsIGFuZCB0aGF0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IGltcGFjdHMgc3ltYm9sIHZpc2liaWxpdHkuCgpOb3csIG15IHVuZGVyc3RhbmRpbmcgb2YgYEZvY3VzU3ltYm9sc2AgZ3VpZGFuY2UgaXMga2V5IGhlcmUuIEJlY2F1c2UgYGdldF9pcHY2X2V4dF9oZHJzYCBhbmQgYHBhcnNlX2lwdjZoZHJgIGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICpzaG91bGQqIGJlIHRhcmdldGFibGUuIEV2ZW4gaWYgdGhleSB3ZXJlIHN0YXRpYywgSSBrbm93IHRoYXQgaWYgdGhleSBhcmUgbm9uLWlubGluZWQgdGhlbiB0aGV5IHNob3VsZCBiZSB0YXJnZXRhYmxlLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGhlbHBlcnMgdG8gcHVibGljIGZhY2luZyBmdW5jdGlvbnMuIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYywgYW5kIGlkZW50aWZ5IGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVycy4gSSB0aGluayBJJiMzOTt2ZSBkb25lIHRoYXQuIEkgYWxzbyB0aGluayB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYG92c19mbG93X2tleV9leHRyYWN0YCBhbmQgYG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZWAgYXJlIGtleSBhcyB0aGUgcHVibGljIGVudHJ5cG9pbnRzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb246IGBPUEVOVlNXSVRDSGAgYW5kIGBJUFY2YCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHRoYXQmIzM5O3MgZ29vZC4KCkFzIGZvciAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LCB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgaW4gdGhlIGBnZXRfaXB2Nl9leHRfaGRyc2AgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHBvc2l0aXZlIGluZGljYXRvci4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCByZXN1bHQ6CiogICAqKkNvbmZpZ3MqKjogXFsmIzM0O09QRU5WU1dJVENIJiMzNDssICYjMzQ7SVBWNiYjMzQ7XQoqICAgKipGb2N1c1N5bWJvbHMqKjogXFsmIzM0O2dldFxfaXB2NlxfZXh0XF9oZHJzJiMzNDssICYjMzQ7cGFyc2VcX2lwdjZoZHImIzM0OywgJiMzNDtvdnNcX2Zsb3dcX2tleVxfZXh0cmFjdCYjMzQ7LCAmIzM0O292c1xfZmxvd1xfa2V5XF9leHRyYWN0XF91c2Vyc3BhY2UmIzM0O10KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gT3BlbiB2U3dpdGNoJiMzOTtzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSBieSBjaGFuZ2luZyBhbiBpbmNvcnJlY3QgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IHRvIGBPRlBJRUgxMl9GUkFHYCBiaXRtYXNrIGZsYWdzLiBUaGlzIGFyZWEgaXMgcmVhY2hhYmxlIHRocm91Z2ggT3BlbiB2U3dpdGNoIGZsb3cga2V5IGV4dHJhY3Rpb24gd2hlbiBwcm9jZXNzaW5nIElQdjYgcGFja2V0cy4gRnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdGVzdCB0aGF0IGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MgYW5kIHNlcXVlbmNpbmcgY2hlY2tzIGhhbmRsZSBhbGwgcG9zc2libGUgSVB2NiBwYWNrZXQgaGVhZGVycyBjb3JyZWN0bHkgYW5kIHdpdGhvdXQgcmVncmVzc2lvbi4KCkkmIzM5O2xsIHByb2NlZWQgdG8gYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2lwdjZfZXh0X2hkcnMmIzM0OywKICAgICYjMzQ7cGFyc2VfaXB2NmhkciYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd19rZXlfZXh0cmFjdCYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIGdldF9pcHY2X2V4dF9oZHJzKCksIGNvcnJlY3RseSB1c2luZyB0aGUgT0ZQSUVIMTJfRlJBRyBiaXRtYXNrIGluc3RlYWQgb2YgdGhlIElQUFJPVE9fRlJBR01FTlQgcHJvdG9jb2wgY29uc3RhbnQgd2hlbiBjaGVja2luZyBmb3Igb3V0LW9mLXNlcXVlbmNlIGV4dGVuc2lvbiBoZWFkZXJzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBmbG93IGtleSBleHRyYWN0aW9uIHZpYSBOZXRsaW5rIC8gZGF0YXBhdGggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgICAmIzM0O3BhcnNlX2lwdjZoZHImIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3QmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHR5cG8gaW4gT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSwgd2hlcmUgdGhlIHByb3RvY29sIG51bWJlciBgSVBQUk9UT19GUkFHTUVOVGAgd2FzIG1pc3Rha2VubHkgdXNlZCBpbiBiaXRtYXNrIGNoZWNrcyBpbnN0ZWFkIG9mIHRoZSBiaXRmbGFnIGBPRlBJRUgxMl9GUkFHYC5cblxuQWxsIHZhcmlhYmxlcyBhbmQgYml0ZmllbGRzIGludm9sdmVkIChgKmV4dF9oZHJzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgcGFyc2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzY5Mzg5MTU5OTEwNGZjZTUwZWNjNjQ3NjgzMWVmODMwMTA3MDI1MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwppbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmMKQEAgLTI4OCw3ICYjNDM7Mjg4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLAogCQkJaWYgKCpleHRfaGRycyAmYW1wOyBPRlBJRUgxMl9FU1ApCiAJCQkJKmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQOwogCQkJaWYgKCgqZXh0X2hkcnMgJmFtcDsgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwKLQkJCQkJICAgT0ZQSUVIMTJfUk9VVEVSIHwgSVBQUk9UT19GUkFHTUVOVCB8CiYjNDM7CQkJCQkgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHwKIAkJCQkJICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHwKIAkJCSAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ICZndDs9IDIpIHsKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7CkBAIC0zMDEsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCwKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7CiAJCQlpZiAoKCpleHRfaGRycyAmYW1wOwogCQkJICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfAotCQkJICAgICAgIElQUFJPVE9fRlJBR01FTlQgfCBPRlBJRUgxMl9VTlJFUCkpIHx8CiYjNDM7CQkJICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8CiAJCQkgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCAmZ3Q7PSAyKSB7CiAJCQkJKmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VROwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgQ29kZWJhc2U6IEluaXRpYWwgQXBwcm9hY2gqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHN0cmF0ZWd5IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzIGFuZCBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgZXhpc3RpbmcgY29kZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IGFyZWEgaXMgbGlrZWx5IGFyb3VuZCB0aGUgZmxvdyBoYW5kbGluZyB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmUgMjg4IGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhcyBhIGZpcnN0IHBvaW50IG9mIGF0dGFjaywgYXMgdGhpcyBvZnRlbiBnaXZlcyBtZSB0aGUgZW50cnkgcG9pbnQgYW5kIGNvcmUgbG9naWMgb2YgdGhlIGZ1bmN0aW9ucyB1c2VkLgoKVGhlbiwgdG8gZmFjaWxpdGF0ZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kLCBhcHBseWluZyBpdCB0byBhIGJyb2FkZXIgcmFuZ2Ugd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCwgc2F5LCBsaW5lcyAyNTAgdGhyb3VnaCAzNTAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCBmb3IgYSBmb2N1c2VkIGFzc2Vzc21lbnQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgZ2V0IG1lIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHQgKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxuIDI1MTpcdCAqIGlzIHVuZXhwZWN0ZWRseSBlbmNvdW50ZXJlZC4gKFR3byBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgbWF5IGJlXG4gMjUyOlx0ICogZXhwZWN0ZWQgYW5kIHdvdWxkIG5vdCBjYXVzZSB0aGlzIGJpdCB0byBiZSBzZXQuKVxuIDI1MzpcdCAqXG4gMjU0Olx0ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG4gMjU1Olx0ICogcHJlZmVycmVkIChidXQgbm90IHJlcXVpcmVkKSBieSBSRkMgMjQ2MDpcbiAyNTY6XHQgKlxuIDI1NzpcdCAqIFdoZW4gbW9yZSB0aGFuIG9uZSBleHRlbnNpb24gaGVhZGVyIGlzIHVzZWQgaW4gdGhlIHNhbWUgcGFja2V0LCBpdCBpc1xuIDI1ODpcdCAqIHJlY29tbWVuZGVkIHRoYXQgdGhvc2UgaGVhZGVycyBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAyNTk6XHQgKiAgICAgIElQdjYgaGVhZGVyXG4gMjYwOlx0ICogICAgICBIb3AtYnktSG9wIE9wdGlvbnMgaGVhZGVyXG4gMjYxOlx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxuIDI2MjpcdCAqICAgICAgUm91dGluZyBoZWFkZXJcbiAyNjM6XHQgKiAgICAgIEZyYWdtZW50IGhlYWRlclxuIDI2NDpcdCAqICAgICAgQXV0aGVudGljYXRpb24gaGVhZGVyXG4gMjY1Olx0ICogICAgICBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgaGVhZGVyXG4gMjY2Olx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxuIDI2NzpcdCAqICAgICAgdXBwZXItbGF5ZXIgaGVhZGVyXG4gMjY4Olx0ICovXG4gMjY5Olx0c3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxuIDI3MDpcdFx0XHRcdCAgICAgIHUxNiAqZXh0X2hkcnMpXG4gMjcxOlx0e1xuIDI3MjpcdFx0dTggbmV4dF90eXBlID0gbmgtXHUwMDNlbmV4dGhkcjtcbiAyNzM6XHRcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gMjc0Olx0XHRpbnQgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9IDA7XG4gMjc1Olx0XG4gMjc2Olx0XHQqZXh0X2hkcnMgPSAwO1xuIDI3NzpcdFxuIDI3ODpcdFx0d2hpbGUgKGlwdjZfZXh0X2hkcihuZXh0X3R5cGUpKSB7XG4gMjc5Olx0XHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkciwgKmhwO1xuIDI4MDpcdFxuIDI4MTpcdFx0XHRzd2l0Y2ggKG5leHRfdHlwZSkge1xuIDI4MjpcdFx0XHRjYXNlIElQUFJPVE9fTk9ORTpcbiAyODM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xuIDI4NDpcdFx0XHRcdC8qIHN0b3AgcGFyc2luZyAqL1xuIDI4NTpcdFx0XHRcdHJldHVybjtcbiAyODY6XHRcbiAyODc6XHRcdFx0Y2FzZSBJUFBST1RPX0VTUDpcbiAyODg6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG4gMjg5Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMjkwOlx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XG4gMjkxOlx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxuIDI5MjpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIDI5MzpcdFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIDI5NDpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDI5NTpcdFx0XHRcdH1cbiAyOTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xuIDI5NzpcdFx0XHRcdGJyZWFrO1xuIDI5ODpcdFxuIDI5OTpcdFx0XHRjYXNlIElQUFJPVE9fQUg6XG4gMzAwOlx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfQVVUSClcbiAzMDE6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiAzMDI6XHRcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbiAzMDM6XHRcdFx0XHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XG4gMzA0Olx0XHRcdFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gMzA1Olx0XHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gMzA2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzA3Olx0XHRcdFx0fVxuIDMwODpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xuIDMwOTpcdFx0XHRcdGJyZWFrO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcbiAzMTI6XHRcdFx0XHRpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAwKSB7XG4gMzEzOlx0XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxuIDMxNDpcdFx0XHRcdFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxuIDMxNTpcdFx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzE2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbiAzMTc6XHRcdFx0XHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xuIDMxODpcdFx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjZcbiAzMTk6XHRcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuIDMyMDpcdFx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gMzIxOlx0XHRcdFx0XHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcbiAzMjI6XHRcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xuIDMyMzpcdFx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzI0Olx0XHRcdFx0XHR9XG4gMzI1Olx0XHRcdFx0fSBlbHNlIHtcbiAzMjY6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiAzMjc6XHRcdFx0XHR9XG4gMzI4Olx0XHRcdFx0ZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCYjNDM7JiM0Mzs7XG4gMzI5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBJdHMgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaW1wYWN0IG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AgbW9yZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgY2FuJiMzOTt0IGp1c3QgaXNvbGF0ZSBpdDsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZWxzZSBpcyB0aGlzIHVzZWQ/JiMzNDsgVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8ga25vdyBhbGwgdGhlIGlucHV0cyBhbmQgdXNlLWNhc2VzIHRoYXQgZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb24sIHRoZSBwb3NzaWJsZSBlcnJvcnMsIGFuZCBhbGwgdGhlIHBhdGhzIHRocm91Z2ggdGhlIGNvZGUuIFRoYXTigJlzIGhvdyBJIGNhbiBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yLCBhbmQgZXZhbHVhdGUgYW55IHBvdGVudGlhbCBwcm9ibGVtcy4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSYjMzk7cyBhbiBhcmVhIEkgc2hvdWxkIGJlIGZvY3VzZWQgb24sIG9yIGlmIHRoZXJlIGlzIGEgbW9yZSBlZmZpY2llbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMwOlx0XG4gMzMxOlx0XHRcdGNhc2UgSVBQUk9UT19GUkFHTUVOVDpcbiAzMzI6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxuIDMzMzpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDMzNDpcdFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8XG4gMzM1Olx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxuIDMzNjpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfFxuIDMzNzpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gMzM4Olx0XHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gMzM5Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzQwOlx0XHRcdFx0fVxuIDM0MTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xuIDM0MjpcdFx0XHRcdGJyZWFrO1xuIDM0MzpcdFxuIDM0NDpcdFx0XHRjYXNlIElQUFJPVE9fUk9VVElORzpcbiAzNDU6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9ST1VURVIpXG4gMzQ2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMzQ3Olx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcbiAzNDg6XHRcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfREVTVCB8XG4gMzQ5Olx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbiAzNTA6XHRcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiAzNTE6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiAzNTI6XHRcdFx0XHR9XG4gMzUzOlx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1JPVVRFUjtcbiAzNTQ6XHRcdFx0XHRicmVhaztcbiAzNTU6XHRcbiAzNTY6XHRcdFx0Y2FzZSBJUFBST1RPX0hPUE9QVFM6XG4gMzU3Olx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxuIDM1ODpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDM1OTpcdFx0XHRcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2NlxuIDM2MDpcdFx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3RcbiAzNjE6XHRcdFx0XHQgKiBleHRlbnNpb24gaGVhZGVyIGluIHRoZSBwYWNrZXQuXG4gMzYyOlx0XHRcdFx0ICovXG4gMzYzOlx0XHRcdFx0aWYgKCpleHRfaGRycyA9PSAwKVxuIDM2NDpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0hPUDtcbiAzNjU6XHRcdFx0XHRlbHNlXG4gMzY2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzY3Olx0XHRcdFx0YnJlYWs7XG4gMzY4Olx0XG4gMzY5Olx0XHRcdGRlZmF1bHQ6XG4gMzcwOlx0XHRcdFx0cmV0dXJuO1xuIDM3MTpcdFx0XHR9XG4gMzcyOlx0XG4gMzczOlx0XHRcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXHUwMDI2X2hkcik7XG4gMzc0Olx0XHRcdGlmICghaHApXG4gMzc1Olx0XHRcdFx0YnJlYWs7XG4gMzc2Olx0XHRcdG5leHRfdHlwZSA9IGhwLVx1MDAzZW5leHRoZHI7XG4gMzc3Olx0XHRcdHN0YXJ0ICYjNDM7PSBpcHY2X29wdGxlbihocCk7XG4gMzc4Olx0XHR9XG4gMzc5Olx0fVxuIDM4MDpcdFxuIDM4MTpcdHN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbiAzODI6XHR7XG4gMzgzOlx0XHR1bnNpZ25lZCBzaG9ydCBmcmFnX29mZjtcbiAzODQ6XHRcdHVuc2lnbmVkIGludCBwYXlsb2FkX29mcyA9IDA7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgbmhfb2ZzID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4gMzg2Olx0XHR1bnNpZ25lZCBpbnQgbmhfbGVuO1xuIDM4NzpcdFx0c3RydWN0IGlwdjZoZHIgKm5oO1xuIDM4ODpcdFx0aW50IGVyciwgbmV4dGhkciwgZmxhZ3MgPSAwO1xuIDM4OTpcdFxuIDM5MDpcdFx0ZXJyID0gY2hlY2tfaGVhZGVyKHNrYiwgbmhfb2ZzICYjNDM7IHNpemVvZigqbmgpKTtcbiAzOTE6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDM5MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDM5MzpcdFxuIDM5NDpcdFx0bmggPSBpcHY2X2hkcihza2IpO1xuIDM5NTpcdFxuIDM5NjpcdFx0Z2V0X2lwdjZfZXh0X2hkcnMoc2tiLCBuaCwgXHUwMDI2a2V5LVx1MDAzZWlwdjYuZXh0aGRycyk7XG4gMzk3Olx0XG4gMzk4Olx0XHRrZXktXHUwMDNlaXAucHJvdG8gPSBORVhUSERSX05PTkU7XG4gMzk5Olx0XHRrZXktXHUwMDNlaXAudG9zID0gaXB2Nl9nZXRfZHNmaWVsZChuaCk7XG4gNDAwOlx0XHRrZXktXHUwMDNlaXAudHRsID0gbmgtXHUwMDNlaG9wX2xpbWl0O1xuIDQwMTpcdFx0a2V5LVx1MDAzZWlwdjYubGFiZWwgPSAqKF9fYmUzMiAqKW5oIFx1MDAyNiBodG9ubChJUFY2X0ZMT1dJTkZPX0ZMT1dMQUJFTCk7XG4gNDAyOlx0XHRrZXktXHUwMDNlaXB2Ni5hZGRyLnNyYyA9IG5oLVx1MDAzZXNhZGRyO1xuIDQwMzpcdFx0a2V5LVx1MDAzZWlwdjYuYWRkci5kc3QgPSBuaC1cdTAwM2VkYWRkcjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG5leHRoZHIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2cGF5bG9hZF9vZnMsIC0xLCBcdTAwMjZmcmFnX29mZiwgXHUwMDI2ZmxhZ3MpO1xuIDQwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUDZfRkhfRl9GUkFHKSB7XG4gNDA3Olx0XHRcdGlmIChmcmFnX29mZikge1xuIDQwODpcdFx0XHRcdGtleS1cdTAwM2VpcC5mcmFnID0gT1ZTX0ZSQUdfVFlQRV9MQVRFUjtcbiA0MDk6XHRcdFx0XHRrZXktXHUwMDNlaXAucHJvdG8gPSBORVhUSERSX0ZSQUdNRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgcmVmaW5pbmcgdGhlIHdheSBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxvdy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb24gY2hlY2tpbmcgZm9yIGhlYWRlciB0eXBlcy4KCkkgY2FuIHNlZSB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBgSVBQUk9UT19GUkFHTUVOVGAgd2l0aCBgT0ZQSUVIMTJfRlJBR2AgaW4gdGhlIGJpdG1hc2sgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBzZXF1ZW5jZSBpcyB2YWxpZCBhbmQgdW5zZXF1ZW5jZWQuIFRoZSBzdXJyb3VuZGluZyBsb2dpYyBzZWVtcyB0byBiZSBhYm91dCBpZGVudGlmeWluZyAmIzM0O3VucmVjb2duaXplZCYjMzQ7IG9yIHBvdGVudGlhbGx5IG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVyIHNlcXVlbmNlcy4gVGhlIGNvZGUgZmxhZ3MgYSBzZXJpZXMgb2YgYml0d2lzZSBvcGVyYXRpb25zIG9uIGBleHRfaGRyc2AsIHRoZSBtYWluIHZhcmlhYmxlIHVzZWQgdG8gZW5jb2RlIHdoaWNoIGhlYWRlcnMgYXJlIHByZXNlbnQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgYWRqdXN0bWVudCBpcyBsaWtlbHkgYSBidWcgZml4IG9yIGltcHJvdmVtZW50IGluIGlkZW50aWZ5aW5nIHRoZSB2YWxpZCBoZWFkZXIgdHlwZXMuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgb3Zlcmx5IHJlc3RyaWN0aXZlIG9yIHBvdGVudGlhbGx5IGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIE9wZW5GbG93IHNwZWNpZmljYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgT0ZQSUVIMTJfRlJBR2AgbGlrZWx5IGNsYXJpZmllcyB0aGUgaW50ZW50aW9uIHRvIHRyZWF0IGZyYWdtZW50IGhlYWRlcnMgaW4gYSBzcGVjaWZpYyB3YXkgd2l0aGluIHRoaXMgZmxvdyBwcm9jZXNzaW5nIGNvbnRleHQuIFRoZSBsb2dpYyBmb3IgYE9GUElFSDEyX1VOUkVQYCBhbmQgYE9GUElFSDEyX1VOU0VRYCBzZWVtIHRvIGJlIGltcG9ydGFudCB0byBob3cgT1ZTIGhhbmRsZXMgZnJhZ21lbnRlZCB0cmFmZmljIGFuZCBtYWxmb3JtZWQgcGFja2V0cy4KCkJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGRlZmluaXRpb25zIG9mIGBPRlBJRUgxMl8qYCBjb25zdGFudHMgYW5kIGBJUFBST1RPX0ZSQUdNRU5UYCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50IGlzIHNlbWFudGljYWxseSBzb3VuZCBhbmQgYWxpZ25zIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIElQdjYgZnJhZ21lbnQgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBlZGdlIGNhc2VzIG9yIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPRlBJRUgxMl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTEtICogaXMgdW5leHBlY3RlZGx5IGVuY291bnRlcmVkLiAoVHdvIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBtYXkgYmVcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTQ6ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cdFx0Y2FzZSBJUFBST1RPX05PTkU6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODQtXHRcdFx0Lyogc3RvcCBwYXJzaW5nICovXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXHRcdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkwOlx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTUtXHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVx0XHRjYXNlIElQUFJPVE9fQUg6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlx0XHRcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0Olx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDUtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4Olx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE3LVx0XHRcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjA6XHRcdFx0XHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX0VTUCB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjM6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI0LVx0XHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXHRcdFx0fSBlbHNlIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzI2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXHRcdFx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVx0XHRjYXNlIElQUFJPVE9fRlJBR01FTlQ6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzOTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQxOlx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDQtXHRcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDU6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDg6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDk6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUwLVx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cdFx0XHR9XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXHRcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1OTpcdFx0XHQvKiBPRlBJRUgxMl9IT1AgaXMgc2V0IHRvIDEgaWYgYSBob3AtYnktaG9wIElQdjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3Rcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2My1cdFx0XHRpZiAoKmV4dF9oZHJzID09IDApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2NS1cdFx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzc6XHRPRlBJRUgxMl9OT05FWFQgPSAxIFx1MDAzY1x1MDAzYyAwLCAgIC8qIFwmIzM0O05vIG5leHQgaGVhZGVyXCYjMzQ7IGVuY291bnRlcmVkLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozODpcdE9GUElFSDEyX0VTUCAgICA9IDEgXHUwMDNjXHUwMDNjIDEsICAgLyogRW5jcnlwdGVkIFNlYyBQYXlsb2FkIGhlYWRlciBwcmVzZW50LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcdE9GUElFSDEyX0FVVEggICA9IDEgXHUwMDNjXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlx0T0ZQSUVIMTJfREVTVCAgID0gMSBcdTAwM2NcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQxOlx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcdTAwM2NcdTAwM2MgNCwgICAvKiBGcmFnbWVudCBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XHRPRlBJRUgxMl9ST1VURVIgPSAxIFx1MDAzY1x1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XHRPRlBJRUgxMl9IT1AgICAgPSAxIFx1MDAzY1x1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ0Olx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcdTAwM2NcdTAwM2MgNywgICAvKiBVbmV4cGVjdGVkIHJlcGVhdHMgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1Olx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcdTAwM2NcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODAKCQkJCQkJCW91dHB1dDogMTQxCgkJCQkJCQl0aG91Z2h0czogNjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgRml4IGluIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSB0eXBvIGZpeCEmIzM0OyAgVGhlIGF1dGhvciB3YXMgdXNpbmcgYElQUFJPVE9fRlJBR01FTlRgICh3aGljaCwgbGV0JiMzOTtzIHNlZSwgaXMgYDQ0YCwgcmVwcmVzZW50aW5nIGEgY29tYmluYXRpb24gb2YgYml0cyBpbiBhIGJpdG1hc2spIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgT0ZQSUVIMTJfRlJBR2AgKHdoaWNoIGlzIGAxICZsdDsmbHQ7IDRgLCBvciBgMTZgKS4gVGhlIGNvZGUmIzM5O3MgaW4gYGdldF9pcHY2X2V4dF9oZHJzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fRVNQYCBhbmQgYElQUFJPVE9fQUhgIGNhc2VzLiBJdCYjMzk7cyBhIGJpdG1hc2sgY2FsY3VsYXRpb24sIGFuZCB0aGV5JiMzOTtyZSB1c2luZyBhIHByb3RvY29sIG51bWJlciBpbnN0ZWFkIG9mIGEgZmxhZy4gQ2xhc3NpYyBlcnJvci4KCk5vdywgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiAgSXMgdGhpcyBqdXN0IGEgbG9naWMgZXJyb3IsIG9yIGRvZXMgaXQgaGF2ZSBkZWVwZXIgaW1wbGljYXRpb25zPyBJcyB0aGVyZSBhIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBvZiB0aGlzIHR5cG8/IEkgbmVlZCB0byBydWxlIHRoYXQgb3V0IGltbWVkaWF0ZWx5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLiBXaGF0IHRyaWdnZXJzIHRoZXNlPwoKKiAgIEkgY2hlY2s6IERvZXMgdGhlIHBhdGNoIGFsdGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcz8gTm9wZS4gTm90IHJlbGV2YW50IGhlcmUuCiogICBEb2VzIGl0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIGJlY2F1c2UgYCpleHRfaGRyc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGJlZm9yZWhhbmQuICBMaW5lIDI3Ni4gR29vZC4KKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ/IE5vcGUsIGRvZXNuJiMzOTt0IGFwcGVhciBzby4KKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcy9sZW5ndGhzIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuCgpUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgYml0d2lzZSBmbGFnIG1hbmlwdWxhdGlvbiBmb3IgbWF0Y2hpbmcgT3BlbkZsb3cgSVB2NiBleHRlbnNpb24gaGVhZGVycyByZWxhdGVkIHRvIHRoZSBzZXF1ZW5jaW5nIGZsYWcgKGBPRlBJRUgxMl9VTlNFUWApLiBTbywgdGhpcyBpcyBhIGNsZWFuLCBzaW1wbGUgYnVnIGZpeC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBhYnNvbHV0ZWx5IGZhbHNlLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNvcnJlY3Rpb24uCgpPa2F5LCBJJiMzOTt2ZSBjb25maXJtZWQgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB1c2UgYHNldC1yZXN1bHRzYCB0b29sLCBwcm92aWRpbmcgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIG1haW50YWluZXJzLCBzbyB0aGV5IGNhbiBhZGRyZXNzIHRoaXMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBvIGluIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCksIHdoZXJlIHRoZSBwcm90b2NvbCBudW1iZXIgYElQUFJPVE9fRlJBR01FTlRgIHdhcyBtaXN0YWtlbmx5IHVzZWQgaW4gYml0bWFzayBjaGVja3MgaW5zdGVhZCBvZiB0aGUgYml0ZmxhZyBgT0ZQSUVIMTJfRlJBR2AuXG5cbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI0LjkzNzYwODQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NzU0NTI2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICAgIFwicGFyc2VfaXB2NmhkclwiLFxuICAgIFwib3ZzX2Zsb3dfa2V5X2V4dHJhY3RcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB0eXBvIGluIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCksIHdoZXJlIHRoZSBwcm90b2NvbCBudW1iZXIgYElQUFJPVE9fRlJBR01FTlRgIHdhcyBtaXN0YWtlbmx5IHVzZWQgaW4gYml0bWFzayBjaGVja3MgaW5zdGVhZCBvZiB0aGUgYml0ZmxhZyBgT0ZQSUVIMTJfRlJBR2AuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgYml0ZmllbGRzIGludm9sdmVkIChgKmV4dF9oZHJzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgcGFyc2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI0LjkzNzYxMjk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY2Nzk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcXG5pbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXFxuQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuIFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9FU1ApXFxuIFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gXFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbi1cXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gXFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxcbiBcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbi1cXHRcXHRcXHQgICAgICAgSVBQUk9UT19GUkFHTUVOVCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4rXFx0XFx0XFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gXFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiBcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI1LjUwNDkyNTkzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTg0NDU2MDkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICAgIFwicGFyc2VfaXB2NmhkclwiLFxuICAgIFwib3ZzX2Zsb3dfa2V5X2V4dHJhY3RcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzY5Mzg5MTU5OTEwNGZjZTUwZWNjNjQ3NjgzMWVmODMwMTA3MDI1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuaW5kZXggNDZjMWQ2NmFhZDhjMy4uODY4ZDlmZGYzYWZkZiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbkBAIC0yODgsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxuIFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2IE9GUElFSDEyX0VTUClcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiBcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcbi1cdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgSVBQUk9UT19GUkFHTUVOVCB8XG4rXHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxuIFx0XHRcdFx0XHQgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gXHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuLVx0XHRcdCAgICAgICBJUFBST1RPX0ZSQUdNRU5UIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuK1x0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI1LjUwNDkyODEwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzE5Nzk4MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggRmxvdyBDb2RlKipcblxuT2theSwgc28gdGhlIHBhdGNoIEknbSB3b3JraW5nIG9uIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBUaW1lIHRvIGRpZyBpbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIHBpbnBvaW50aW5nIGl0cyBwcmVjaXNlIGxvY2F0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgMjg4LiBJIGFsd2F5cyBmaW5kIGEgc29saWQgY29udGV4dCBjaGVjayBpcyBjcnVjaWFsLlxuXG5BbHJpZ2h0LCBJJ2xsIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGZyZXNoIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBieSBvbmx5IGxvb2tpbmcgYXQgdGhlIHBhdGNoLiBBbmQsIGFzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UsIGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIE9wZW4gdlN3aXRjaC4gVGhpcyB3aWxsIGhvcGVmdWxseSBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjaGFuZ2VzLiBHb3R0YSBlbnN1cmUgY29tcGF0aWJpbGl0eSBhdCBhbGwgbGV2ZWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozNzo0Ny44MjQ3MjgyNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRcXHRcXHQgICAgICB1MTYgKmV4dF9oZHJzKVxcbiAyNzE6XFx0e1xcbiAyNzI6XFx0XFx0dTggbmV4dF90eXBlID0gbmgtXFx1MDAzZW5leHRoZHI7XFxuIDI3MzpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuIDI3NDpcXHRcXHRpbnQgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9IDA7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdCpleHRfaGRycyA9IDA7XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdHdoaWxlIChpcHY2X2V4dF9oZHIobmV4dF90eXBlKSkge1xcbiAyNzk6XFx0XFx0XFx0c3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdFxcdHN3aXRjaCAobmV4dF90eXBlKSB7XFxuIDI4MjpcXHRcXHRcXHRjYXNlIElQUFJPVE9fTk9ORTpcXG4gMjgzOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9OT05FWFQ7XFxuIDI4NDpcXHRcXHRcXHRcXHQvKiBzdG9wIHBhcnNpbmcgKi9cXG4gMjg1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0VTUDpcXG4gMjg4OlxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9FU1ApXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDI5MDpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcXG4gMjkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDI5MzpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDI5NTpcXHRcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xcbiAyOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19BSDpcXG4gMzAwOlxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNlxcbiAzMDM6XFx0XFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbiAzMDQ6XFx0XFx0XFx0XFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDMwNTpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDMwNjpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDMwNzpcXHRcXHRcXHRcXHR9XFxuIDMwODpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcXG4gMzA5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRcXHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcXG4gMzEyOlxcdFxcdFxcdFxcdGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDApIHtcXG4gMzEzOlxcdFxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbiAzMTQ6XFx0XFx0XFx0XFx0XFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzMTY6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XFxuIDMxNzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xcbiAzMTg6XFx0XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxuIDMxOTpcXHRcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NDcuODI0ODIxNDA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NDcuODc3NDI1NDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2NjExMTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrIG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGdldF9pcHY2X2V4dF9oZHJzYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIG91dCBpdHMgY2FsbCBncmFwaCDigJMgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBpbnZva2VkIGZyb20sIGFuZCB3aGF0IGZ1bmN0aW9ucyBsZWFkIHRvICp0aG9zZSogY2FsbHM/IFRoZSBhaW0gaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCBhIGxlYWYgZnVuY3Rpb24sIGNhbGxlZCBvbmx5IGZyb20gYSBjb3VwbGUgb2YgcGxhY2VzLCBvciBpcyBpdCBhIGNydWNpYWwgbGluayBkZWVwZXIgaW4gc29tZSBzb3J0IG9mIElQdjYgaGVhZGVyIHByb2Nlc3NpbmcgY2hhaW4/IFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRpY3RhdGUgaG93IGRlZXBseSBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgSSdtIGRlYWxpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgc3RhY2sgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjQ5Ljk0MzUzOTI1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIwNDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNDMtLyoqXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNDQ6ICogZ2V0X2lwdjZfZXh0X2hkcnMoKSAtIFBhcnNlcyBwYWNrZXQgYW5kIHNldHMgSVB2NiBleHRlbnNpb24gaGVhZGVyIGZsYWdzLlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ1LSAqXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI2OC0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI2OTpzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNzAtXFx0XFx0XFx0ICAgICAgdTE2ICpleHRfaGRycylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MzgxPXN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzk1LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mzk2OlxcdGdldF9pcHY2X2V4dF9oZHJzKHNrYiwgbmgsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjYuZXh0aGRycyk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjQ5Ljk5OTc1MDQwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjg4OTcxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byBGbG93LmMncyBJUHY2IEhlYWRlciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQdjYgaGVhZGVycyBhcmUgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGZsb3cgZW5naW5lLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGEgZmV3IGtleSBmdW5jdGlvbnMgaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDogYHBhcnNlX2lwdjZoZHJgLCBga2V5X2V4dHJhY3RgLCBhbmQgd2hhdGV2ZXIgZWxzZSBpcyByZWxldmFudC4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXkncmUgKmNhbGxlZCouIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgZGF0YSBleHRyYWN0aW9uIGFuZCBwYXJzaW5nIGFyZSBhY3R1YWxseSBwbHVnZ2VkIGludG8gdGhlIGZsb3cgcHJvY2Vzc2luZyBwaXBlbGluZS4gRmluZGluZyB0aG9zZSBjYWxscyB3aWxsIGdpdmUgbWUgY29udGV4dCwgbGV0IG1lIHNlZSBob3cgSVB2NiBoZWFkZXIgaW5mb3JtYXRpb24gaW5mbHVlbmNlcyBmbG93IG1hdGNoaW5nIGFuZCBhY3Rpb24gc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBmbG93LCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIHBpZWNlcyBpcyB3aGF0IEknbSBhZnRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjUyLjMyODY1MDE5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTIyNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV9pcHY2aGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTI2OT1zdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM4MTpzdGF0aWMgaW50IHBhcnNlX2lwdjZoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zODIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz02Nzk9c3RhdGljIGludCBrZXlfZXh0cmFjdF9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo4MTk6XFx0XFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MjAtXFx0XFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjUyLjM3OTg3OTU1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUzNjc3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDYWxsZXJzIG9mIEtleSBFeHRyYWN0aW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBrZXkgZXh0cmFjdGlvbiBmdW5jdGlvbnM6IGBrZXlfZXh0cmFjdF9sM2w0YCwgYG92c19mbG93X2tleV9leHRyYWN0YCwgYW5kIGFueSBvdGhlcnMgaW4gdGhhdCB2ZWluLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBoZXJlLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcHJlY2lzZSBpZGVudGlmaWNhdGlvbiBvZiBuZXR3b3JrIGZsb3cga2V5cywgcGFydGljdWxhcmx5IHRob3NlIHdoaWNoIGV4dHJhY3QgdGhlIGxheWVyIDMgYW5kIDQgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGZsb3cgZW50cmllcy4gVW5kZXJzdGFuZGluZyB0aGVpciBjYWxsIGdyYXBocyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIHZhcmlldHkgb2YgdGFza3MuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGNvZGUgYXJlICpyZWx5aW5nKiBvbiB0aGVzZSBzcGVjaWZpYyBrZXkgZXh0cmFjdGlvbnMuIFdoYXQgYXJlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGlzIHVzZWQ/IEknbSB0aGlua2luZzpcblxuKiAgICoqRmxvdyBUYWJsZSBMb29rdXBzKio6IE9idmlvdXNseSwgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtleSBpcyBjYWxjdWxhdGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtYXRjaGluZyBsb2dpYy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGV4dHJhY3RlZCBrZXkgY29tcG9uZW50cyBhcmUgZmVkIGludG8gdGhlIGZsb3cgdGFibGUgbG9va3VwIHByb2Nlc3MsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBiZWluZyBwZXJmb3JtZWQgb24gdGhlIGV4dHJhY3RlZCBrZXkgdG8gZW5zdXJlIGZhc3RlciBsb29rdXBzLlxuKiAgICoqRmxvdyBDcmVhdGlvbi9JbnNlcnRpb24qKjogV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQgd2hlbiBuZXcgZmxvd3MgYXJlIGJlaW5nIGNyZWF0ZWQ/IFRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB3ZSdyZSBidWlsZGluZyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBkdXJpbmcgZmxvdyBjcmVhdGlvbj9cbiogICAqKkZsb3cgTW9kaWZpY2F0aW9uL1VwZGF0ZXMqKjogQXJlIHRoZXNlIGZ1bmN0aW9ucyBhbHNvIGludm9sdmVkIHdoZW4gbW9kaWZ5aW5nIGV4aXN0aW5nIGZsb3dzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBjb21wb25lbnRzIGNoYW5nZT9cbiogICAqKkVycm9yIEhhbmRsaW5nL0RpYWdub3N0aWNzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBmb3IgYW55IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgb3IgbG9nZ2luZyByZWxhdGVkIHRvIGZsb3cga2V5IG1pc21hdGNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcj9cbiogICAqKlBhY2tldCBQcm9jZXNzaW5nIFBhdGhzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgY2FsbGVkIGluIHRoZSBmYXN0IHBhdGggb3Igb25seSBpbiB0aGUgc2xvdyBwYXRoPyBIb3cgbXVjaCBvZiBhbiBpbXBhY3QgZG8gdGhleSBoYXZlIG9uIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgbGF0ZW5jeT9cblxuTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZW50aXJlIGtleSBleHRyYWN0aW9uIGFuZCBmbG93IG1hbmFnZW1lbnQgcGlwZWxpbmUuIEl0IHdpbGwgYWxsb3cgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBib3R0bGVuZWNrcyBhbmQgcG9zc2libGUgb3B0aW1pc2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgdml0YWwgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIGtleSBleHRyYWN0aW9uIGxvZ2ljLCBhbmQgdG8gYWxzbyB1bmRlcnN0YW5kIHdoZXJlIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjU1LjYzMzU1OTA2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0ODg5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2V5X2V4dHJhY3RfbDNsNHxvdnNfZmxvd19rZXlfZXh0cmFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4NC1cXHRpZiAoZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUCkge1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM4NTpcXHRcXHQvKiBUaGUgaW5pdGlhbCBmbG93IGtleSBleHRyYWN0ZWQgYnkgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4Ni1cXHRcXHQgKiBpbiB0aGlzIGNhc2UgaXMgZm9yIGEgZmlyc3QgZnJhZ21lbnQsIHNvIHdlIG5lZWQgdG9cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTYxND1zdGF0aWMgaW50IG92c19wYWNrZXRfY21kX2V4ZWN1dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTY2OS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo2NzA6XFx0ZXJyID0gb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlKG5ldCwgYVtPVlNfUEFDS0VUX0FUVFJfS0VZXSxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy02NzEtXFx0XFx0XFx0XFx0XFx0ICAgICBwYWNrZXQsIFxcdTAwMjZmbG93LVxcdTAwM2VrZXksIGxvZyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYyNT1zdGF0aWMgaW50IHBhcnNlX25zaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNjcxLS8qKlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NjcyOiAqIGtleV9leHRyYWN0X2wzbDQgLSBleHRyYWN0cyBMMy9MNCBoZWFkZXIgaW5mb3JtYXRpb24uXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02NzMtICogQHNrYjogc2tfYnVmZiB0aGF0IGNvbnRhaW5zIHRoZSBmcmFtZSwgd2l0aCBza2ItXFx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gdGhlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3OC0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjY3OTpzdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02ODAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05MDk9c3RhdGljIGludCBrZXlfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTYzLVxcdC8qIEZpbGwgb3V0IEwzL0w0IGtleSBpbmZvLCBpZiBhbnkgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjk2NDpcXHRyZXR1cm4ga2V5X2V4dHJhY3RfbDNsNChza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NjUtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05NzA9aW50IG92c19mbG93X2tleV91cGRhdGVfbDNsNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk3MS17XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo5NzI6XFx0cmV0dXJuIGtleV9leHRyYWN0X2wzbDQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTczLX1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9OTg2PXN0YXRpYyBpbnQga2V5X2V4dHJhY3RfbWFjX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk5OS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMDA6aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDAxLVxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTA3NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwNzU6aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4OT1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjI5MDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5MS1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjkzLS8qIEV4dHJhY3Qga2V5IGZyb20gcGFja2V0IGNvbWluZyBmcm9tIHVzZXJzcGFjZS4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjI5NDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQyLVxcdC8qIEV4dHJhY3QgZmxvdyBmcm9tICdza2InIGludG8gJ2tleScuICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDQzOlxcdGVycm9yID0gb3ZzX2Zsb3dfa2V5X2V4dHJhY3QodHVuX2luZm8sIHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ0LVxcdGlmICh1bmxpa2VseShlcnJvcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NTUuNjkzMDUzNDEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDcxNDQyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2Ugd2l0aGluIGBnZXRfaXB2Nl9leHRfaGRyc2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggRVNQIGFuZCBBSCBwcm90b2NvbHMuIEkgc2VlIGEgZGlyZWN0IHN3YXAtb3V0OiB0aGUgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYE9GUElFSDEyX0ZSQUdgIGluIHRoZSBiaXRtYXNrIGNoZWNrcy5cblxuUmlnaHQgYXdheSwgSSByZWNvZ25pemUgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXguIFVzaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCAoYW4gSVAgcHJvdG9jb2wgbnVtYmVyKSBpbiBhIGJpdG1hc2sgb3BlcmF0aW9uIGZvciB0aGUgT3BlbkZsb3cgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgYSBkZWZpbml0ZSBtaXNzdGVwLiBJdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBjaGVja2luZyBhZ2FpbnN0IHRoZSBwcm90b2NvbCAqdHlwZSogb2YgYSBmcmFnbWVudGVkIHBhY2tldCAod2hpY2ggd291bGRuJ3QgYmUgcHJlc2VudCBhdCB0aGlzIGxheWVyKSwgcmF0aGVyIHRoYW4gdGVzdGluZyB3aGV0aGVyIHRoZSBmcmFnbWVudGF0aW9uICpoZWFkZXIgZmxhZyogd2FzIHByZXNlbnQgaW4gdGhlIGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIHNlcXVlbmNlIGFuZCByZS1vcmRlcmluZyBwcm9wZXJ0aWVzIHdoZW4gY2VydGFpbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC5cblxuTm93LCBsZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgc3VzcGljaW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YgYE9GUElFSDEyX0ZSQUdgIGFuZCB0aGUgcmVsYXRlZCBPcGVuRmxvdyAxLjIgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHZlcmlmeSB0aGUgZmxhZyBiaXQgYXNzaWdubWVudC4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgYE9GUElFSDEyX0ZSQUdgIGlzIGEgYml0IGZsYWcgd2l0aGluIHRoZSBPRlBJRUgxMiBiaXRmaWVsZC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3Igd2hlcmUgdGhlIHByZXNlbmNlIG9mIHRoZSBmcmFnbWVudGF0aW9uIGhlYWRlciB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IGlkZW50aWZpZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGNsYXNzaWZpY2F0aW9uIG9yIHByb2Nlc3Npbmcgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIHdpdGhpbiB0aGUgT3BlbkZsb3cgY29udGV4dC4gSXQncyBhIGNsZWFyIGFuZCBpbXBvcnRhbnQgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhlIHJpZ2h0IGJlaGF2aW9yIGZvciBFU1AgYW5kIEFIIHBhY2tldHMgd2l0aCBmcmFnbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjAwLjkwMDIwMTA0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDA2MDU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPRlBJRUgxMl9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNDktICpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjUxLSAqIGlzIHVuZXhwZWN0ZWRseSBlbmNvdW50ZXJlZC4gKFR3byBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgbWF5IGJlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjU0OiAqIE9GUElFSDEyX1VOU0VRIGlzIHNldCBpZiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHdlcmUgbm90IGluIHRoZSBvcmRlclxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjU1LSAqIHByZWZlcnJlZCAoYnV0IG5vdCByZXF1aXJlZCkgYnkgUkZDIDI0NjA6XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTI2OT1zdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cXHRcXHRjYXNlIElQUFJPVE9fTk9ORTpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjg0LVxcdFxcdFxcdC8qIHN0b3AgcGFyc2luZyAqL1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXFx0XFx0Y2FzZSBJUFBST1RPX0VTUDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfRVNQKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjg5OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI5MDpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTQ6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk1LVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI5NjpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTktXFx0XFx0Y2FzZSBJUFBST1RPX0FIOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAwOlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDM6XFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0OlxcdFxcdFxcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA1LVxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDctXFx0XFx0XFx0fVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4OlxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XFx0XFx0XFx0XFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE1OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxNy1cXHRcXHRcXHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE4LVxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE5OlxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIwOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9FU1AgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIyOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIzOlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMyNC1cXHRcXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXFx0XFx0XFx0fVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzEtXFx0XFx0Y2FzZSBJUFBST1RPX0ZSQUdNRU5UOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzMyOlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzMzOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNTpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNjpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzM3OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMzOC1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzk6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0MTpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRlJBRztcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0Mi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQ0LVxcdFxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ1OlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9ST1VURVIpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ3OlxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ4OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ5OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1MC1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUyLVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzU0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXFx0XFx0Y2FzZSBJUFBST1RPX0hPUE9QVFM6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0hPUClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1ODpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTk6XFx0XFx0XFx0LyogT0ZQSUVIMTJfSE9QIGlzIHNldCB0byAxIGlmIGEgaG9wLWJ5LWhvcCBJUHY2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjAtXFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpcyBwcmVzZW50IGFzIHRoZSBmaXJzdFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjMtXFx0XFx0XFx0aWYgKCpleHRfaGRycyA9PSAwKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzY0OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjUtXFx0XFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzY2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM3OlxcdE9GUElFSDEyX05PTkVYVCA9IDEgXFx1MDAzY1xcdTAwM2MgMCwgICAvKiBcXFwiTm8gbmV4dCBoZWFkZXJcXFwiIGVuY291bnRlcmVkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzg6XFx0T0ZQSUVIMTJfRVNQICAgID0gMSBcXHUwMDNjXFx1MDAzYyAxLCAgIC8qIEVuY3J5cHRlZCBTZWMgUGF5bG9hZCBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM5OlxcdE9GUElFSDEyX0FVVEggICA9IDEgXFx1MDAzY1xcdTAwM2MgMiwgICAvKiBBdXRoZW50aWNhdGlvbiBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlxcdE9GUElFSDEyX0RFU1QgICA9IDEgXFx1MDAzY1xcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MTpcXHRPRlBJRUgxMl9GUkFHICAgPSAxIFxcdTAwM2NcXHUwMDNjIDQsICAgLyogRnJhZ21lbnQgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MjpcXHRPRlBJRUgxMl9ST1VURVIgPSAxIFxcdTAwM2NcXHUwMDNjIDUsICAgLyogUm91dGVyIGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XFx0T0ZQSUVIMTJfSE9QICAgID0gMSBcXHUwMDNjXFx1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0NDpcXHRPRlBJRUgxMl9VTlJFUCAgPSAxIFxcdTAwM2NcXHUwMDNjIDcsICAgLyogVW5leHBlY3RlZCByZXBlYXRzIGVuY291bnRlcmVkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDU6XFx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcXHUwMDNjXFx1MDAzYyA4ICAgIC8qIFVuZXhwZWN0ZWQgc2VxdWVuY2luZyBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjAyLjg0MDI2NzQ0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc1MjEwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGFuIE9wZW4gdlN3aXRjaCBCdWcgYW5kIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nLiBJdCBzZWVtcyB0aGF0IHRoZSBjaGVjayBoZXJlLCBgSVBQUk9UT19GUkFHTUVOVGAsIHdoaWNoIGlzIDQ0IChvciAweDJDLCBtZWFuaW5nIEFVVEgsIERFU1QsIGFuZCBST1VURVIgYml0cyBzZXQpLCBpcyBiZWluZyB1c2VkIGluc3RlYWQgb2YgYE9GUElFSDEyX0ZSQUdgLCB3aGljaCBpcyBzaW1wbHkgMTYuIFRoYXQncyBhIGNsZWFyIGJ1ZyBpbiBgZ2V0X2lwdjZfZXh0X2hkcnMoKWAhIFRoZSB3cm9uZyBjb25zdGFudCBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IE9wZW4gdlN3aXRjaCBpcyBhIHZpcnR1YWwgZGF0YXBhdGgsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2hgLCBhbmQgaXQncyBmdWxseSBzdXBwb3J0ZWQuIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdmlhIE5ldGxpbmsuIFN5emthbGxlciwgd2hpY2ggSSBrbm93IHZlcnkgd2VsbCwgYWN0aXZlbHkgZnV6emV6IE9WUyB1c2luZyBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGFuZCBgb3ZzX2Zsb3dfY21kX25ld2AuIEdpdmVuIHRoaXMsIGl0J3MgYWJzb2x1dGVseSByZWFjaGFibGUuIFRoZXJlIGFyZSBubyBxdWVzdGlvbnMuIEl0J3MgZnVsbHkgcmVhY2hhYmxlLlxuXG5UaW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBmaWxlcy4gSSBzaG91bGQgY2hlY2sgYEtjb25maWdgIGZvciBPUEVOVlNXSVRDSC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbmZpZ3VyZWQsIGFuZCB3aGF0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDUuOTE1NDgwMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDUuOTE1NTQ4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2MzgzMzg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBEZXBlbmRlbmN5IGluIE9wZW4gdlN3aXRjaCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gSVB2NiBhbmQgSU5FVCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBPcGVuIHZTd2l0Y2guIEkga25vdyBPVlMgaXMgbGlua2VkIHRvIElORVQsIGFuZCB0aGF0IE9WUyBpdHNlbGYgaXMgY29tcGlsZWQgd2l0aCBpdHMgb3duIG1vZHVsZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJUHY2IHN1cHBvcnQgd2l0aGluIE9WUyBpcyBjb25kaXRpb25hbCwgdGhhdCBpcywgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFnLiBJJ20gYmV0dGluZyB0aGF0IGBDT05GSUdfSVBWNmAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRvIGNvbmZpcm0gdGhpcyBhbmQgdG8gYWN0dWFsbHkgKnNlZSogaG93IElQdjYgc3VwcG9ydCBpcyBoYW5kbGVkLCBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBDT05GSUdfSVBWNmAgb3IgZXZlbiBqdXN0IHBsYWluIGBJUFY2YCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNsdWUgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgZW1wbG95ZWQgd2l0aGluIE9WUyByZWdhcmRpbmcgSVB2Ni4gVGhpcyBzaG91bGQgcXVpY2tseSBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDguNDc5Mzg0NTQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBWNnxJU19FTkFCTEVEXFxcXChDT05GSUdfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE0NDY9c3RhdGljIGJvb2wgb3ZzX2N0X25hdF90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTQ3NC1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE0NzU6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNDc2LVxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDguNTI4ODI1MjE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY2NjEyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEZsb3cgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHdoZW4gSSdtIHRyYWNraW5nIGRvd24gdGhlIElQdjYtcmVsYXRlZCBzdHVmZiBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIGFsd2F5cyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24sIHNvIGl0J3MgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgdG8gZmlndXJlIG91dCBob3cgSVB2NiBwYWNrZXRzIGFyZSBiZWluZyBjbGFzc2lmaWVkIGFuZCBtYXRjaGVkLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhleSdyZSBoYW5kbGluZyB0aG9zZSBJUHY2IGFkZHJlc3NlcywgdGhlIGZsb3cga2V5cywgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbiBwbGFjZSBmb3IgSVB2NiB0cmFmZmljLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgbWF5YmUgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBwYWNrZXQgaGVhZGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBJUHY2IGZsb3cgcHJvY2Vzc2luZyBpcyBsaWtlbHkgbG9jYXRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgYXQgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCwgSSBob3BlIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyB0cmlja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MTEuMjk1NDg5OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX2lwdjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgwLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4Mi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgxOC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcXHRcXHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cXHRcXHRpZiAodW5saWtlbHkobmhfbGVuIFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MTEuMzQ3MTE5OTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjY1OTI0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYElQVjZgIGNvbmZpZ3VyYXRpb24gZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYm90aCBgQ09ORklHX0lQVjZgIGFuZCBgQ09ORklHX09QRU5WU1dJVENIYCBhcmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYENPTkZJR19JUFY2YCBpcywgaW4gZmFjdCwgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgYW55IElQdjYgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBzZXR1cC4gSW4gdGhlIExpbnV4IGtlcm5lbCwgZW5hYmxpbmcgYElQVjZgIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSwgc28gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGRlcGVuZGVuY3kgaGVyZS5cblxuTG9va2luZyBhdCBgZmxvdy5jYCwgdGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgYGtleS1cdTAwM2VldGgudHlwZSA9PSBodG9ucyhFVEhfUF9JUFY2KWAsIHdoaWNoIHN1YnNlcXVlbnRseSBjYWxscyBgcGFyc2VfaXB2NmhkcmAuIFNvLCBkb2VzIGBPUEVOVlNXSVRDSGAgcmVseSBkaXJlY3RseSBvbiBgSVBWNmAgb3Igbm90PyBJcyB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jeT8gSSBuZWVkIHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaWYgaXQncyBzdHJpY3RseSBuZWNlc3NhcnksIG9yIGlmIHRoZXJlJ3Mgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbGwgZXhhbWluZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgYXJvdW5kIGxpbmUgODE4LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gY2hlY2sgaG93IHRoZSBmbGFnIGlzIHVzZWQgd2l0aCByZXNwZWN0IHRvIE9wZW4gdlN3aXRjaC4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIGFuc3dlciB0aGVyZSBhbmQgY2FuIGRldGVybWluZSB0aGUgbmVjZXNzaXR5IG9mIHRoZSBgSVBWNmAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODoxNy4wMTM3MTUzMzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTA6XFx0XFx0XFx0XFx0bGFiZWxfY291bnQrKztcXG4gODExOlxcdFxcdFxcdH1cXG4gODEyOlxcdFxcdFxcdGlmIChsYWJlbF9jb3VudCBcXHUwMDNlIE1QTFNfTEFCRUxfREVQVEgpXFxuIDgxMzpcXHRcXHRcXHRcXHRsYWJlbF9jb3VudCA9IE1QTFNfTEFCRUxfREVQVEg7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdFxcdGtleS1cXHUwMDNlbXBscy5udW1fbGFiZWxzX21hc2sgPSBHRU5NQVNLKGxhYmVsX2NvdW50IC0gMSwgMCk7XFxuIDgxNjpcXHRcXHR9IGVsc2UgaWYgKGtleS1cXHUwMDNlZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gODE3OlxcdFxcdFxcdGludCBuaF9sZW47ICAgICAgICAgICAgIC8qIElQdjYgSGVhZGVyICsgRXh0ZW5zaW9ucyAqL1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRcXHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcXG4gODIwOlxcdFxcdFxcdGlmICh1bmxpa2VseShuaF9sZW4gXFx1MDAzYyAwKSkge1xcbiA4MjE6XFx0XFx0XFx0XFx0c3dpdGNoIChuaF9sZW4pIHtcXG4gODIyOlxcdFxcdFxcdFxcdGNhc2UgLUVJTlZBTDpcXG4gODIzOlxcdFxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2a2V5LVxcdTAwM2VpcCwgMCwgc2l6ZW9mKGtleS1cXHUwMDNlaXApKTtcXG4gODI0OlxcdFxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmFkZHIsIDAsIHNpemVvZihrZXktXFx1MDAzZWlwdjYuYWRkcikpO1xcbiA4MjU6XFx0XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDgyNjpcXHRcXHRcXHRcXHRjYXNlIC1FUFJPVE86XFxuIDgyNzpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiA4Mjk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgzMDpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4MzE6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBuaF9sZW47XFxuIDgzMjpcXHRcXHRcXHRcXHR9XFxuIDgzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDgzNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjE3LjAxMzgxMTc1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODU2Nzk5Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCBzcGVjaWZpY2FsbHksIGZvY3VzaW5nIG9uIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3ltYm9scyBmb3IgZnV6emluZy4gSSdtIHplcm9pbmcgaW4gb24gYHBhcnNlX2lwdjZoZHJgIGFuZCBgZ2V0X2lwdjZfZXh0X2hkcnNgIGluIGBmbG93LmNgIGFzIGNvcmUgdG8gdGhpcyBhcmVhLCBhbmQgdGhlbiBhbHNvIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAgYW5kIGBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VgIGFzIHRoZSBleHRlcm5hbCBlbnRyeSBwb2ludHMuIEkga25vdyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBgcGFyc2VfaXB2NmhkcmAgYXJlIHN0YXRpYyB3aXRoaW4gYGZsb3cuY2AsIGFuZCB0aGF0J3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS5cblxuTm93LCBteSB1bmRlcnN0YW5kaW5nIG9mIGBGb2N1c1N5bWJvbHNgIGd1aWRhbmNlIGlzIGtleSBoZXJlLiBCZWNhdXNlIGBnZXRfaXB2Nl9leHRfaGRyc2AgYW5kIGBwYXJzZV9pcHY2aGRyYCBhcmVuJ3QgaW5saW5lZCBhbmQgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICpzaG91bGQqIGJlIHRhcmdldGFibGUuIEV2ZW4gaWYgdGhleSB3ZXJlIHN0YXRpYywgSSBrbm93IHRoYXQgaWYgdGhleSBhcmUgbm9uLWlubGluZWQgdGhlbiB0aGV5IHNob3VsZCBiZSB0YXJnZXRhYmxlLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGhlbHBlcnMgdG8gcHVibGljIGZhY2luZyBmdW5jdGlvbnMuIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYywgYW5kIGlkZW50aWZ5IGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVycy4gSSB0aGluayBJJ3ZlIGRvbmUgdGhhdC4gSSBhbHNvIHRoaW5rIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RgIGFuZCBgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlYCBhcmUga2V5IGFzIHRoZSBwdWJsaWMgZW50cnlwb2ludHMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb246IGBPUEVOVlNXSVRDSGAgYW5kIGBJUFY2YCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHRoYXQncyBnb29kLlxuXG5BcyBmb3IgXCJXb3J0aEZ1enppbmdcIiwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIGluIHRoZSBgZ2V0X2lwdjZfZXh0X2hkcnNgIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIG5ldHdvcmtpbmcgaW50ZXJmYWNlcyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhhdCdzIGEgc3Ryb25nIHBvc2l0aXZlIGluZGljYXRvci5cblxuU28sIGhlcmUncyB0aGUgZmluYWwgcmVzdWx0OlxuKiAgICoqQ29uZmlncyoqOiBcXFtcIk9QRU5WU1dJVENIXCIsIFwiSVBWNlwiXVxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFxcW1wiZ2V0XFxfaXB2NlxcX2V4dFxcX2hkcnNcIiwgXCJwYXJzZVxcX2lwdjZoZHJcIiwgXCJvdnNcXF9mbG93XFxfa2V5XFxfZXh0cmFjdFwiLCBcIm92c1xcX2Zsb3dcXF9rZXlcXF9leHRyYWN0XFxfdXNlcnNwYWNlXCJdXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBPcGVuIHZTd2l0Y2gncyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCkgYnkgY2hhbmdpbmcgYW4gaW5jb3JyZWN0IGBJUFBST1RPX0ZSQUdNRU5UYCBjb25zdGFudCB0byBgT0ZQSUVIMTJfRlJBR2AgYml0bWFzayBmbGFncy4gVGhpcyBhcmVhIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE9wZW4gdlN3aXRjaCBmbG93IGtleSBleHRyYWN0aW9uIHdoZW4gcHJvY2Vzc2luZyBJUHY2IHBhY2tldHMuIEZ1enppbmcgaXMganVzdGlmaWVkIHRvIHRlc3QgdGhhdCBleHRlbnNpb24gaGVhZGVyIGZsYWdzIGFuZCBzZXF1ZW5jaW5nIGNoZWNrcyBoYW5kbGUgYWxsIHBvc3NpYmxlIElQdjYgcGFja2V0IGhlYWRlcnMgY29ycmVjdGx5IGFuZCB3aXRob3V0IHJlZ3Jlc3Npb24uXG5cbkknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NDgsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuODcwNjE0NTg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MTcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2lwdjZfZXh0X2hkcnNcIixcbiAgICBcInBhcnNlX2lwdjZoZHJcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0XCIsXG4gICAgXCJvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gZ2V0X2lwdjZfZXh0X2hkcnMoKSwgY29ycmVjdGx5IHVzaW5nIHRoZSBPRlBJRUgxMl9GUkFHIGJpdG1hc2sgaW5zdGVhZCBvZiB0aGUgSVBQUk9UT19GUkFHTUVOVCBwcm90b2NvbCBjb25zdGFudCB3aGVuIGNoZWNraW5nIGZvciBvdXQtb2Ytc2VxdWVuY2UgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZsb3cga2V5IGV4dHJhY3Rpb24gdmlhIE5ldGxpbmsgLyBkYXRhcGF0aCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2lwdjZfZXh0X2hkcnNcIixcbiAgICBcInBhcnNlX2lwdjZoZHJcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0XCIsXG4gICAgXCJvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gZ2V0X2lwdjZfZXh0X2hkcnMoKSwgY29ycmVjdGx5IHVzaW5nIHRoZSBPRlBJRUgxMl9GUkFHIGJpdG1hc2sgaW5zdGVhZCBvZiB0aGUgSVBQUk9UT19GUkFHTUVOVCBwcm90b2NvbCBjb25zdGFudCB3aGVuIGNoZWNraW5nIGZvciBvdXQtb2Ytc2VxdWVuY2UgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZsb3cga2V5IGV4dHJhY3Rpb24gdmlhIE5ldGxpbmsgLyBkYXRhcGF0aCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODoyMy45NTA1NDAwOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzYyNTEwODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuOTUxMjI1Mjg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3NjE4MjAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxcblxcbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXG5pbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfRVNQKVxuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuLVx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHxcbitcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gXHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5AQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiBcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbiBcdFx0XHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XG4tXHRcdFx0ICAgICAgIElQUFJPVE9fRlJBR01FTlQgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4rXHRcdFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuOTUxMjI2NDY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTUwMDA0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBzdHJhdGVneSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXkgaW50ZWdyYXRlIGludG8gdGhlIGV4aXN0aW5nIGNvZGUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBhcmVhIGlzIGxpa2VseSBhcm91bmQgdGhlIGZsb3cgaGFuZGxpbmcgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiBsaW5lIDI4OCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYXMgYSBmaXJzdCBwb2ludCBvZiBhdHRhY2ssIGFzIHRoaXMgb2Z0ZW4gZ2l2ZXMgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgdXNlZC5cblxuVGhlbiwgdG8gZmFjaWxpdGF0ZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFwcGx5aW5nIGl0IHRvIGEgYnJvYWRlciByYW5nZSB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLCBzYXksIGxpbmVzIDI1MCB0aHJvdWdoIDM1MC4gVGhpcyBzaG91bGQgcHJvdmlkZSBlbm91Z2ggc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGZvciBhIGZvY3VzZWQgYXNzZXNzbWVudC4gVGhhdCBzaG91bGQgcXVpY2tseSBnZXQgbWUgdGhlIGNvcmUgb2Ygd2hhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMC4wMDYyMzU1MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdCAqIE9GUElFSDEyX1VOUkVQIGlzIHNldCBpZiBtb3JlIHRoYW4gb25lIG9mIGEgZ2l2ZW4gSVB2NiBleHRlbnNpb24gaGVhZGVyXFxuIDI1MTpcXHQgKiBpcyB1bmV4cGVjdGVkbHkgZW5jb3VudGVyZWQuIChUd28gZGVzdGluYXRpb24gb3B0aW9ucyBoZWFkZXJzIG1heSBiZVxcbiAyNTI6XFx0ICogZXhwZWN0ZWQgYW5kIHdvdWxkIG5vdCBjYXVzZSB0aGlzIGJpdCB0byBiZSBzZXQuKVxcbiAyNTM6XFx0ICpcXG4gMjU0OlxcdCAqIE9GUElFSDEyX1VOU0VRIGlzIHNldCBpZiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHdlcmUgbm90IGluIHRoZSBvcmRlclxcbiAyNTU6XFx0ICogcHJlZmVycmVkIChidXQgbm90IHJlcXVpcmVkKSBieSBSRkMgMjQ2MDpcXG4gMjU2OlxcdCAqXFxuIDI1NzpcXHQgKiBXaGVuIG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uIGhlYWRlciBpcyB1c2VkIGluIHRoZSBzYW1lIHBhY2tldCwgaXQgaXNcXG4gMjU4OlxcdCAqIHJlY29tbWVuZGVkIHRoYXQgdGhvc2UgaGVhZGVycyBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcXG4gMjU5OlxcdCAqICAgICAgSVB2NiBoZWFkZXJcXG4gMjYwOlxcdCAqICAgICAgSG9wLWJ5LUhvcCBPcHRpb25zIGhlYWRlclxcbiAyNjE6XFx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxcbiAyNjI6XFx0ICogICAgICBSb3V0aW5nIGhlYWRlclxcbiAyNjM6XFx0ICogICAgICBGcmFnbWVudCBoZWFkZXJcXG4gMjY0OlxcdCAqICAgICAgQXV0aGVudGljYXRpb24gaGVhZGVyXFxuIDI2NTpcXHQgKiAgICAgIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCBoZWFkZXJcXG4gMjY2OlxcdCAqICAgICAgRGVzdGluYXRpb24gT3B0aW9ucyBoZWFkZXJcXG4gMjY3OlxcdCAqICAgICAgdXBwZXItbGF5ZXIgaGVhZGVyXFxuIDI2ODpcXHQgKi9cXG4gMjY5OlxcdHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcXG4gMjcwOlxcdFxcdFxcdFxcdCAgICAgIHUxNiAqZXh0X2hkcnMpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHR1OCBuZXh0X3R5cGUgPSBuaC1cXHUwMDNlbmV4dGhkcjtcXG4gMjczOlxcdFxcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gMjc0OlxcdFxcdGludCBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID0gMDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0KmV4dF9oZHJzID0gMDtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0d2hpbGUgKGlwdjZfZXh0X2hkcihuZXh0X3R5cGUpKSB7XFxuIDI3OTpcXHRcXHRcXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0XFx0c3dpdGNoIChuZXh0X3R5cGUpIHtcXG4gMjgyOlxcdFxcdFxcdGNhc2UgSVBQUk9UT19OT05FOlxcbiAyODM6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcXG4gMjg0OlxcdFxcdFxcdFxcdC8qIHN0b3AgcGFyc2luZyAqL1xcbiAyODU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRjYXNlIElQUFJPVE9fRVNQOlxcbiAyODg6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0VTUClcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMjkwOlxcdFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMjkzOlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMjk1OlxcdFxcdFxcdFxcdH1cXG4gMjk2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9FU1A7XFxuIDI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0FIOlxcbiAzMDA6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0FVVEgpXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDMwMjpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2XFxuIDMwMzpcXHRcXHRcXHRcXHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XFxuIDMwNDpcXHRcXHRcXHRcXHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMzA1OlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMzA3OlxcdFxcdFxcdFxcdH1cXG4gMzA4OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xcbiAzMDk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdGNhc2UgSVBQUk9UT19EU1RPUFRTOlxcbiAzMTI6XFx0XFx0XFx0XFx0aWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMCkge1xcbiAzMTM6XFx0XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxuIDMxNDpcXHRcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXFxuIDMxNTpcXHRcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDMxNjpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcXG4gMzE3OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XFxuIDMxODpcXHRcXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjZcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxuIDMyMTpcXHRcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xcbiAzMjM6XFx0XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0fVxcbiAzMjU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzI3OlxcdFxcdFxcdFxcdH1cXG4gMzI4OlxcdFxcdFxcdFxcdGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQrKztcXG4gMzI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMC4wMDY1NDY0ODVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyMzM0Mzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9pcHY2X2V4dF9oZHJzYCBhbmQgSXRzIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaW1wYWN0IG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AgbW9yZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBjYW4ndCBqdXN0IGlzb2xhdGUgaXQ7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBlbHNlIGlzIHRoaXMgdXNlZD9cIiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgd2FudCB0byBrbm93IGFsbCB0aGUgaW5wdXRzIGFuZCB1c2UtY2FzZXMgdGhhdCBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbiwgdGhlIHBvc3NpYmxlIGVycm9ycywgYW5kIGFsbCB0aGUgcGF0aHMgdGhyb3VnaCB0aGUgY29kZS4gVGhhdOKAmXMgaG93IEkgY2FuIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IsIGFuZCBldmFsdWF0ZSBhbnkgcG90ZW50aWFsIHByb2JsZW1zLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW4gYXJlYSBJIHNob3VsZCBiZSBmb2N1c2VkIG9uLCBvciBpZiB0aGVyZSBpcyBhIG1vcmUgZWZmaWNpZW50IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMi4zMjk4OTMzMzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcbiAzMzE6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0ZSQUdNRU5UOlxcbiAzMzI6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0ZSQUcpXFxuIDMzMzpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDMzNDpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG4gMzM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0RFU1QgfFxcbiAzMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHxcXG4gMzM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMzM4OlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMzM5OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMzQwOlxcdFxcdFxcdFxcdH1cXG4gMzQxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xcbiAzNDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbiAzNDU6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX1JPVVRFUilcXG4gMzQ2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzQ3OlxcdFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxcbiAzNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfREVTVCB8XFxuIDM0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDM1MDpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDM1MTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDM1MjpcXHRcXHRcXHRcXHR9XFxuIDM1MzpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xcbiAzNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxcbiAzNTc6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0hPUClcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzU5OlxcdFxcdFxcdFxcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2NlxcbiAzNjA6XFx0XFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpcyBwcmVzZW50IGFzIHRoZSBmaXJzdFxcbiAzNjE6XFx0XFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpbiB0aGUgcGFja2V0LlxcbiAzNjI6XFx0XFx0XFx0XFx0ICovXFxuIDM2MzpcXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzID09IDApXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfSE9QO1xcbiAzNjU6XFx0XFx0XFx0XFx0ZWxzZVxcbiAzNjY6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzNjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDM3MDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDM3MTpcXHRcXHRcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdFxcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXFx1MDAyNl9oZHIpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKCFocClcXG4gMzc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzY6XFx0XFx0XFx0bmV4dF90eXBlID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuIDM3NzpcXHRcXHRcXHRzdGFydCArPSBpcHY2X29wdGxlbihocCk7XFxuIDM3ODpcXHRcXHR9XFxuIDM3OTpcXHR9XFxuIDM4MDpcXHRcXG4gMzgxOlxcdHN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gMzgyOlxcdHtcXG4gMzgzOlxcdFxcdHVuc2lnbmVkIHNob3J0IGZyYWdfb2ZmO1xcbiAzODQ6XFx0XFx0dW5zaWduZWQgaW50IHBheWxvYWRfb2ZzID0gMDtcXG4gMzg1OlxcdFxcdHVuc2lnbmVkIGludCBuaF9vZnMgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG4gMzg2OlxcdFxcdHVuc2lnbmVkIGludCBuaF9sZW47XFxuIDM4NzpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqbmg7XFxuIDM4ODpcXHRcXHRpbnQgZXJyLCBuZXh0aGRyLCBmbGFncyA9IDA7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdGVyciA9IGNoZWNrX2hlYWRlcihza2IsIG5oX29mcyArIHNpemVvZigqbmgpKTtcXG4gMzkxOlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bmggPSBpcHY2X2hkcihza2IpO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRnZXRfaXB2Nl9leHRfaGRycyhza2IsIG5oLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmV4dGhkcnMpO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRrZXktXFx1MDAzZWlwLnByb3RvID0gTkVYVEhEUl9OT05FO1xcbiAzOTk6XFx0XFx0a2V5LVxcdTAwM2VpcC50b3MgPSBpcHY2X2dldF9kc2ZpZWxkKG5oKTtcXG4gNDAwOlxcdFxcdGtleS1cXHUwMDNlaXAudHRsID0gbmgtXFx1MDAzZWhvcF9saW1pdDtcXG4gNDAxOlxcdFxcdGtleS1cXHUwMDNlaXB2Ni5sYWJlbCA9ICooX19iZTMyICopbmggXFx1MDAyNiBodG9ubChJUFY2X0ZMT1dJTkZPX0ZMT1dMQUJFTCk7XFxuIDQwMjpcXHRcXHRrZXktXFx1MDAzZWlwdjYuYWRkci5zcmMgPSBuaC1cXHUwMDNlc2FkZHI7XFxuIDQwMzpcXHRcXHRrZXktXFx1MDAzZWlwdjYuYWRkci5kc3QgPSBuaC1cXHUwMDNlZGFkZHI7XFxuIDQwNDpcXHRcXG4gNDA1OlxcdFxcdG5leHRoZHIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnBheWxvYWRfb2ZzLCAtMSwgXFx1MDAyNmZyYWdfb2ZmLCBcXHUwMDI2ZmxhZ3MpO1xcbiA0MDY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVA2X0ZIX0ZfRlJBRykge1xcbiA0MDc6XFx0XFx0XFx0aWYgKGZyYWdfb2ZmKSB7XFxuIDQwODpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWlwLmZyYWcgPSBPVlNfRlJBR19UWVBFX0xBVEVSO1xcbiA0MDk6XFx0XFx0XFx0XFx0a2V5LVxcdTAwM2VpcC5wcm90byA9IE5FWFRIRFJfRlJBR01FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjMyLjMzMDAwMzIyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjcwOTU4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGFwcGVhcnMgd2UncmUgcmVmaW5pbmcgdGhlIHdheSBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxvdy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb24gY2hlY2tpbmcgZm9yIGhlYWRlciB0eXBlcy5cblxuSSBjYW4gc2VlIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmVwbGFjaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCB3aXRoIGBPRlBJRUgxMl9GUkFHYCBpbiB0aGUgYml0bWFzayB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHNlcXVlbmNlIGlzIHZhbGlkIGFuZCB1bnNlcXVlbmNlZC4gVGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHNlZW1zIHRvIGJlIGFib3V0IGlkZW50aWZ5aW5nIFwidW5yZWNvZ25pemVkXCIgb3IgcG90ZW50aWFsbHkgbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXIgc2VxdWVuY2VzLiBUaGUgY29kZSBmbGFncyBhIHNlcmllcyBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gYGV4dF9oZHJzYCwgdGhlIG1haW4gdmFyaWFibGUgdXNlZCB0byBlbmNvZGUgd2hpY2ggaGVhZGVycyBhcmUgcHJlc2VudC5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGFkanVzdG1lbnQgaXMgbGlrZWx5IGEgYnVnIGZpeCBvciBpbXByb3ZlbWVudCBpbiBpZGVudGlmeWluZyB0aGUgdmFsaWQgaGVhZGVyIHR5cGVzLiBJdCdzIHBvc3NpYmxlIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgb3Zlcmx5IHJlc3RyaWN0aXZlIG9yIHBvdGVudGlhbGx5IGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIE9wZW5GbG93IHNwZWNpZmljYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgT0ZQSUVIMTJfRlJBR2AgbGlrZWx5IGNsYXJpZmllcyB0aGUgaW50ZW50aW9uIHRvIHRyZWF0IGZyYWdtZW50IGhlYWRlcnMgaW4gYSBzcGVjaWZpYyB3YXkgd2l0aGluIHRoaXMgZmxvdyBwcm9jZXNzaW5nIGNvbnRleHQuIFRoZSBsb2dpYyBmb3IgYE9GUElFSDEyX1VOUkVQYCBhbmQgYE9GUElFSDEyX1VOU0VRYCBzZWVtIHRvIGJlIGltcG9ydGFudCB0byBob3cgT1ZTIGhhbmRsZXMgZnJhZ21lbnRlZCB0cmFmZmljIGFuZCBtYWxmb3JtZWQgcGFja2V0cy5cblxuQmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSdsbCBkZWZpbml0ZWx5IHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9ucyBvZiBgT0ZQSUVIMTJfKmAgY29uc3RhbnRzIGFuZCBgSVBQUk9UT19GUkFHTUVOVGAgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBpcyBzZW1hbnRpY2FsbHkgc291bmQgYW5kIGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBJUHY2IGZyYWdtZW50IGhhbmRsaW5nIGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGVkZ2UgY2FzZXMgb3IgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozNi42MDA5NjUxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODc0MDE5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0ZQSUVIMTJfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjM3PXN0YXRpYyBib29sIGljbXBoZHJfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTA6ICogT0ZQSUVIMTJfVU5SRVAgaXMgc2V0IGlmIG1vcmUgdGhhbiBvbmUgb2YgYSBnaXZlbiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1MS0gKiBpcyB1bmV4cGVjdGVkbHkgZW5jb3VudGVyZWQuIChUd28gZGVzdGluYXRpb24gb3B0aW9ucyBoZWFkZXJzIG1heSBiZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTMtICpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1NDogKiBPRlBJRUgxMl9VTlNFUSBpcyBzZXQgaWYgSVB2NiBleHRlbnNpb24gaGVhZGVycyB3ZXJlIG5vdCBpbiB0aGUgb3JkZXJcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yNjk9c3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODItXFx0XFx0Y2FzZSBJUFBST1RPX05PTkU6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyODM6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4NC1cXHRcXHRcXHQvKiBzdG9wIHBhcnNpbmcgKi9cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjg3LVxcdFxcdGNhc2UgSVBQUk9UT19FU1A6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyODg6XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0VTUClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTA6XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkxOlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkyOlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTMtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5NS1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVxcdFxcdGNhc2UgSVBQUk9UT19BSDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfQVVUSClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMTpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDItXFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlxcdFxcdFxcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNDpcXHRcXHRcXHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwNS1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwODpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwOS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzEzLVxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE0OlxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX1VOUkVQKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTctXFx0XFx0XFx0fSBlbHNlIGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDEpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjZcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMDpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMTpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9VTlJFUCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMzpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjQtXFx0XFx0XFx0XFx0fVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI1LVxcdFxcdFxcdH0gZWxzZSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI3LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVxcdFxcdGNhc2UgSVBQUk9UT19GUkFHTUVOVDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfRlJBRylcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMzpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzQ6XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfREVTVCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzM5OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0MC1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDE6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0ZSQUc7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0NC1cXHRcXHRjYXNlIElQUFJPVE9fUk9VVElORzpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NTpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0ODpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0OTpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTAtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzUxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTM6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1JPVVRFUjtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1NC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzU2LVxcdFxcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzU3OlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9IT1ApXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzU5OlxcdFxcdFxcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2Nlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVxcdFxcdFxcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3RcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYzLVxcdFxcdFxcdGlmICgqZXh0X2hkcnMgPT0gMClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfSE9QO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY1LVxcdFxcdFxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTM2PWVudW0gb2ZwMTJfaXB2NmV4dGhkcl9mbGFncyB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozNzpcXHRPRlBJRUgxMl9OT05FWFQgPSAxIFxcdTAwM2NcXHUwMDNjIDAsICAgLyogXFxcIk5vIG5leHQgaGVhZGVyXFxcIiBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM4OlxcdE9GUElFSDEyX0VTUCAgICA9IDEgXFx1MDAzY1xcdTAwM2MgMSwgICAvKiBFbmNyeXB0ZWQgU2VjIFBheWxvYWQgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcXHRPRlBJRUgxMl9BVVRIICAgPSAxIFxcdTAwM2NcXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MDpcXHRPRlBJRUgxMl9ERVNUICAgPSAxIFxcdTAwM2NcXHUwMDNjIDMsICAgLyogMSBvciAyIGRlc3QgaGVhZGVycyBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDE6XFx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcXHUwMDNjXFx1MDAzYyA0LCAgIC8qIEZyYWdtZW50IGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XFx0T0ZQSUVIMTJfUk9VVEVSID0gMSBcXHUwMDNjXFx1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQzOlxcdE9GUElFSDEyX0hPUCAgICA9IDEgXFx1MDAzY1xcdTAwM2MgNiwgICAvKiBIb3AtYnktaG9wIGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDQ6XFx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcXHUwMDNjXFx1MDAzYyA3LCAgIC8qIFVuZXhwZWN0ZWQgcmVwZWF0cyBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1OlxcdE9GUElFSDEyX1VOU0VRICA9IDEgXFx1MDAzY1xcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC00Ni19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozOC44ODgzNzE5NDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgyNDYzMTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgQnVnIEZpeCBpbiBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGEgdHlwbyBmaXghXCIgIFRoZSBhdXRob3Igd2FzIHVzaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCAod2hpY2gsIGxldCdzIHNlZSwgaXMgYDQ0YCwgcmVwcmVzZW50aW5nIGEgY29tYmluYXRpb24gb2YgYml0cyBpbiBhIGJpdG1hc2spIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgT0ZQSUVIMTJfRlJBR2AgKHdoaWNoIGlzIGAxIFx1MDAzY1x1MDAzYyA0YCwgb3IgYDE2YCkuIFRoZSBjb2RlJ3MgaW4gYGdldF9pcHY2X2V4dF9oZHJzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fRVNQYCBhbmQgYElQUFJPVE9fQUhgIGNhc2VzLiBJdCdzIGEgYml0bWFzayBjYWxjdWxhdGlvbiwgYW5kIHRoZXkncmUgdXNpbmcgYSBwcm90b2NvbCBudW1iZXIgaW5zdGVhZCBvZiBhIGZsYWcuIENsYXNzaWMgZXJyb3IuXG5cbk5vdywgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiAgSXMgdGhpcyBqdXN0IGEgbG9naWMgZXJyb3IsIG9yIGRvZXMgaXQgaGF2ZSBkZWVwZXIgaW1wbGljYXRpb25zPyBJcyB0aGVyZSBhIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBvZiB0aGlzIHR5cG8/IEkgbmVlZCB0byBydWxlIHRoYXQgb3V0IGltbWVkaWF0ZWx5LiBJJ20gdGhpbmtpbmcgYWJvdXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBhbmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikuIFdoYXQgdHJpZ2dlcnMgdGhlc2U/XG5cbiogICBJIGNoZWNrOiBEb2VzIHRoZSBwYXRjaCBhbHRlciBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHM/IE5vcGUuIE5vdCByZWxldmFudCBoZXJlLlxuKiAgIERvZXMgaXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgKmV4dF9oZHJzYCBpcyBpbml0aWFsaXplZCB0byBgMGAgYmVmb3JlaGFuZC4gIExpbmUgMjc2LiBHb29kLlxuKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ/IE5vcGUsIGRvZXNuJ3QgYXBwZWFyIHNvLlxuKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcy9sZW5ndGhzIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBiaXR3aXNlIGZsYWcgbWFuaXB1bGF0aW9uIGZvciBtYXRjaGluZyBPcGVuRmxvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHJlbGF0ZWQgdG8gdGhlIHNlcXVlbmNpbmcgZmxhZyAoYE9GUElFSDEyX1VOU0VRYCkuIFNvLCB0aGlzIGlzIGEgY2xlYW4sIHNpbXBsZSBidWcgZml4LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYWJzb2x1dGVseSBmYWxzZS4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjb3JyZWN0aW9uLlxuXG5Pa2F5LCBJJ3ZlIGNvbmZpcm1lZCBteSBhbmFseXNpcy4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHByb3ZpZGluZyBhIGNsZWFyIGFuZCBjb25jaXNlIGV4cGxhbmF0aW9uIGZvciB0aGUgbWFpbnRhaW5lcnMsIHNvIHRoZXkgY2FuIGFkZHJlc3MgdGhpcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODo0My43MTMwMDc4MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxcblxcbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cG8gaW4gT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSwgd2hlcmUgdGhlIHByb3RvY29sIG51bWJlciBgSVBQUk9UT19GUkFHTUVOVGAgd2FzIG1pc3Rha2VubHkgdXNlZCBpbiBiaXRtYXNrIGNoZWNrcyBpbnN0ZWFkIG9mIHRoZSBiaXRmbGFnIGBPRlBJRUgxMl9GUkFHYC5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 18:14:10 +0000 UTC FinishedAt: 2026-09-08 18:38:44 +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": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e0554c6276da957b6e72849520c70a97404cd1ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH", "IPV6" ], "series_id": "00c1dbb2-aad6-47c8-ad80-50869f01b0b2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "get_ipv6_ext_hdrs", "parse_ipv6hdr", "ovs_flow_key_extract", "ovs_flow_key_extract_userspace" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZXRfaXB2Nl9leHRfaGRycyYjMzQ7LAogICAgJiMzNDtwYXJzZV9pcHY2aGRyJiMzNDssCiAgICAmIzM0O292c19mbG93X2tleV9leHRyYWN0JiMzNDssCiAgICAmIzM0O292c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuaW5kZXggNDZjMWQ2NmFhZDhjMy4uODY4ZDlmZGYzYWZkZiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbkBAIC0yODgsNyAmIzQzOzI4OCw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbiBcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XG4tXHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IElQUFJPVE9fRlJBR01FTlQgfFxuJiM0MztcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gXHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5AQCAtMzAxLDcgJiM0MzszMDEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gXHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuLVx0XHRcdCAgICAgICBJUFBST1RPX0ZSQUdNRU5UIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuJiM0MztcdFx0XHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcbiBcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiBcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgICAmIzM0O3BhcnNlX2lwdjZoZHImIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3QmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCmluZGV4IDQ2YzFkNjZhYWQ4YzMuLjg2OGQ5ZmRmM2FmZGYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwpAQCAtMjg4LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsCiAJCQlpZiAoKmV4dF9oZHJzICZhbXA7IE9GUElFSDEyX0VTUCkKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7CiAJCQlpZiAoKCpleHRfaGRycyAmYW1wOyB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfAotCQkJCQkgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHwKJiM0MzsJCQkJCSAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfAogCQkJCQkgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fAogCQkJICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgJmd0Oz0gMikgewogCQkJCSpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTsKQEAgLTMwMSw3ICYjNDM7MzAxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLAogCQkJCSpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDsKIAkJCWlmICgoKmV4dF9oZHJzICZhbXA7CiAJCQkgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8Ci0JCQkgICAgICAgSVBQUk9UT19GUkFHTUVOVCB8IE9GUElFSDEyX1VOUkVQKSkgfHwKJiM0MzsJCQkgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHwKIAkJCSAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ICZndDs9IDIpIHsKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7CiAJCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjYKCQkJCQkJCW91dHB1dDogNjcKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgT3BlbiB2U3dpdGNoIEZsb3cgQ29kZSoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggSSYjMzk7bSB3b3JraW5nIG9uIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBUaW1lIHRvIGRpZyBpbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBpbnNwZWN0aW9uIG9mIHRoZSBkaWZmLCBwaW5wb2ludGluZyBpdHMgcHJlY2lzZSBsb2NhdGlvbiBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBnZXQgYSBncmlwIG9uIHRoZSBjaGFuZ2VzIGFyb3VuZCBsaW5lIDI4OC4gSSBhbHdheXMgZmluZCBhIHNvbGlkIGNvbnRleHQgY2hlY2sgaXMgY3J1Y2lhbC4KCkFscmlnaHQsIEkmIzM5O2xsIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGZyZXNoIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgYnkgb25seSBsb29raW5nIGF0IHRoZSBwYXRjaC4gQW5kLCBhcyBhIG1hdHRlciBvZiBkdWUgZGlsaWdlbmNlLCBpdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIHRoZSBLY29uZmlnIHJlcXVpcmVtZW50cyBmb3IgT3BlbiB2U3dpdGNoLiBUaGlzIHdpbGwgaG9wZWZ1bGx5IGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGNoYW5nZXMuIEdvdHRhIGVuc3VyZSBjb21wYXRpYmlsaXR5IGF0IGFsbCBsZXZlbHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0XHQgICAgICB1MTYgKmV4dF9oZHJzKVxuIDI3MTpcdHtcbiAyNzI6XHRcdHU4IG5leHRfdHlwZSA9IG5oLVx1MDAzZW5leHRoZHI7XG4gMjczOlx0XHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIDI3NDpcdFx0aW50IGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPSAwO1xuIDI3NTpcdFxuIDI3NjpcdFx0KmV4dF9oZHJzID0gMDtcbiAyNzc6XHRcbiAyNzg6XHRcdHdoaWxlIChpcHY2X2V4dF9oZHIobmV4dF90eXBlKSkge1xuIDI3OTpcdFx0XHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDtcbiAyODA6XHRcbiAyODE6XHRcdFx0c3dpdGNoIChuZXh0X3R5cGUpIHtcbiAyODI6XHRcdFx0Y2FzZSBJUFBST1RPX05PTkU6XG4gMjgzOlx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcbiAyODQ6XHRcdFx0XHQvKiBzdG9wIHBhcnNpbmcgKi9cbiAyODU6XHRcdFx0XHRyZXR1cm47XG4gMjg2Olx0XG4gMjg3Olx0XHRcdGNhc2UgSVBQUk9UT19FU1A6XG4gMjg4Olx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfRVNQKVxuIDI4OTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDI5MDpcdFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuIDI5MTpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbiAyOTI6XHRcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcbiAyOTM6XHRcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiAyOTQ6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiAyOTU6XHRcdFx0XHR9XG4gMjk2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbiAyOTc6XHRcdFx0XHRicmVhaztcbiAyOTg6XHRcbiAyOTk6XHRcdFx0Y2FzZSBJUFBST1RPX0FIOlxuIDMwMDpcdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2IE9GUElFSDEyX0FVVEgpXG4gMzAxOlx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMzAyOlx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gMzAzOlx0XHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuIDMwNDpcdFx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIDMwNTpcdFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIDMwNjpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDMwNzpcdFx0XHRcdH1cbiAzMDg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcbiAzMDk6XHRcdFx0XHRicmVhaztcbiAzMTA6XHRcbiAzMTE6XHRcdFx0Y2FzZSBJUFBST1RPX0RTVE9QVFM6XG4gMzEyOlx0XHRcdFx0aWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMCkge1xuIDMxMzpcdFx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjZcbiAzMTQ6XHRcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX1VOUkVQKSlcbiAzMTU6XHRcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDMxNjpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XG4gMzE3Olx0XHRcdFx0fSBlbHNlIGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDEpIHtcbiAzMTg6XHRcdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG4gMzE5Olx0XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjayBvZiBgZ2V0X2lwdjZfZXh0X2hkcnNgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBgZ2V0X2lwdjZfZXh0X2hkcnNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBtYXAgb3V0IGl0cyBjYWxsIGdyYXBoIOKAkyB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGludm9rZWQgZnJvbSwgYW5kIHdoYXQgZnVuY3Rpb25zIGxlYWQgdG8gKnRob3NlKiBjYWxscz8gVGhlIGFpbSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgbGVhZiBmdW5jdGlvbiwgY2FsbGVkIG9ubHkgZnJvbSBhIGNvdXBsZSBvZiBwbGFjZXMsIG9yIGlzIGl0IGEgY3J1Y2lhbCBsaW5rIGRlZXBlciBpbiBzb21lIHNvcnQgb2YgSVB2NiBoZWFkZXIgcHJvY2Vzc2luZyBjaGFpbj8gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGljdGF0ZSBob3cgZGVlcGx5IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBzdGFjayBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjM3PXN0YXRpYyBib29sIGljbXBoZHJfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI0My0vKipcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjQ0OiAqIGdldF9pcHY2X2V4dF9oZHJzKCkgLSBQYXJzZXMgcGFja2V0IGFuZCBzZXRzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy5cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ1LSAqXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNjgtICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI2OTpzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI3MC1cdFx0XHQgICAgICB1MTYgKmV4dF9oZHJzKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MzgxPXN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM5NS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mzk2Olx0Z2V0X2lwdjZfZXh0X2hkcnMoc2tiLCBuaCwgXHUwMDI2a2V5LVx1MDAzZWlwdjYuZXh0aGRycyk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM5Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTQ3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUGVlcmluZyBpbnRvIEZsb3cuYyYjMzk7cyBJUHY2IEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBJUHY2IGhlYWRlcnMgYXJlIHByb2Nlc3NlZCB3aXRoaW4gdGhlIE9wZW4gdlN3aXRjaCBmbG93IGVuZ2luZS4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb25zIGFuZCB1c2FnZSBvZiBhIGZldyBrZXkgZnVuY3Rpb25zIGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0OiBgcGFyc2VfaXB2NmhkcmAsIGBrZXlfZXh0cmFjdGAsIGFuZCB3aGF0ZXZlciBlbHNlIGlzIHJlbGV2YW50LiBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXkmIzM5O3JlIGRlZmluZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXkmIzM5O3JlICpjYWxsZWQqLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIG1hZ2ljIGhhcHBlbnMsIHdoZXJlIHRoZSBkYXRhIGV4dHJhY3Rpb24gYW5kIHBhcnNpbmcgYXJlIGFjdHVhbGx5IHBsdWdnZWQgaW50byB0aGUgZmxvdyBwcm9jZXNzaW5nIHBpcGVsaW5lLiBGaW5kaW5nIHRob3NlIGNhbGxzIHdpbGwgZ2l2ZSBtZSBjb250ZXh0LCBsZXQgbWUgc2VlIGhvdyBJUHY2IGhlYWRlciBpbmZvcm1hdGlvbiBpbmZsdWVuY2VzIGZsb3cgbWF0Y2hpbmcgYW5kIGFjdGlvbiBzZWxlY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3csIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgcGllY2VzIGlzIHdoYXQgSSYjMzk7bSBhZnRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV9pcHY2aGRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcdFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENhbGxlcnMgb2YgS2V5IEV4dHJhY3Rpb24gRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgdXNhZ2Ugb2YgdGhlc2Uga2V5IGV4dHJhY3Rpb24gZnVuY3Rpb25zOiBga2V5X2V4dHJhY3RfbDNsNGAsIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAsIGFuZCBhbnkgb3RoZXJzIGluIHRoYXQgdmVpbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGhlcmUsIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBwcmVjaXNlIGlkZW50aWZpY2F0aW9uIG9mIG5ldHdvcmsgZmxvdyBrZXlzLCBwYXJ0aWN1bGFybHkgdGhvc2Ugd2hpY2ggZXh0cmFjdCB0aGUgbGF5ZXIgMyBhbmQgNCBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgbWF0Y2hpbmcgZmxvdyBlbnRyaWVzLiBVbmRlcnN0YW5kaW5nIHRoZWlyIGNhbGwgZ3JhcGhzIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcy4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGNvZGUgYXJlICpyZWx5aW5nKiBvbiB0aGVzZSBzcGVjaWZpYyBrZXkgZXh0cmFjdGlvbnMuIFdoYXQgYXJlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGlzIHVzZWQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgKipGbG93IFRhYmxlIExvb2t1cHMqKjogT2J2aW91c2x5LCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2V5IGlzIGNhbGN1bGF0ZWQgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1hdGNoaW5nIGxvZ2ljLiBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZXh0cmFjdGVkIGtleSBjb21wb25lbnRzIGFyZSBmZWQgaW50byB0aGUgZmxvdyB0YWJsZSBsb29rdXAgcHJvY2VzcywgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb25zIGJlaW5nIHBlcmZvcm1lZCBvbiB0aGUgZXh0cmFjdGVkIGtleSB0byBlbnN1cmUgZmFzdGVyIGxvb2t1cHMuCiogICAqKkZsb3cgQ3JlYXRpb24vSW5zZXJ0aW9uKio6IFdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIHdoZW4gbmV3IGZsb3dzIGFyZSBiZWluZyBjcmVhdGVkPyBUaGlzIGlzIGtleSBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UmIzM5O3JlIGJ1aWxkaW5nIHRoZSBmbG93IHRhYmxlIGVudHJpZXMuIEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGR1cmluZyBmbG93IGNyZWF0aW9uPwoqICAgKipGbG93IE1vZGlmaWNhdGlvbi9VcGRhdGVzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgYWxzbyBpbnZvbHZlZCB3aGVuIG1vZGlmeWluZyBleGlzdGluZyBmbG93cz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBrZXkgY29tcG9uZW50cyBjaGFuZ2U/CiogICAqKkVycm9yIEhhbmRsaW5nL0RpYWdub3N0aWNzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBmb3IgYW55IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgb3IgbG9nZ2luZyByZWxhdGVkIHRvIGZsb3cga2V5IG1pc21hdGNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcj8KKiAgICoqUGFja2V0IFByb2Nlc3NpbmcgUGF0aHMqKjogQXJlIHRoZXNlIGZ1bmN0aW9ucyBjYWxsZWQgaW4gdGhlIGZhc3QgcGF0aCBvciBvbmx5IGluIHRoZSBzbG93IHBhdGg/IEhvdyBtdWNoIG9mIGFuIGltcGFjdCBkbyB0aGV5IGhhdmUgb24gb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBsYXRlbmN5PwoKTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZW50aXJlIGtleSBleHRyYWN0aW9uIGFuZCBmbG93IG1hbmFnZW1lbnQgcGlwZWxpbmUuIEl0IHdpbGwgYWxsb3cgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBib3R0bGVuZWNrcyBhbmQgcG9zc2libGUgb3B0aW1pc2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgdml0YWwgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIGtleSBleHRyYWN0aW9uIGxvZ2ljLCBhbmQgdG8gYWxzbyB1bmRlcnN0YW5kIHdoZXJlIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2V5X2V4dHJhY3RfbDNsNHxvdnNfZmxvd19rZXlfZXh0cmFjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zNjc9c3RhdGljIGludCBxdWV1ZV9nc29fcGFja2V0cyhzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4NC1cdGlmIChnc29fdHlwZSBcdTAwMjYgU0tCX0dTT19VRFApIHtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM4NTpcdFx0LyogVGhlIGluaXRpYWwgZmxvdyBrZXkgZXh0cmFjdGVkIGJ5IG92c19mbG93X2tleV9leHRyYWN0KClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4Ni1cdFx0ICogaW4gdGhpcyBjYXNlIGlzIGZvciBhIGZpcnN0IGZyYWdtZW50LCBzbyB3ZSBuZWVkIHRvXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NjE0PXN0YXRpYyBpbnQgb3ZzX3BhY2tldF9jbWRfZXhlY3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTY2OS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjY3MDpcdGVyciA9IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShuZXQsIGFbT1ZTX1BBQ0tFVF9BVFRSX0tFWV0sXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy02NzEtXHRcdFx0XHRcdCAgICAgcGFja2V0LCBcdTAwMjZmbG93LVx1MDAzZWtleSwgbG9nKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYyNT1zdGF0aWMgaW50IHBhcnNlX25zaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3MS0vKipcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NjcyOiAqIGtleV9leHRyYWN0X2wzbDQgLSBleHRyYWN0cyBMMy9MNCBoZWFkZXIgaW5mb3JtYXRpb24uXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3My0gKiBAc2tiOiBza19idWZmIHRoYXQgY29udGFpbnMgdGhlIGZyYW1lLCB3aXRoIHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIHRoZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNjc4LSAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo2Nzk6c3RhdGljIGludCBrZXlfZXh0cmFjdF9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02ODAte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9OTA5PXN0YXRpYyBpbnQga2V5X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NjMtXHQvKiBGaWxsIG91dCBMMy9MNCBrZXkgaW5mbywgaWYgYW55ICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjk2NDpcdHJldHVybiBrZXlfZXh0cmFjdF9sM2w0KHNrYiwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTY1LX1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTk3MD1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NzEte1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo5NzI6XHRyZXR1cm4ga2V5X2V4dHJhY3RfbDNsNChza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk3My19XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05ODY9c3RhdGljIGludCBrZXlfZXh0cmFjdF9tYWNfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk5OS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MTAwMDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTAwMS1cdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc0LVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoxMDc1OmludCBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc2LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4OT1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6MjkwOmludCBvdnNfZmxvd19rZXlfZXh0cmFjdChjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvLFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yOTEtXHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC0yOTMtLyogRXh0cmFjdCBrZXkgZnJvbSBwYWNrZXQgY29taW5nIGZyb20gdXNlcnNwYWNlLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDoyOTQ6aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5NS1cdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9vcGVudnN3aXRjaC92cG9ydC5jLTQ0Mi1cdC8qIEV4dHJhY3QgZmxvdyBmcm9tICYjMzk7c2tiJiMzOTsgaW50byAmIzM5O2tleSYjMzk7LiAqL1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDQzOlx0ZXJyb3IgPSBvdnNfZmxvd19rZXlfZXh0cmFjdCh0dW5faW5mbywgc2tiLCBcdTAwMjZrZXkpO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ0LVx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2Ugd2l0aGluIGBnZXRfaXB2Nl9leHRfaGRyc2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggRVNQIGFuZCBBSCBwcm90b2NvbHMuIEkgc2VlIGEgZGlyZWN0IHN3YXAtb3V0OiB0aGUgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYE9GUElFSDEyX0ZSQUdgIGluIHRoZSBiaXRtYXNrIGNoZWNrcy4KClJpZ2h0IGF3YXksIEkgcmVjb2duaXplIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBidWcgZml4LiBVc2luZyBgSVBQUk9UT19GUkFHTUVOVGAgKGFuIElQIHByb3RvY29sIG51bWJlcikgaW4gYSBiaXRtYXNrIG9wZXJhdGlvbiBmb3IgdGhlIE9wZW5GbG93IGV4dGVuc2lvbiBoZWFkZXJzIGlzIGEgZGVmaW5pdGUgbWlzc3RlcC4gSXQgc2VlbXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3YXMgaW5jb3JyZWN0bHkgY2hlY2tpbmcgYWdhaW5zdCB0aGUgcHJvdG9jb2wgKnR5cGUqIG9mIGEgZnJhZ21lbnRlZCBwYWNrZXQgKHdoaWNoIHdvdWxkbiYjMzk7dCBiZSBwcmVzZW50IGF0IHRoaXMgbGF5ZXIpLCByYXRoZXIgdGhhbiB0ZXN0aW5nIHdoZXRoZXIgdGhlIGZyYWdtZW50YXRpb24gKmhlYWRlciBmbGFnKiB3YXMgcHJlc2VudCBpbiB0aGUgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy4gVGhlIGludGVudCBoZXJlIGlzIHRvIGRldGVybWluZSB0aGUgc2VxdWVuY2UgYW5kIHJlLW9yZGVyaW5nIHByb3BlcnRpZXMgd2hlbiBjZXJ0YWluIGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBwcmVzZW50LgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIG15IHN1c3BpY2lvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mIGBPRlBJRUgxMl9GUkFHYCBhbmQgdGhlIHJlbGF0ZWQgT3BlbkZsb3cgMS4yIGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIGluIGBpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaGAgb3Igc29tZXdoZXJlIHNpbWlsYXIgdG8gdmVyaWZ5IHRoZSBmbGFnIGJpdCBhc3NpZ25tZW50LiBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgYE9GUElFSDEyX0ZSQUdgIGlzIGEgYml0IGZsYWcgd2l0aGluIHRoZSBPRlBJRUgxMiBiaXRmaWVsZC4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIGxvZ2ljIGVycm9yIHdoZXJlIHRoZSBwcmVzZW5jZSBvZiB0aGUgZnJhZ21lbnRhdGlvbiBoZWFkZXIgd2FzbiYjMzk7dCBiZWluZyBjb3JyZWN0bHkgaWRlbnRpZmllZCwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgY2xhc3NpZmljYXRpb24gb3IgcHJvY2Vzc2luZyBvZiBmcmFnbWVudGVkIHBhY2tldHMgd2l0aGluIHRoZSBPcGVuRmxvdyBjb250ZXh0LiBJdCYjMzk7cyBhIGNsZWFyIGFuZCBpbXBvcnRhbnQgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhlIHJpZ2h0IGJlaGF2aW9yIGZvciBFU1AgYW5kIEFIIHBhY2tldHMgd2l0aCBmcmFnbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPRlBJRUgxMl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTEtICogaXMgdW5leHBlY3RlZGx5IGVuY291bnRlcmVkLiAoVHdvIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBtYXkgYmVcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTQ6ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cdFx0Y2FzZSBJUFBST1RPX05PTkU6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODQtXHRcdFx0Lyogc3RvcCBwYXJzaW5nICovXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXHRcdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkwOlx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTUtXHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVx0XHRjYXNlIElQUFJPVE9fQUg6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlx0XHRcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0Olx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDUtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4Olx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE3LVx0XHRcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjA6XHRcdFx0XHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX0VTUCB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjM6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI0LVx0XHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXHRcdFx0fSBlbHNlIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzI2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXHRcdFx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVx0XHRjYXNlIElQUFJPVE9fRlJBR01FTlQ6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzOTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQxOlx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDQtXHRcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDU6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDg6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDk6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUwLVx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cdFx0XHR9XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXHRcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1OTpcdFx0XHQvKiBPRlBJRUgxMl9IT1AgaXMgc2V0IHRvIDEgaWYgYSBob3AtYnktaG9wIElQdjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3Rcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2My1cdFx0XHRpZiAoKmV4dF9oZHJzID09IDApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2NS1cdFx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzc6XHRPRlBJRUgxMl9OT05FWFQgPSAxIFx1MDAzY1x1MDAzYyAwLCAgIC8qIFwmIzM0O05vIG5leHQgaGVhZGVyXCYjMzQ7IGVuY291bnRlcmVkLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozODpcdE9GUElFSDEyX0VTUCAgICA9IDEgXHUwMDNjXHUwMDNjIDEsICAgLyogRW5jcnlwdGVkIFNlYyBQYXlsb2FkIGhlYWRlciBwcmVzZW50LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcdE9GUElFSDEyX0FVVEggICA9IDEgXHUwMDNjXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlx0T0ZQSUVIMTJfREVTVCAgID0gMSBcdTAwM2NcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQxOlx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcdTAwM2NcdTAwM2MgNCwgICAvKiBGcmFnbWVudCBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XHRPRlBJRUgxMl9ST1VURVIgPSAxIFx1MDAzY1x1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XHRPRlBJRUgxMl9IT1AgICAgPSAxIFx1MDAzY1x1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ0Olx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcdTAwM2NcdTAwM2MgNywgICAvKiBVbmV4cGVjdGVkIHJlcGVhdHMgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1Olx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcdTAwM2NcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGFuIE9wZW4gdlN3aXRjaCBCdWcgYW5kIEZ1enppbmcgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCBhaGEhIEkmIzM5O3ZlIHNwb3R0ZWQgc29tZXRoaW5nLiBJdCBzZWVtcyB0aGF0IHRoZSBjaGVjayBoZXJlLCBgSVBQUk9UT19GUkFHTUVOVGAsIHdoaWNoIGlzIDQ0IChvciAweDJDLCBtZWFuaW5nIEFVVEgsIERFU1QsIGFuZCBST1VURVIgYml0cyBzZXQpLCBpcyBiZWluZyB1c2VkIGluc3RlYWQgb2YgYE9GUElFSDEyX0ZSQUdgLCB3aGljaCBpcyBzaW1wbHkgMTYuIFRoYXQmIzM5O3MgYSBjbGVhciBidWcgaW4gYGdldF9pcHY2X2V4dF9oZHJzKClgISBUaGUgd3JvbmcgY29uc3RhbnQgaXMgYmVpbmcgdXNlZCwgc28gdGhpcyBuZWVkcyB0byBiZSBmaXhlZC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IE9wZW4gdlN3aXRjaCBpcyBhIHZpcnR1YWwgZGF0YXBhdGgsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2hgLCBhbmQgaXQmIzM5O3MgZnVsbHkgc3VwcG9ydGVkLiBJIGNhbiBpbnRlcmFjdCB3aXRoIGl0IHZpYSBOZXRsaW5rLiBTeXprYWxsZXIsIHdoaWNoIEkga25vdyB2ZXJ5IHdlbGwsIGFjdGl2ZWx5IGZ1enpleiBPVlMgdXNpbmcgTmV0bGluayBjb21tYW5kcyBsaWtlIGBvdnNfcGFja2V0X2NtZF9leGVjdXRlYCBhbmQgYG92c19mbG93X2NtZF9uZXdgLiBHaXZlbiB0aGlzLCBpdCYjMzk7cyBhYnNvbHV0ZWx5IHJlYWNoYWJsZS4gVGhlcmUgYXJlIG5vIHF1ZXN0aW9ucy4gSXQmIzM5O3MgZnVsbHkgcmVhY2hhYmxlLgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgZmlsZXMuIEkgc2hvdWxkIGNoZWNrIGBLY29uZmlnYCBmb3IgT1BFTlZTV0lUQ0guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY29uZmlndXJlZCwgYW5kIHdoYXQmIzM5O3MgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgSVB2NiBEZXBlbmRlbmN5IGluIE9wZW4gdlN3aXRjaCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIElQdjYgYW5kIElORVQgZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGNvbnRleHQgb2YgT3BlbiB2U3dpdGNoLiBJIGtub3cgT1ZTIGlzIGxpbmtlZCB0byBJTkVULCBhbmQgdGhhdCBPVlMgaXRzZWxmIGlzIGNvbXBpbGVkIHdpdGggaXRzIG93biBtb2R1bGVzLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgSVB2NiBzdXBwb3J0IHdpdGhpbiBPVlMgaXMgY29uZGl0aW9uYWwsIHRoYXQgaXMsIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmxhZy4gSSYjMzk7bSBiZXR0aW5nIHRoYXQgYENPTkZJR19JUFY2YCBpcyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVG8gY29uZmlybSB0aGlzIGFuZCB0byBhY3R1YWxseSAqc2VlKiBob3cgSVB2NiBzdXBwb3J0IGlzIGhhbmRsZWQsIEkmIzM5O2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGluc3RhbmNlcyBvZiBgQ09ORklHX0lQVjZgIG9yIGV2ZW4ganVzdCBwbGFpbiBgSVBWNmAgd2hpY2ggd2lsbCBnaXZlIG1lIHRoZSBjbHVlIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIGVtcGxveWVkIHdpdGhpbiBPVlMgcmVnYXJkaW5nIElQdjYuIFRoaXMgc2hvdWxkIHF1aWNrbHkgY2xhcmlmeSB0aGUgZGVwZW5kZW5jeSBhbmQgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0lQVjZ8SVNfRU5BQkxFRFxcKENPTkZJR19JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYz0xNDQ2PXN0YXRpYyBib29sIG92c19jdF9uYXRfdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nvbm50cmFja19pbmZvICppbmZvLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNDc0LVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE0NzU6XHRcdH0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgXHUwMDI2XHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTQ3Ni1cdFx0XHQgICBpbmZvLVx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgSVB2NiBGbG93IEhhbmRsaW5nKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgd2hlbiBJJiMzOTttIHRyYWNraW5nIGRvd24gdGhlIElQdjYtcmVsYXRlZCBzdHVmZiBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIGFsd2F5cyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AuIFRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBmbG93IHRhYmxlIGltcGxlbWVudGF0aW9uLCBzbyBpdCYjMzk7cyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCB0byBmaWd1cmUgb3V0IGhvdyBJUHY2IHBhY2tldHMgYXJlIGJlaW5nIGNsYXNzaWZpZWQgYW5kIG1hdGNoZWQuIEkgd2FudCB0byBzZWUgZXhhY3RseSAqaG93KiB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aG9zZSBJUHY2IGFkZHJlc3NlcywgdGhlIGZsb3cga2V5cywgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbiBwbGFjZSBmb3IgSVB2NiB0cmFmZmljLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgbWF5YmUgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBwYWNrZXQgaGVhZGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBJUHY2IGZsb3cgcHJvY2Vzc2luZyBpcyBsaWtlbHkgbG9jYXRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgYXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QsIEkgaG9wZSB0byBmaW5kIHNvbWUgaW50ZXJlc3RpbmcgdHJpY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV9pcHY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcdFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgSVBWNmAgY29uZmlndXJhdGlvbiBmbGFnLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBpZiBib3RoIGBDT05GSUdfSVBWNmAgYW5kIGBDT05GSUdfT1BFTlZTV0lUQ0hgIGFyZSBlbmFibGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX0lQVjZgIGlzLCBpbiBmYWN0LCBhIGZ1bmRhbWVudGFsIHJlcXVpcmVtZW50IGZvciBhbnkgSVB2NiBwcm9jZXNzaW5nIHdpdGhpbiB0aGlzIHNldHVwLiBJbiB0aGUgTGludXgga2VybmVsLCBlbmFibGluZyBgSVBWNmAgaXMgcHJldHR5IHN0YW5kYXJkIHByYWN0aWNlLCBzbyBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGRlcGVuZGVuY3kgaGVyZS4KCkxvb2tpbmcgYXQgYGZsb3cuY2AsIHRoZSB0cmlnZ2VyIHNlZW1zIHRvIGJlIGBrZXktJmd0O2V0aC50eXBlID09IGh0b25zKEVUSF9QX0lQVjYpYCwgd2hpY2ggc3Vic2VxdWVudGx5IGNhbGxzIGBwYXJzZV9pcHY2aGRyYC4gU28sIGRvZXMgYE9QRU5WU1dJVENIYCByZWx5IGRpcmVjdGx5IG9uIGBJUFY2YCBvciBub3Q/IElzIHRoZXJlIGFueSBpbmRpcmVjdCBkZXBlbmRlbmN5PyBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGRldGVybWluZSBpZiBpdCYjMzk7cyBzdHJpY3RseSBuZWNlc3NhcnksIG9yIGlmIHRoZXJlJiMzOTtzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwgZXhhbWluZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgYXJvdW5kIGxpbmUgODE4LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gY2hlY2sgaG93IHRoZSBmbGFnIGlzIHVzZWQgd2l0aCByZXNwZWN0IHRvIE9wZW4gdlN3aXRjaC4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBhbnN3ZXIgdGhlcmUgYW5kIGNhbiBkZXRlcm1pbmUgdGhlIG5lY2Vzc2l0eSBvZiB0aGUgYElQVjZgIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTA6XHRcdFx0XHRsYWJlbF9jb3VudCYjNDM7JiM0Mzs7XG4gODExOlx0XHRcdH1cbiA4MTI6XHRcdFx0aWYgKGxhYmVsX2NvdW50IFx1MDAzZSBNUExTX0xBQkVMX0RFUFRIKVxuIDgxMzpcdFx0XHRcdGxhYmVsX2NvdW50ID0gTVBMU19MQUJFTF9ERVBUSDtcbiA4MTQ6XHRcbiA4MTU6XHRcdFx0a2V5LVx1MDAzZW1wbHMubnVtX2xhYmVsc19tYXNrID0gR0VOTUFTSyhsYWJlbF9jb3VudCAtIDEsIDApO1xuIDgxNjpcdFx0fSBlbHNlIGlmIChrZXktXHUwMDNlZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA4MTc6XHRcdFx0aW50IG5oX2xlbjsgICAgICAgICAgICAgLyogSVB2NiBIZWFkZXIgJiM0MzsgRXh0ZW5zaW9ucyAqL1xuIDgxODpcdFxuIDgxOTpcdFx0XHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcbiA4MjA6XHRcdFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcdTAwM2MgMCkpIHtcbiA4MjE6XHRcdFx0XHRzd2l0Y2ggKG5oX2xlbikge1xuIDgyMjpcdFx0XHRcdGNhc2UgLUVJTlZBTDpcbiA4MjM6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZrZXktXHUwMDNlaXAsIDAsIHNpemVvZihrZXktXHUwMDNlaXApKTtcbiA4MjQ6XHRcdFx0XHRcdG1lbXNldChcdTAwMjZrZXktXHUwMDNlaXB2Ni5hZGRyLCAwLCBzaXplb2Yoa2V5LVx1MDAzZWlwdjYuYWRkcikpO1xuIDgyNTpcdFx0XHRcdFx0ZmFsbHRocm91Z2g7XG4gODI2Olx0XHRcdFx0Y2FzZSAtRVBST1RPOlxuIDgyNzpcdFx0XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXHUwMDNlbmV0d29ya19oZWFkZXI7XG4gODI4Olx0XHRcdFx0XHRlcnJvciA9IDA7XG4gODI5Olx0XHRcdFx0XHRicmVhaztcbiA4MzA6XHRcdFx0XHRkZWZhdWx0OlxuIDgzMTpcdFx0XHRcdFx0ZXJyb3IgPSBuaF9sZW47XG4gODMyOlx0XHRcdFx0fVxuIDgzMzpcdFx0XHRcdHJldHVybiBlcnJvcjtcbiA4MzQ6XHRcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg0OAoJCQkJCQkJb3V0cHV0OiAxNjMKCQkJCQkJCXRob3VnaHRzOiA3NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgT3BlbiB2U3dpdGNoIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIHNwZWNpZmljYWxseSwgZm9jdXNpbmcgb24gaG93IElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBzeW1ib2xzIGZvciBmdXp6aW5nLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYHBhcnNlX2lwdjZoZHJgIGFuZCBgZ2V0X2lwdjZfZXh0X2hkcnNgIGluIGBmbG93LmNgIGFzIGNvcmUgdG8gdGhpcyBhcmVhLCBhbmQgdGhlbiBhbHNvIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAgYW5kIGBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VgIGFzIHRoZSBleHRlcm5hbCBlbnRyeSBwb2ludHMuIEkga25vdyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBgcGFyc2VfaXB2NmhkcmAgYXJlIHN0YXRpYyB3aXRoaW4gYGZsb3cuY2AsIGFuZCB0aGF0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IGltcGFjdHMgc3ltYm9sIHZpc2liaWxpdHkuCgpOb3csIG15IHVuZGVyc3RhbmRpbmcgb2YgYEZvY3VzU3ltYm9sc2AgZ3VpZGFuY2UgaXMga2V5IGhlcmUuIEJlY2F1c2UgYGdldF9pcHY2X2V4dF9oZHJzYCBhbmQgYHBhcnNlX2lwdjZoZHJgIGFyZW4mIzM5O3QgaW5saW5lZCBhbmQgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICpzaG91bGQqIGJlIHRhcmdldGFibGUuIEV2ZW4gaWYgdGhleSB3ZXJlIHN0YXRpYywgSSBrbm93IHRoYXQgaWYgdGhleSBhcmUgbm9uLWlubGluZWQgdGhlbiB0aGV5IHNob3VsZCBiZSB0YXJnZXRhYmxlLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGhlbHBlcnMgdG8gcHVibGljIGZhY2luZyBmdW5jdGlvbnMuIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYywgYW5kIGlkZW50aWZ5IGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVycy4gSSB0aGluayBJJiMzOTt2ZSBkb25lIHRoYXQuIEkgYWxzbyB0aGluayB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYG92c19mbG93X2tleV9leHRyYWN0YCBhbmQgYG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZWAgYXJlIGtleSBhcyB0aGUgcHVibGljIGVudHJ5cG9pbnRzLgoKSSYjMzk7bSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb246IGBPUEVOVlNXSVRDSGAgYW5kIGBJUFY2YCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHRoYXQmIzM5O3MgZ29vZC4KCkFzIGZvciAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LCB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgaW4gdGhlIGBnZXRfaXB2Nl9leHRfaGRyc2AgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIGFuZCBpcyByZWFjaGFibGUgdmlhIHZpcnR1YWwgbmV0d29ya2luZyBpbnRlcmZhY2VzIGFuZCBuZXRsaW5rIGNvbW1hbmRzLiBUaGF0JiMzOTtzIGEgc3Ryb25nIHBvc2l0aXZlIGluZGljYXRvci4KClNvLCBoZXJlJiMzOTtzIHRoZSBmaW5hbCByZXN1bHQ6CiogICAqKkNvbmZpZ3MqKjogXFsmIzM0O09QRU5WU1dJVENIJiMzNDssICYjMzQ7SVBWNiYjMzQ7XQoqICAgKipGb2N1c1N5bWJvbHMqKjogXFsmIzM0O2dldFxfaXB2NlxfZXh0XF9oZHJzJiMzNDssICYjMzQ7cGFyc2VcX2lwdjZoZHImIzM0OywgJiMzNDtvdnNcX2Zsb3dcX2tleVxfZXh0cmFjdCYjMzQ7LCAmIzM0O292c1xfZmxvd1xfa2V5XF9leHRyYWN0XF91c2Vyc3BhY2UmIzM0O10KKiAgICoqUmVhc29uaW5nKio6IFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gT3BlbiB2U3dpdGNoJiMzOTtzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSBieSBjaGFuZ2luZyBhbiBpbmNvcnJlY3QgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IHRvIGBPRlBJRUgxMl9GUkFHYCBiaXRtYXNrIGZsYWdzLiBUaGlzIGFyZWEgaXMgcmVhY2hhYmxlIHRocm91Z2ggT3BlbiB2U3dpdGNoIGZsb3cga2V5IGV4dHJhY3Rpb24gd2hlbiBwcm9jZXNzaW5nIElQdjYgcGFja2V0cy4gRnV6emluZyBpcyBqdXN0aWZpZWQgdG8gdGVzdCB0aGF0IGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MgYW5kIHNlcXVlbmNpbmcgY2hlY2tzIGhhbmRsZSBhbGwgcG9zc2libGUgSVB2NiBwYWNrZXQgaGVhZGVycyBjb3JyZWN0bHkgYW5kIHdpdGhvdXQgcmVncmVzc2lvbi4KCkkmIzM5O2xsIHByb2NlZWQgdG8gYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2V0X2lwdjZfZXh0X2hkcnMmIzM0OywKICAgICYjMzQ7cGFyc2VfaXB2NmhkciYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd19rZXlfZXh0cmFjdCYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIGxvZ2ljIGluIGdldF9pcHY2X2V4dF9oZHJzKCksIGNvcnJlY3RseSB1c2luZyB0aGUgT0ZQSUVIMTJfRlJBRyBiaXRtYXNrIGluc3RlYWQgb2YgdGhlIElQUFJPVE9fRlJBR01FTlQgcHJvdG9jb2wgY29uc3RhbnQgd2hlbiBjaGVja2luZyBmb3Igb3V0LW9mLXNlcXVlbmNlIGV4dGVuc2lvbiBoZWFkZXJzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBJUHY2IHBhY2tldCBwcm9jZXNzaW5nIGFuZCBmbG93IGtleSBleHRyYWN0aW9uIHZpYSBOZXRsaW5rIC8gZGF0YXBhdGggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dldF9pcHY2X2V4dF9oZHJzJiMzNDssCiAgICAmIzM0O3BhcnNlX2lwdjZoZHImIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3QmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHR5cG8gaW4gT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSwgd2hlcmUgdGhlIHByb3RvY29sIG51bWJlciBgSVBQUk9UT19GUkFHTUVOVGAgd2FzIG1pc3Rha2VubHkgdXNlZCBpbiBiaXRtYXNrIGNoZWNrcyBpbnN0ZWFkIG9mIHRoZSBiaXRmbGFnIGBPRlBJRUgxMl9GUkFHYC5cblxuQWxsIHZhcmlhYmxlcyBhbmQgYml0ZmllbGRzIGludm9sdmVkIChgKmV4dF9oZHJzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgcGFyc2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzY5Mzg5MTU5OTEwNGZjZTUwZWNjNjQ3NjgzMWVmODMwMTA3MDI1MQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuYwppbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmMKQEAgLTI4OCw3ICYjNDM7Mjg4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLAogCQkJaWYgKCpleHRfaGRycyAmYW1wOyBPRlBJRUgxMl9FU1ApCiAJCQkJKmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQOwogCQkJaWYgKCgqZXh0X2hkcnMgJmFtcDsgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwKLQkJCQkJICAgT0ZQSUVIMTJfUk9VVEVSIHwgSVBQUk9UT19GUkFHTUVOVCB8CiYjNDM7CQkJCQkgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHwKIAkJCQkJICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHwKIAkJCSAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ICZndDs9IDIpIHsKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7CkBAIC0zMDEsNyAmIzQzOzMwMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCwKIAkJCQkqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7CiAJCQlpZiAoKCpleHRfaGRycyAmYW1wOwogCQkJICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfAotCQkJICAgICAgIElQUFJPVE9fRlJBR01FTlQgfCBPRlBJRUgxMl9VTlJFUCkpIHx8CiYjNDM7CQkJICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8CiAJCQkgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCAmZ3Q7PSAyKSB7CiAJCQkJKmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VROwogCQkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgQ29kZWJhc2U6IEluaXRpYWwgQXBwcm9hY2gqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHN0cmF0ZWd5IGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBjaGFuZ2VzIGFuZCBob3cgdGhleSBpbnRlZ3JhdGUgaW50byB0aGUgZXhpc3RpbmcgY29kZS4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgdGhlIHJlbGV2YW50IGFyZWEgaXMgbGlrZWx5IGFyb3VuZCB0aGUgZmxvdyBoYW5kbGluZyB3aXRoaW4gT3BlbiB2U3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmUgMjg4IGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhcyBhIGZpcnN0IHBvaW50IG9mIGF0dGFjaywgYXMgdGhpcyBvZnRlbiBnaXZlcyBtZSB0aGUgZW50cnkgcG9pbnQgYW5kIGNvcmUgbG9naWMgb2YgdGhlIGZ1bmN0aW9ucyB1c2VkLgoKVGhlbiwgdG8gZmFjaWxpdGF0ZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIGxldmVyYWdlIHRoZSBgcmVhZC1maWxlYCBjb21tYW5kLCBhcHBseWluZyBpdCB0byBhIGJyb2FkZXIgcmFuZ2Ugd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCwgc2F5LCBsaW5lcyAyNTAgdGhyb3VnaCAzNTAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIHN1cnJvdW5kaW5nIGNvZGUgY29udGV4dCBmb3IgYSBmb2N1c2VkIGFzc2Vzc21lbnQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgZ2V0IG1lIHRoZSBjb3JlIG9mIHdoYXQgbmVlZHMgdG8gYmUgdW5kZXJzdG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHQgKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxuIDI1MTpcdCAqIGlzIHVuZXhwZWN0ZWRseSBlbmNvdW50ZXJlZC4gKFR3byBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgbWF5IGJlXG4gMjUyOlx0ICogZXhwZWN0ZWQgYW5kIHdvdWxkIG5vdCBjYXVzZSB0aGlzIGJpdCB0byBiZSBzZXQuKVxuIDI1MzpcdCAqXG4gMjU0Olx0ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG4gMjU1Olx0ICogcHJlZmVycmVkIChidXQgbm90IHJlcXVpcmVkKSBieSBSRkMgMjQ2MDpcbiAyNTY6XHQgKlxuIDI1NzpcdCAqIFdoZW4gbW9yZSB0aGFuIG9uZSBleHRlbnNpb24gaGVhZGVyIGlzIHVzZWQgaW4gdGhlIHNhbWUgcGFja2V0LCBpdCBpc1xuIDI1ODpcdCAqIHJlY29tbWVuZGVkIHRoYXQgdGhvc2UgaGVhZGVycyBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAyNTk6XHQgKiAgICAgIElQdjYgaGVhZGVyXG4gMjYwOlx0ICogICAgICBIb3AtYnktSG9wIE9wdGlvbnMgaGVhZGVyXG4gMjYxOlx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxuIDI2MjpcdCAqICAgICAgUm91dGluZyBoZWFkZXJcbiAyNjM6XHQgKiAgICAgIEZyYWdtZW50IGhlYWRlclxuIDI2NDpcdCAqICAgICAgQXV0aGVudGljYXRpb24gaGVhZGVyXG4gMjY1Olx0ICogICAgICBFbmNhcHN1bGF0aW5nIFNlY3VyaXR5IFBheWxvYWQgaGVhZGVyXG4gMjY2Olx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxuIDI2NzpcdCAqICAgICAgdXBwZXItbGF5ZXIgaGVhZGVyXG4gMjY4Olx0ICovXG4gMjY5Olx0c3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxuIDI3MDpcdFx0XHRcdCAgICAgIHUxNiAqZXh0X2hkcnMpXG4gMjcxOlx0e1xuIDI3MjpcdFx0dTggbmV4dF90eXBlID0gbmgtXHUwMDNlbmV4dGhkcjtcbiAyNzM6XHRcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4gMjc0Olx0XHRpbnQgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9IDA7XG4gMjc1Olx0XG4gMjc2Olx0XHQqZXh0X2hkcnMgPSAwO1xuIDI3NzpcdFxuIDI3ODpcdFx0d2hpbGUgKGlwdjZfZXh0X2hkcihuZXh0X3R5cGUpKSB7XG4gMjc5Olx0XHRcdHN0cnVjdCBpcHY2X29wdF9oZHIgX2hkciwgKmhwO1xuIDI4MDpcdFxuIDI4MTpcdFx0XHRzd2l0Y2ggKG5leHRfdHlwZSkge1xuIDI4MjpcdFx0XHRjYXNlIElQUFJPVE9fTk9ORTpcbiAyODM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xuIDI4NDpcdFx0XHRcdC8qIHN0b3AgcGFyc2luZyAqL1xuIDI4NTpcdFx0XHRcdHJldHVybjtcbiAyODY6XHRcbiAyODc6XHRcdFx0Y2FzZSBJUFBST1RPX0VTUDpcbiAyODg6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG4gMjg5Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMjkwOlx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XG4gMjkxOlx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxuIDI5MjpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIDI5MzpcdFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIDI5NDpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIDI5NTpcdFx0XHRcdH1cbiAyOTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xuIDI5NzpcdFx0XHRcdGJyZWFrO1xuIDI5ODpcdFxuIDI5OTpcdFx0XHRjYXNlIElQUFJPVE9fQUg6XG4gMzAwOlx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfQVVUSClcbiAzMDE6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiAzMDI6XHRcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbiAzMDM6XHRcdFx0XHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XG4gMzA0Olx0XHRcdFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gMzA1Olx0XHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gMzA2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzA3Olx0XHRcdFx0fVxuIDMwODpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xuIDMwOTpcdFx0XHRcdGJyZWFrO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcbiAzMTI6XHRcdFx0XHRpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAwKSB7XG4gMzEzOlx0XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxuIDMxNDpcdFx0XHRcdFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxuIDMxNTpcdFx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzE2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbiAzMTc6XHRcdFx0XHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xuIDMxODpcdFx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjZcbiAzMTk6XHRcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuIDMyMDpcdFx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gMzIxOlx0XHRcdFx0XHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcbiAzMjI6XHRcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xuIDMyMzpcdFx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzI0Olx0XHRcdFx0XHR9XG4gMzI1Olx0XHRcdFx0fSBlbHNlIHtcbiAzMjY6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiAzMjc6XHRcdFx0XHR9XG4gMzI4Olx0XHRcdFx0ZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCYjNDM7JiM0Mzs7XG4gMzI5Olx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBJdHMgQ2FsbCBTaXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaW1wYWN0IG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AgbW9yZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkgY2FuJiMzOTt0IGp1c3QgaXNvbGF0ZSBpdDsgSSBuZWVkIHRvIGZvbGxvdyB0aGUgZGF0YS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZWxzZSBpcyB0aGlzIHVzZWQ/JiMzNDsgVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGFuYWx5emUgYWxsIHRoZSBjYWxsIHNpdGVzLiBJIHdhbnQgdG8ga25vdyBhbGwgdGhlIGlucHV0cyBhbmQgdXNlLWNhc2VzIHRoYXQgZGVwZW5kIG9uIHRoaXMgZnVuY3Rpb24sIHRoZSBwb3NzaWJsZSBlcnJvcnMsIGFuZCBhbGwgdGhlIHBhdGhzIHRocm91Z2ggdGhlIGNvZGUuIFRoYXTigJlzIGhvdyBJIGNhbiBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yLCBhbmQgZXZhbHVhdGUgYW55IHBvdGVudGlhbCBwcm9ibGVtcy4gT25seSB0aGVuIGNhbiBJIGRldGVybWluZSBpZiB0aGVyZSYjMzk7cyBhbiBhcmVhIEkgc2hvdWxkIGJlIGZvY3VzZWQgb24sIG9yIGlmIHRoZXJlIGlzIGEgbW9yZSBlZmZpY2llbnQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzMwOlx0XG4gMzMxOlx0XHRcdGNhc2UgSVBQUk9UT19GUkFHTUVOVDpcbiAzMzI6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxuIDMzMzpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDMzNDpcdFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8XG4gMzM1Olx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxuIDMzNjpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfFxuIDMzNzpcdFx0XHRcdFx0XHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gMzM4Olx0XHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gMzM5Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzQwOlx0XHRcdFx0fVxuIDM0MTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xuIDM0MjpcdFx0XHRcdGJyZWFrO1xuIDM0MzpcdFxuIDM0NDpcdFx0XHRjYXNlIElQUFJPVE9fUk9VVElORzpcbiAzNDU6XHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9ST1VURVIpXG4gMzQ2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gMzQ3Olx0XHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcbiAzNDg6XHRcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfREVTVCB8XG4gMzQ5Olx0XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbiAzNTA6XHRcdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbiAzNTE6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbiAzNTI6XHRcdFx0XHR9XG4gMzUzOlx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1JPVVRFUjtcbiAzNTQ6XHRcdFx0XHRicmVhaztcbiAzNTU6XHRcbiAzNTY6XHRcdFx0Y2FzZSBJUFBST1RPX0hPUE9QVFM6XG4gMzU3Olx0XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxuIDM1ODpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIDM1OTpcdFx0XHRcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2NlxuIDM2MDpcdFx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3RcbiAzNjE6XHRcdFx0XHQgKiBleHRlbnNpb24gaGVhZGVyIGluIHRoZSBwYWNrZXQuXG4gMzYyOlx0XHRcdFx0ICovXG4gMzYzOlx0XHRcdFx0aWYgKCpleHRfaGRycyA9PSAwKVxuIDM2NDpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0hPUDtcbiAzNjU6XHRcdFx0XHRlbHNlXG4gMzY2Olx0XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gMzY3Olx0XHRcdFx0YnJlYWs7XG4gMzY4Olx0XG4gMzY5Olx0XHRcdGRlZmF1bHQ6XG4gMzcwOlx0XHRcdFx0cmV0dXJuO1xuIDM3MTpcdFx0XHR9XG4gMzcyOlx0XG4gMzczOlx0XHRcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXHUwMDI2X2hkcik7XG4gMzc0Olx0XHRcdGlmICghaHApXG4gMzc1Olx0XHRcdFx0YnJlYWs7XG4gMzc2Olx0XHRcdG5leHRfdHlwZSA9IGhwLVx1MDAzZW5leHRoZHI7XG4gMzc3Olx0XHRcdHN0YXJ0ICYjNDM7PSBpcHY2X29wdGxlbihocCk7XG4gMzc4Olx0XHR9XG4gMzc5Olx0fVxuIDM4MDpcdFxuIDM4MTpcdHN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcbiAzODI6XHR7XG4gMzgzOlx0XHR1bnNpZ25lZCBzaG9ydCBmcmFnX29mZjtcbiAzODQ6XHRcdHVuc2lnbmVkIGludCBwYXlsb2FkX29mcyA9IDA7XG4gMzg1Olx0XHR1bnNpZ25lZCBpbnQgbmhfb2ZzID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7XG4gMzg2Olx0XHR1bnNpZ25lZCBpbnQgbmhfbGVuO1xuIDM4NzpcdFx0c3RydWN0IGlwdjZoZHIgKm5oO1xuIDM4ODpcdFx0aW50IGVyciwgbmV4dGhkciwgZmxhZ3MgPSAwO1xuIDM4OTpcdFxuIDM5MDpcdFx0ZXJyID0gY2hlY2tfaGVhZGVyKHNrYiwgbmhfb2ZzICYjNDM7IHNpemVvZigqbmgpKTtcbiAzOTE6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDM5MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDM5MzpcdFxuIDM5NDpcdFx0bmggPSBpcHY2X2hkcihza2IpO1xuIDM5NTpcdFxuIDM5NjpcdFx0Z2V0X2lwdjZfZXh0X2hkcnMoc2tiLCBuaCwgXHUwMDI2a2V5LVx1MDAzZWlwdjYuZXh0aGRycyk7XG4gMzk3Olx0XG4gMzk4Olx0XHRrZXktXHUwMDNlaXAucHJvdG8gPSBORVhUSERSX05PTkU7XG4gMzk5Olx0XHRrZXktXHUwMDNlaXAudG9zID0gaXB2Nl9nZXRfZHNmaWVsZChuaCk7XG4gNDAwOlx0XHRrZXktXHUwMDNlaXAudHRsID0gbmgtXHUwMDNlaG9wX2xpbWl0O1xuIDQwMTpcdFx0a2V5LVx1MDAzZWlwdjYubGFiZWwgPSAqKF9fYmUzMiAqKW5oIFx1MDAyNiBodG9ubChJUFY2X0ZMT1dJTkZPX0ZMT1dMQUJFTCk7XG4gNDAyOlx0XHRrZXktXHUwMDNlaXB2Ni5hZGRyLnNyYyA9IG5oLVx1MDAzZXNhZGRyO1xuIDQwMzpcdFx0a2V5LVx1MDAzZWlwdjYuYWRkci5kc3QgPSBuaC1cdTAwM2VkYWRkcjtcbiA0MDQ6XHRcbiA0MDU6XHRcdG5leHRoZHIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXHUwMDI2cGF5bG9hZF9vZnMsIC0xLCBcdTAwMjZmcmFnX29mZiwgXHUwMDI2ZmxhZ3MpO1xuIDQwNjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBJUDZfRkhfRl9GUkFHKSB7XG4gNDA3Olx0XHRcdGlmIChmcmFnX29mZikge1xuIDQwODpcdFx0XHRcdGtleS1cdTAwM2VpcC5mcmFnID0gT1ZTX0ZSQUdfVFlQRV9MQVRFUjtcbiA0MDk6XHRcdFx0XHRrZXktXHUwMDNlaXAucHJvdG8gPSBORVhUSERSX0ZSQUdNRU5UO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjI1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgcmVmaW5pbmcgdGhlIHdheSBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxvdy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb24gY2hlY2tpbmcgZm9yIGhlYWRlciB0eXBlcy4KCkkgY2FuIHNlZSB0aGUgY2hhbmdlIGludm9sdmVzIHJlcGxhY2luZyBgSVBQUk9UT19GUkFHTUVOVGAgd2l0aCBgT0ZQSUVIMTJfRlJBR2AgaW4gdGhlIGJpdG1hc2sgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBzZXF1ZW5jZSBpcyB2YWxpZCBhbmQgdW5zZXF1ZW5jZWQuIFRoZSBzdXJyb3VuZGluZyBsb2dpYyBzZWVtcyB0byBiZSBhYm91dCBpZGVudGlmeWluZyAmIzM0O3VucmVjb2duaXplZCYjMzQ7IG9yIHBvdGVudGlhbGx5IG1hbGZvcm1lZCBleHRlbnNpb24gaGVhZGVyIHNlcXVlbmNlcy4gVGhlIGNvZGUgZmxhZ3MgYSBzZXJpZXMgb2YgYml0d2lzZSBvcGVyYXRpb25zIG9uIGBleHRfaGRyc2AsIHRoZSBtYWluIHZhcmlhYmxlIHVzZWQgdG8gZW5jb2RlIHdoaWNoIGhlYWRlcnMgYXJlIHByZXNlbnQuCgpNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgYWRqdXN0bWVudCBpcyBsaWtlbHkgYSBidWcgZml4IG9yIGltcHJvdmVtZW50IGluIGlkZW50aWZ5aW5nIHRoZSB2YWxpZCBoZWFkZXIgdHlwZXMuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgb3Zlcmx5IHJlc3RyaWN0aXZlIG9yIHBvdGVudGlhbGx5IGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIE9wZW5GbG93IHNwZWNpZmljYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgT0ZQSUVIMTJfRlJBR2AgbGlrZWx5IGNsYXJpZmllcyB0aGUgaW50ZW50aW9uIHRvIHRyZWF0IGZyYWdtZW50IGhlYWRlcnMgaW4gYSBzcGVjaWZpYyB3YXkgd2l0aGluIHRoaXMgZmxvdyBwcm9jZXNzaW5nIGNvbnRleHQuIFRoZSBsb2dpYyBmb3IgYE9GUElFSDEyX1VOUkVQYCBhbmQgYE9GUElFSDEyX1VOU0VRYCBzZWVtIHRvIGJlIGltcG9ydGFudCB0byBob3cgT1ZTIGhhbmRsZXMgZnJhZ21lbnRlZCB0cmFmZmljIGFuZCBtYWxmb3JtZWQgcGFja2V0cy4KCkJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkmIzM5O2xsIGRlZmluaXRlbHkgd2FudCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlIGRlZmluaXRpb25zIG9mIGBPRlBJRUgxMl8qYCBjb25zdGFudHMgYW5kIGBJUFBST1RPX0ZSQUdNRU5UYCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50IGlzIHNlbWFudGljYWxseSBzb3VuZCBhbmQgYWxpZ25zIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIElQdjYgZnJhZ21lbnQgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBlZGdlIGNhc2VzIG9yIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxODozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtPRlBJRUgxMl8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTEtICogaXMgdW5leHBlY3RlZGx5IGVuY291bnRlcmVkLiAoVHdvIGRlc3RpbmF0aW9uIG9wdGlvbnMgaGVhZGVycyBtYXkgYmVcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTQ6ICogT0ZQSUVIMTJfVU5TRVEgaXMgc2V0IGlmIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgd2VyZSBub3QgaW4gdGhlIG9yZGVyXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cdFx0Y2FzZSBJUFBST1RPX05PTkU6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODQtXHRcdFx0Lyogc3RvcCBwYXJzaW5nICovXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXHRcdGNhc2UgSVBQUk9UT19FU1A6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9FU1ApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkwOlx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cdFx0XHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcdTAwM2U9IDIpIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTUtXHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVx0XHRjYXNlIElQUFJPVE9fQUg6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlx0XHRcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0Olx0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDUtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4Olx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDktXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXHRcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XHRcdFx0XHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcdFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE3LVx0XHRcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cdFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcdFx0XHRcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjA6XHRcdFx0XHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlx0XHRcdFx0ICAgICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX0VTUCB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcdFx0XHRcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjM6XHRcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI0LVx0XHRcdFx0fVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXHRcdFx0fSBlbHNlIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzI2Olx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXHRcdFx0fVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVx0XHRjYXNlIElQUFJPVE9fRlJBR01FTlQ6XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcdFx0XHRpZiAoKmV4dF9oZHJzIFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzM6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfVU5SRVApKSB8fFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzOTpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVx0XHRcdH1cbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQxOlx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDQtXHRcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDU6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDg6XHRcdFx0XHRcdCAgIE9GUElFSDEyX0RFU1QgfFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDk6XHRcdFx0XHRcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUwLVx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cdFx0XHR9XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTQtXHRcdFx0YnJlYWs7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXHRcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfSE9QKVxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1OTpcdFx0XHQvKiBPRlBJRUgxMl9IT1AgaXMgc2V0IHRvIDEgaWYgYSBob3AtYnktaG9wIElQdjZcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVx0XHRcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3Rcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2My1cdFx0XHRpZiAoKmV4dF9oZHJzID09IDApXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2NS1cdFx0XHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY3LVx0XHRcdGJyZWFrO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzc6XHRPRlBJRUgxMl9OT05FWFQgPSAxIFx1MDAzY1x1MDAzYyAwLCAgIC8qIFwmIzM0O05vIG5leHQgaGVhZGVyXCYjMzQ7IGVuY291bnRlcmVkLiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozODpcdE9GUElFSDEyX0VTUCAgICA9IDEgXHUwMDNjXHUwMDNjIDEsICAgLyogRW5jcnlwdGVkIFNlYyBQYXlsb2FkIGhlYWRlciBwcmVzZW50LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcdE9GUElFSDEyX0FVVEggICA9IDEgXHUwMDNjXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlx0T0ZQSUVIMTJfREVTVCAgID0gMSBcdTAwM2NcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQxOlx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcdTAwM2NcdTAwM2MgNCwgICAvKiBGcmFnbWVudCBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XHRPRlBJRUgxMl9ST1VURVIgPSAxIFx1MDAzY1x1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XHRPRlBJRUgxMl9IT1AgICAgPSAxIFx1MDAzY1x1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ0Olx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcdTAwM2NcdTAwM2MgNywgICAvKiBVbmV4cGVjdGVkIHJlcGVhdHMgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1Olx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcdTAwM2NcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE4OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODAKCQkJCQkJCW91dHB1dDogMTQxCgkJCQkJCQl0aG91Z2h0czogNjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN1YnRsZSBCdWcgRml4IGluIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgYWx3YXlzIHdhbnQgdG8gYmUgdGhvcm91Z2guIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBaCwgYSB0eXBvIGZpeCEmIzM0OyAgVGhlIGF1dGhvciB3YXMgdXNpbmcgYElQUFJPVE9fRlJBR01FTlRgICh3aGljaCwgbGV0JiMzOTtzIHNlZSwgaXMgYDQ0YCwgcmVwcmVzZW50aW5nIGEgY29tYmluYXRpb24gb2YgYml0cyBpbiBhIGJpdG1hc2spIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgT0ZQSUVIMTJfRlJBR2AgKHdoaWNoIGlzIGAxICZsdDsmbHQ7IDRgLCBvciBgMTZgKS4gVGhlIGNvZGUmIzM5O3MgaW4gYGdldF9pcHY2X2V4dF9oZHJzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fRVNQYCBhbmQgYElQUFJPVE9fQUhgIGNhc2VzLiBJdCYjMzk7cyBhIGJpdG1hc2sgY2FsY3VsYXRpb24sIGFuZCB0aGV5JiMzOTtyZSB1c2luZyBhIHByb3RvY29sIG51bWJlciBpbnN0ZWFkIG9mIGEgZmxhZy4gQ2xhc3NpYyBlcnJvci4KCk5vdywgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiAgSXMgdGhpcyBqdXN0IGEgbG9naWMgZXJyb3IsIG9yIGRvZXMgaXQgaGF2ZSBkZWVwZXIgaW1wbGljYXRpb25zPyBJcyB0aGVyZSBhIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBvZiB0aGlzIHR5cG8/IEkgbmVlZCB0byBydWxlIHRoYXQgb3V0IGltbWVkaWF0ZWx5LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikgYW5kIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpLiBXaGF0IHRyaWdnZXJzIHRoZXNlPwoKKiAgIEkgY2hlY2s6IERvZXMgdGhlIHBhdGNoIGFsdGVyIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBwYWRkaW5nL2ZpZWxkcz8gTm9wZS4gTm90IHJlbGV2YW50IGhlcmUuCiogICBEb2VzIGl0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm8sIGJlY2F1c2UgYCpleHRfaGRyc2AgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGJlZm9yZWhhbmQuICBMaW5lIDI3Ni4gR29vZC4KKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ/IE5vcGUsIGRvZXNuJiMzOTt0IGFwcGVhciBzby4KKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcy9sZW5ndGhzIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuCgpUaGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgYml0d2lzZSBmbGFnIG1hbmlwdWxhdGlvbiBmb3IgbWF0Y2hpbmcgT3BlbkZsb3cgSVB2NiBleHRlbnNpb24gaGVhZGVycyByZWxhdGVkIHRvIHRoZSBzZXF1ZW5jaW5nIGZsYWcgKGBPRlBJRUgxMl9VTlNFUWApLiBTbywgdGhpcyBpcyBhIGNsZWFuLCBzaW1wbGUgYnVnIGZpeC4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBhYnNvbHV0ZWx5IGZhbHNlLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGNvcnJlY3Rpb24uCgpPa2F5LCBJJiMzOTt2ZSBjb25maXJtZWQgbXkgYW5hbHlzaXMuIFRpbWUgdG8gZmluYWxpemUgdGhlIHJlc3BvbnNlIGFuZCB1c2UgYHNldC1yZXN1bHRzYCB0b29sLCBwcm92aWRpbmcgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiBmb3IgdGhlIG1haW50YWluZXJzLCBzbyB0aGV5IGNhbiBhZGRyZXNzIHRoaXMgcXVpY2tseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTg6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB0eXBvIGluIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCksIHdoZXJlIHRoZSBwcm90b2NvbCBudW1iZXIgYElQUFJPVE9fRlJBR01FTlRgIHdhcyBtaXN0YWtlbmx5IHVzZWQgaW4gYml0bWFzayBjaGVja3MgaW5zdGVhZCBvZiB0aGUgYml0ZmxhZyBgT0ZQSUVIMTJfRlJBR2AuXG5cbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxuXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI0LjkzNzYwODQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3NzU0NTI2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICAgIFwicGFyc2VfaXB2NmhkclwiLFxuICAgIFwib3ZzX2Zsb3dfa2V5X2V4dHJhY3RcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB0eXBvIGluIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCksIHdoZXJlIHRoZSBwcm90b2NvbCBudW1iZXIgYElQUFJPVE9fRlJBR01FTlRgIHdhcyBtaXN0YWtlbmx5IHVzZWQgaW4gYml0bWFzayBjaGVja3MgaW5zdGVhZCBvZiB0aGUgYml0ZmxhZyBgT0ZQSUVIMTJfRlJBR2AuXFxuXFxuQWxsIHZhcmlhYmxlcyBhbmQgYml0ZmllbGRzIGludm9sdmVkIChgKmV4dF9oZHJzYCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyBiZWZvcmUgcGFyc2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGNvcGllcyB0byB1c2Vyc3BhY2UsIG9yIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI0LjkzNzYxMjk0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjY2Nzk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcXG5pbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXFxuQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuIFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9FU1ApXFxuIFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gXFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbi1cXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxuIFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gXFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxcbiBcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbi1cXHRcXHRcXHQgICAgICAgSVBQUk9UT19GUkFHTUVOVCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4rXFx0XFx0XFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gXFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiBcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI1LjUwNDkyNTkzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTg0NDU2MDkyNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICAgIFwicGFyc2VfaXB2NmhkclwiLFxuICAgIFwib3ZzX2Zsb3dfa2V5X2V4dHJhY3RcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIE9wZW4gdlN3aXRjaCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyBsb2dpYyBpbiBnZXRfaXB2Nl9leHRfaGRycygpLCBjb3JyZWN0bHkgdXNpbmcgdGhlIE9GUElFSDEyX0ZSQUcgYml0bWFzayBpbnN0ZWFkIG9mIHRoZSBJUFBST1RPX0ZSQUdNRU5UIHByb3RvY29sIGNvbnN0YW50IHdoZW4gY2hlY2tpbmcgZm9yIG91dC1vZi1zZXF1ZW5jZSBleHRlbnNpb24gaGVhZGVycy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBkdXJpbmcgSVB2NiBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgZmxvdyBrZXkgZXh0cmFjdGlvbiB2aWEgTmV0bGluayAvIGRhdGFwYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzY5Mzg5MTU5OTEwNGZjZTUwZWNjNjQ3NjgzMWVmODMwMTA3MDI1MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTg6Mzc6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuaW5kZXggNDZjMWQ2NmFhZDhjMy4uODY4ZDlmZGYzYWZkZiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmNcbkBAIC0yODgsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxuIFx0XHRcdGlmICgqZXh0X2hkcnMgXHUwMDI2IE9GUElFSDEyX0VTUClcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiBcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjYgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcbi1cdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgSVBQUk9UT19GUkFHTUVOVCB8XG4rXHRcdFx0XHRcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxuIFx0XHRcdFx0XHQgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuQEAgLTMwMSw3ICszMDEsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XG4gXHRcdFx0aWYgKCgqZXh0X2hkcnMgXHUwMDI2XG4gXHRcdFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxuLVx0XHRcdCAgICAgICBJUFBST1RPX0ZSQUdNRU5UIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuK1x0XHRcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxuIFx0XHRcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFx1MDAzZT0gMikge1xuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xuIFx0XHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjI1LjUwNDkyODEwMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzE5Nzk4MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBPcGVuIHZTd2l0Y2ggRmxvdyBDb2RlKipcblxuT2theSwgc28gdGhlIHBhdGNoIEknbSB3b3JraW5nIG9uIGlzIGRlZmluaXRlbHkgbmVzdGxlZCB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBUaW1lIHRvIGRpZyBpbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGluc3BlY3Rpb24gb2YgdGhlIGRpZmYsIHBpbnBvaW50aW5nIGl0cyBwcmVjaXNlIGxvY2F0aW9uIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIGNoYW5nZXMgYXJvdW5kIGxpbmUgMjg4LiBJIGFsd2F5cyBmaW5kIGEgc29saWQgY29udGV4dCBjaGVjayBpcyBjcnVjaWFsLlxuXG5BbHJpZ2h0LCBJJ2xsIGxldmVyYWdlIGByZWFkLWZpbGVgIHRvIGdldCBhIGZyZXNoIGxvb2sgYXQgYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBieSBvbmx5IGxvb2tpbmcgYXQgdGhlIHBhdGNoLiBBbmQsIGFzIGEgbWF0dGVyIG9mIGR1ZSBkaWxpZ2VuY2UsIGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIE9wZW4gdlN3aXRjaC4gVGhpcyB3aWxsIGhvcGVmdWxseSBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBjaGFuZ2VzLiBHb3R0YSBlbnN1cmUgY29tcGF0aWJpbGl0eSBhdCBhbGwgbGV2ZWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozNzo0Ny44MjQ3MjgyNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRcXHRcXHQgICAgICB1MTYgKmV4dF9oZHJzKVxcbiAyNzE6XFx0e1xcbiAyNzI6XFx0XFx0dTggbmV4dF90eXBlID0gbmgtXFx1MDAzZW5leHRoZHI7XFxuIDI3MzpcXHRcXHR1bnNpZ25lZCBpbnQgc3RhcnQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuIDI3NDpcXHRcXHRpbnQgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9IDA7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdCpleHRfaGRycyA9IDA7XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdHdoaWxlIChpcHY2X2V4dF9oZHIobmV4dF90eXBlKSkge1xcbiAyNzk6XFx0XFx0XFx0c3RydWN0IGlwdjZfb3B0X2hkciBfaGRyLCAqaHA7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdFxcdHN3aXRjaCAobmV4dF90eXBlKSB7XFxuIDI4MjpcXHRcXHRcXHRjYXNlIElQUFJPVE9fTk9ORTpcXG4gMjgzOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9OT05FWFQ7XFxuIDI4NDpcXHRcXHRcXHRcXHQvKiBzdG9wIHBhcnNpbmcgKi9cXG4gMjg1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gMjg2OlxcdFxcbiAyODc6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0VTUDpcXG4gMjg4OlxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9FU1ApXFxuIDI4OTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDI5MDpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XFxuIDI5MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcXG4gMjkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDI5MzpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDI5NTpcXHRcXHRcXHRcXHR9XFxuIDI5NjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xcbiAyOTc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19BSDpcXG4gMzAwOlxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNlxcbiAzMDM6XFx0XFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbiAzMDQ6XFx0XFx0XFx0XFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDMwNTpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDMwNjpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDMwNzpcXHRcXHRcXHRcXHR9XFxuIDMwODpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcXG4gMzA5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRcXHRjYXNlIElQUFJPVE9fRFNUT1BUUzpcXG4gMzEyOlxcdFxcdFxcdFxcdGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDApIHtcXG4gMzEzOlxcdFxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbiAzMTQ6XFx0XFx0XFx0XFx0XFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxcbiAzMTU6XFx0XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzMTY6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XFxuIDMxNzpcXHRcXHRcXHRcXHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xcbiAzMTg6XFx0XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxuIDMxOTpcXHRcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NDcuODI0ODIxNDA1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTk5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NDcuODc3NDI1NDU0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2NjExMTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrIG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gYGdldF9pcHY2X2V4dF9oZHJzYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIG91dCBpdHMgY2FsbCBncmFwaCDigJMgd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBpbnZva2VkIGZyb20sIGFuZCB3aGF0IGZ1bmN0aW9ucyBsZWFkIHRvICp0aG9zZSogY2FsbHM/IFRoZSBhaW0gaXMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJcyBpdCBhIGxlYWYgZnVuY3Rpb24sIGNhbGxlZCBvbmx5IGZyb20gYSBjb3VwbGUgb2YgcGxhY2VzLCBvciBpcyBpdCBhIGNydWNpYWwgbGluayBkZWVwZXIgaW4gc29tZSBzb3J0IG9mIElQdjYgaGVhZGVyIHByb2Nlc3NpbmcgY2hhaW4/IFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRpY3RhdGUgaG93IGRlZXBseSBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZGVidWdnZXIgb3Igc3RhdGljIGFuYWx5c2lzIHRvb2xzIGFuZCBzZWUgd2hhdCBkZXBlbmRlbmNpZXMgSSdtIGRlYWxpbmcgd2l0aC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNhbGwgc3RhY2sgbG9va3MgbGlrZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjQ5Ljk0MzUzOTI1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjIwNDU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfaXB2Nl9leHRfaGRyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNDMtLyoqXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNDQ6ICogZ2V0X2lwdjZfZXh0X2hkcnMoKSAtIFBhcnNlcyBwYWNrZXQgYW5kIHNldHMgSVB2NiBleHRlbnNpb24gaGVhZGVyIGZsYWdzLlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ1LSAqXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI2OC0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI2OTpzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNzAtXFx0XFx0XFx0ICAgICAgdTE2ICpleHRfaGRycylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MzgxPXN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzk1LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mzk2OlxcdGdldF9pcHY2X2V4dF9oZHJzKHNrYiwgbmgsIFxcdTAwMjZrZXktXFx1MDAzZWlwdjYuZXh0aGRycyk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjQ5Ljk5OTc1MDQwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjg4OTcxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlBlZXJpbmcgaW50byBGbG93LmMncyBJUHY2IEhlYWRlciBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IElQdjYgaGVhZGVycyBhcmUgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgT3BlbiB2U3dpdGNoIGZsb3cgZW5naW5lLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbnMgYW5kIHVzYWdlIG9mIGEgZmV3IGtleSBmdW5jdGlvbnMgaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dDogYHBhcnNlX2lwdjZoZHJgLCBga2V5X2V4dHJhY3RgLCBhbmQgd2hhdGV2ZXIgZWxzZSBpcyByZWxldmFudC4gSSBuZWVkIHRvIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQsIHdoaWNoIHdpbGwgZ2l2ZSBtZSB0aGUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdGhlbiwgY3J1Y2lhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoZXkncmUgKmNhbGxlZCouIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgZGF0YSBleHRyYWN0aW9uIGFuZCBwYXJzaW5nIGFyZSBhY3R1YWxseSBwbHVnZ2VkIGludG8gdGhlIGZsb3cgcHJvY2Vzc2luZyBwaXBlbGluZS4gRmluZGluZyB0aG9zZSBjYWxscyB3aWxsIGdpdmUgbWUgY29udGV4dCwgbGV0IG1lIHNlZSBob3cgSVB2NiBoZWFkZXIgaW5mb3JtYXRpb24gaW5mbHVlbmNlcyBmbG93IG1hdGNoaW5nIGFuZCBhY3Rpb24gc2VsZWN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBmbG93LCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZXNlIHBpZWNlcyBpcyB3aGF0IEknbSBhZnRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjUyLjMyODY1MDE5OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTIyNDAxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV9pcHY2aGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTI2OT1zdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM4MTpzdGF0aWMgaW50IHBhcnNlX2lwdjZoZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zODIte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz02Nzk9c3RhdGljIGludCBrZXlfZXh0cmFjdF9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MTgtXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo4MTk6XFx0XFx0bmhfbGVuID0gcGFyc2VfaXB2Nmhkcihza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy04MjAtXFx0XFx0aWYgKHVubGlrZWx5KG5oX2xlbiBcXHUwMDNjIDApKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjUyLjM3OTg3OTU1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjUzNjc3MjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDYWxsZXJzIG9mIEtleSBFeHRyYWN0aW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSB1c2FnZSBvZiB0aGVzZSBrZXkgZXh0cmFjdGlvbiBmdW5jdGlvbnM6IGBrZXlfZXh0cmFjdF9sM2w0YCwgYG92c19mbG93X2tleV9leHRyYWN0YCwgYW5kIGFueSBvdGhlcnMgaW4gdGhhdCB2ZWluLiBXZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBoZXJlLCB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcHJlY2lzZSBpZGVudGlmaWNhdGlvbiBvZiBuZXR3b3JrIGZsb3cga2V5cywgcGFydGljdWxhcmx5IHRob3NlIHdoaWNoIGV4dHJhY3QgdGhlIGxheWVyIDMgYW5kIDQgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGZsb3cgZW50cmllcy4gVW5kZXJzdGFuZGluZyB0aGVpciBjYWxsIGdyYXBocyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBhIHZhcmlldHkgb2YgdGFza3MuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIG9mIGNvZGUgYXJlICpyZWx5aW5nKiBvbiB0aGVzZSBzcGVjaWZpYyBrZXkgZXh0cmFjdGlvbnMuIFdoYXQgYXJlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIGlzIHVzZWQ/IEknbSB0aGlua2luZzpcblxuKiAgICoqRmxvdyBUYWJsZSBMb29rdXBzKio6IE9idmlvdXNseSwgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtleSBpcyBjYWxjdWxhdGVkIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtYXRjaGluZyBsb2dpYy4gSSBuZWVkIHRvIHNlZSBob3cgdGhlIGV4dHJhY3RlZCBrZXkgY29tcG9uZW50cyBhcmUgZmVkIGludG8gdGhlIGZsb3cgdGFibGUgbG9va3VwIHByb2Nlc3MsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3B0aW1pemF0aW9ucyBiZWluZyBwZXJmb3JtZWQgb24gdGhlIGV4dHJhY3RlZCBrZXkgdG8gZW5zdXJlIGZhc3RlciBsb29rdXBzLlxuKiAgICoqRmxvdyBDcmVhdGlvbi9JbnNlcnRpb24qKjogV2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQgd2hlbiBuZXcgZmxvd3MgYXJlIGJlaW5nIGNyZWF0ZWQ/IFRoaXMgaXMga2V5IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB3ZSdyZSBidWlsZGluZyB0aGUgZmxvdyB0YWJsZSBlbnRyaWVzLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBkdXJpbmcgZmxvdyBjcmVhdGlvbj9cbiogICAqKkZsb3cgTW9kaWZpY2F0aW9uL1VwZGF0ZXMqKjogQXJlIHRoZXNlIGZ1bmN0aW9ucyBhbHNvIGludm9sdmVkIHdoZW4gbW9kaWZ5aW5nIGV4aXN0aW5nIGZsb3dzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIGtleSBjb21wb25lbnRzIGNoYW5nZT9cbiogICAqKkVycm9yIEhhbmRsaW5nL0RpYWdub3N0aWNzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgdXNlZCBmb3IgYW55IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgb3IgbG9nZ2luZyByZWxhdGVkIHRvIGZsb3cga2V5IG1pc21hdGNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcj9cbiogICAqKlBhY2tldCBQcm9jZXNzaW5nIFBhdGhzKio6IEFyZSB0aGVzZSBmdW5jdGlvbnMgY2FsbGVkIGluIHRoZSBmYXN0IHBhdGggb3Igb25seSBpbiB0aGUgc2xvdyBwYXRoPyBIb3cgbXVjaCBvZiBhbiBpbXBhY3QgZG8gdGhleSBoYXZlIG9uIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgbGF0ZW5jeT9cblxuTXkgYWltIGlzIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZW50aXJlIGtleSBleHRyYWN0aW9uIGFuZCBmbG93IG1hbmFnZW1lbnQgcGlwZWxpbmUuIEl0IHdpbGwgYWxsb3cgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBib3R0bGVuZWNrcyBhbmQgcG9zc2libGUgb3B0aW1pc2F0aW9ucyByZWxhdGVkIHRvIHRoaXMgdml0YWwgcHJvY2Vzcy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gcHJlZGljdCB0aGUgaW1wYWN0IG9mIGNoYW5nZXMgdG8gdGhlIGtleSBleHRyYWN0aW9uIGxvZ2ljLCBhbmQgdG8gYWxzbyB1bmRlcnN0YW5kIHdoZXJlIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBleGlzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM3OjU1LjYzMzU1OTA2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk0ODg5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2V5X2V4dHJhY3RfbDNsNHxvdnNfZmxvd19rZXlfZXh0cmFjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MzY3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4NC1cXHRpZiAoZ3NvX3R5cGUgXFx1MDAyNiBTS0JfR1NPX1VEUCkge1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM4NTpcXHRcXHQvKiBUaGUgaW5pdGlhbCBmbG93IGtleSBleHRyYWN0ZWQgYnkgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTM4Ni1cXHRcXHQgKiBpbiB0aGlzIGNhc2UgaXMgZm9yIGEgZmlyc3QgZnJhZ21lbnQsIHNvIHdlIG5lZWQgdG9cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTYxND1zdGF0aWMgaW50IG92c19wYWNrZXRfY21kX2V4ZWN1dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTY2OS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo2NzA6XFx0ZXJyID0gb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlKG5ldCwgYVtPVlNfUEFDS0VUX0FUVFJfS0VZXSxcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy02NzEtXFx0XFx0XFx0XFx0XFx0ICAgICBwYWNrZXQsIFxcdTAwMjZmbG93LVxcdTAwM2VrZXksIGxvZyk7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTYyNT1zdGF0aWMgaW50IHBhcnNlX25zaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtNjcxLS8qKlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6NjcyOiAqIGtleV9leHRyYWN0X2wzbDQgLSBleHRyYWN0cyBMMy9MNCBoZWFkZXIgaW5mb3JtYXRpb24uXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02NzMtICogQHNrYjogc2tfYnVmZiB0aGF0IGNvbnRhaW5zIHRoZSBmcmFtZSwgd2l0aCBza2ItXFx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gdGhlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTY3OC0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjY3OTpzdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy02ODAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05MDk9c3RhdGljIGludCBrZXlfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTYzLVxcdC8qIEZpbGwgb3V0IEwzL0w0IGtleSBpbmZvLCBpZiBhbnkgKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjk2NDpcXHRyZXR1cm4ga2V5X2V4dHJhY3RfbDNsNChza2IsIGtleSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy05NjUtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz05NzA9aW50IG92c19mbG93X2tleV91cGRhdGVfbDNsNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk3MS17XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzo5NzI6XFx0cmV0dXJuIGtleV9leHRyYWN0X2wzbDQoc2tiLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtOTczLX1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM9OTg2PXN0YXRpYyBpbnQga2V5X2V4dHJhY3RfbWFjX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTk5OS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwMDA6aW50IG92c19mbG93X2tleV9leHRyYWN0KGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8sXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDAxLVxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMTA3NC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjEwNzU6aW50IG92c19mbG93X2tleV9leHRyYWN0X3VzZXJzcGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0xMDc2LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTI4OT1pbnQgb3ZzX2Zsb3dfa2V5X3VwZGF0ZV9sM2w0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjI5MDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3QoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5MS1cXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmgtMjkzLS8qIEV4dHJhY3Qga2V5IGZyb20gcGFja2V0IGNvbWluZyBmcm9tIHVzZXJzcGFjZS4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjI5NDppbnQgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTI5NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM9NDIyPWludCBvdnNfdnBvcnRfcmVjZWl2ZShzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQyLVxcdC8qIEV4dHJhY3QgZmxvdyBmcm9tICdza2InIGludG8gJ2tleScuICovXFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmM6NDQzOlxcdGVycm9yID0gb3ZzX2Zsb3dfa2V5X2V4dHJhY3QodHVuX2luZm8sIHNrYiwgXFx1MDAyNmtleSk7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LmMtNDQ0LVxcdGlmICh1bmxpa2VseShlcnJvcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzc6NTUuNjkzMDUzNDEyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMDcxNDQyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2Ugd2l0aGluIGBnZXRfaXB2Nl9leHRfaGRyc2AsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBkZWFsaW5nIHdpdGggRVNQIGFuZCBBSCBwcm90b2NvbHMuIEkgc2VlIGEgZGlyZWN0IHN3YXAtb3V0OiB0aGUgYElQUFJPVE9fRlJBR01FTlRgIGNvbnN0YW50IGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYE9GUElFSDEyX0ZSQUdgIGluIHRoZSBiaXRtYXNrIGNoZWNrcy5cblxuUmlnaHQgYXdheSwgSSByZWNvZ25pemUgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXguIFVzaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCAoYW4gSVAgcHJvdG9jb2wgbnVtYmVyKSBpbiBhIGJpdG1hc2sgb3BlcmF0aW9uIGZvciB0aGUgT3BlbkZsb3cgZXh0ZW5zaW9uIGhlYWRlcnMgaXMgYSBkZWZpbml0ZSBtaXNzdGVwLiBJdCBzZWVtcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdhcyBpbmNvcnJlY3RseSBjaGVja2luZyBhZ2FpbnN0IHRoZSBwcm90b2NvbCAqdHlwZSogb2YgYSBmcmFnbWVudGVkIHBhY2tldCAod2hpY2ggd291bGRuJ3QgYmUgcHJlc2VudCBhdCB0aGlzIGxheWVyKSwgcmF0aGVyIHRoYW4gdGVzdGluZyB3aGV0aGVyIHRoZSBmcmFnbWVudGF0aW9uICpoZWFkZXIgZmxhZyogd2FzIHByZXNlbnQgaW4gdGhlIGV4dGVuc2lvbiBoZWFkZXIgZmxhZ3MuIFRoZSBpbnRlbnQgaGVyZSBpcyB0byBkZXRlcm1pbmUgdGhlIHNlcXVlbmNlIGFuZCByZS1vcmRlcmluZyBwcm9wZXJ0aWVzIHdoZW4gY2VydGFpbiBleHRlbnNpb24gaGVhZGVycyBhcmUgcHJlc2VudC5cblxuTm93LCBsZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgc3VzcGljaW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBwcmVjaXNlIGRlZmluaXRpb24gb2YgYE9GUElFSDEyX0ZSQUdgIGFuZCB0aGUgcmVsYXRlZCBPcGVuRmxvdyAxLjIgZXh0ZW5zaW9uIGhlYWRlciBmbGFncy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L29wZW52c3dpdGNoLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyIHRvIHZlcmlmeSB0aGUgZmxhZyBiaXQgYXNzaWdubWVudC4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgYE9GUElFSDEyX0ZSQUdgIGlzIGEgYml0IGZsYWcgd2l0aGluIHRoZSBPRlBJRUgxMiBiaXRmaWVsZC5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgbG9naWMgZXJyb3Igd2hlcmUgdGhlIHByZXNlbmNlIG9mIHRoZSBmcmFnbWVudGF0aW9uIGhlYWRlciB3YXNuJ3QgYmVpbmcgY29ycmVjdGx5IGlkZW50aWZpZWQsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGNsYXNzaWZpY2F0aW9uIG9yIHByb2Nlc3Npbmcgb2YgZnJhZ21lbnRlZCBwYWNrZXRzIHdpdGhpbiB0aGUgT3BlbkZsb3cgY29udGV4dC4gSXQncyBhIGNsZWFyIGFuZCBpbXBvcnRhbnQgY29ycmVjdGlvbiB0byBlbnN1cmUgdGhlIHJpZ2h0IGJlaGF2aW9yIGZvciBFU1AgYW5kIEFIIHBhY2tldHMgd2l0aCBmcmFnbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjAwLjkwMDIwMTA0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDA2MDU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPRlBJRUgxMl9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yMzc9c3RhdGljIGJvb2wgaWNtcGhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNDktICpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1MDogKiBPRlBJRUgxMl9VTlJFUCBpcyBzZXQgaWYgbW9yZSB0aGFuIG9uZSBvZiBhIGdpdmVuIElQdjYgZXh0ZW5zaW9uIGhlYWRlclxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjUxLSAqIGlzIHVuZXhwZWN0ZWRseSBlbmNvdW50ZXJlZC4gKFR3byBkZXN0aW5hdGlvbiBvcHRpb25zIGhlYWRlcnMgbWF5IGJlXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1My0gKlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjU0OiAqIE9GUElFSDEyX1VOU0VRIGlzIHNldCBpZiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHdlcmUgbm90IGluIHRoZSBvcmRlclxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjU1LSAqIHByZWZlcnJlZCAoYnV0IG5vdCByZXF1aXJlZCkgYnkgUkZDIDI0NjA6XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTI2OT1zdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4Mi1cXHRcXHRjYXNlIElQUFJPVE9fTk9ORTpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4MzpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfTk9ORVhUO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjg0LVxcdFxcdFxcdC8qIHN0b3AgcGFyc2luZyAqL1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODctXFx0XFx0Y2FzZSBJUFBST1RPX0VTUDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4ODpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfRVNQKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjg5OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI5MDpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTE6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTI6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5My1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTQ6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk1LVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI5NjpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRVNQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk3LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTktXFx0XFx0Y2FzZSBJUFBST1RPX0FIOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAwOlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9BVVRIKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwMi1cXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDM6XFx0XFx0XFx0ICAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfCBPRlBJRUgxMl9ST1VURVIgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA0OlxcdFxcdFxcdCAgICAgICBPRlBJRUgxMl9GUkFHIHwgT0ZQSUVIMTJfVU5SRVApKSB8fFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA1LVxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDctXFx0XFx0XFx0fVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzA4OlxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA5LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTMtXFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTQ6XFx0XFx0XFx0XFx0ICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfVU5SRVApKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE1OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxNy1cXHRcXHRcXHR9IGVsc2UgaWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzE4LVxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE5OlxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIwOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIxOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9FU1AgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIyOlxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzIzOlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMyNC1cXHRcXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjUtXFx0XFx0XFx0fSBlbHNlIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyNjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjctXFx0XFx0XFx0fVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzEtXFx0XFx0Y2FzZSBJUFBST1RPX0ZSQUdNRU5UOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzMyOlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9GUkFHKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzMzOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNDpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNTpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNjpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ST1VURVIgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzM3OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMzOC1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzk6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQwLVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0MTpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfRlJBRztcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0Mi1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzQ0LVxcdFxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ1OlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9ST1VURVIpXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ3OlxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ4OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ5OlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1MC1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTE6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzUyLVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1MzpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzU0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTYtXFx0XFx0Y2FzZSBJUFBST1RPX0hPUE9QVFM6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTc6XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0hPUClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM1ODpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTk6XFx0XFx0XFx0LyogT0ZQSUVIMTJfSE9QIGlzIHNldCB0byAxIGlmIGEgaG9wLWJ5LWhvcCBJUHY2XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjAtXFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpcyBwcmVzZW50IGFzIHRoZSBmaXJzdFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjMtXFx0XFx0XFx0aWYgKCpleHRfaGRycyA9PSAwKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzY0OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9IT1A7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjUtXFx0XFx0XFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzY2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM2Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg9MzY9ZW51bSBvZnAxMl9pcHY2ZXh0aGRyX2ZsYWdzIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM3OlxcdE9GUElFSDEyX05PTkVYVCA9IDEgXFx1MDAzY1xcdTAwM2MgMCwgICAvKiBcXFwiTm8gbmV4dCBoZWFkZXJcXFwiIGVuY291bnRlcmVkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6Mzg6XFx0T0ZQSUVIMTJfRVNQICAgID0gMSBcXHUwMDNjXFx1MDAzYyAxLCAgIC8qIEVuY3J5cHRlZCBTZWMgUGF5bG9hZCBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM5OlxcdE9GUElFSDEyX0FVVEggICA9IDEgXFx1MDAzY1xcdTAwM2MgMiwgICAvKiBBdXRoZW50aWNhdGlvbiBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQwOlxcdE9GUElFSDEyX0RFU1QgICA9IDEgXFx1MDAzY1xcdTAwM2MgMywgICAvKiAxIG9yIDIgZGVzdCBoZWFkZXJzIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MTpcXHRPRlBJRUgxMl9GUkFHICAgPSAxIFxcdTAwM2NcXHUwMDNjIDQsICAgLyogRnJhZ21lbnQgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MjpcXHRPRlBJRUgxMl9ST1VURVIgPSAxIFxcdTAwM2NcXHUwMDNjIDUsICAgLyogUm91dGVyIGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDM6XFx0T0ZQSUVIMTJfSE9QICAgID0gMSBcXHUwMDNjXFx1MDAzYyA2LCAgIC8qIEhvcC1ieS1ob3AgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0NDpcXHRPRlBJRUgxMl9VTlJFUCAgPSAxIFxcdTAwM2NcXHUwMDNjIDcsICAgLyogVW5leHBlY3RlZCByZXBlYXRzIGVuY291bnRlcmVkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDU6XFx0T0ZQSUVIMTJfVU5TRVEgID0gMSBcXHUwMDNjXFx1MDAzYyA4ICAgIC8qIFVuZXhwZWN0ZWQgc2VxdWVuY2luZyBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oLTQ2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjAyLjg0MDI2NzQ0MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDc1MjEwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGFuIE9wZW4gdlN3aXRjaCBCdWcgYW5kIEZ1enppbmcgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYWhhISBJJ3ZlIHNwb3R0ZWQgc29tZXRoaW5nLiBJdCBzZWVtcyB0aGF0IHRoZSBjaGVjayBoZXJlLCBgSVBQUk9UT19GUkFHTUVOVGAsIHdoaWNoIGlzIDQ0IChvciAweDJDLCBtZWFuaW5nIEFVVEgsIERFU1QsIGFuZCBST1VURVIgYml0cyBzZXQpLCBpcyBiZWluZyB1c2VkIGluc3RlYWQgb2YgYE9GUElFSDEyX0ZSQUdgLCB3aGljaCBpcyBzaW1wbHkgMTYuIFRoYXQncyBhIGNsZWFyIGJ1ZyBpbiBgZ2V0X2lwdjZfZXh0X2hkcnMoKWAhIFRoZSB3cm9uZyBjb25zdGFudCBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IE9wZW4gdlN3aXRjaCBpcyBhIHZpcnR1YWwgZGF0YXBhdGgsIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2hgLCBhbmQgaXQncyBmdWxseSBzdXBwb3J0ZWQuIEkgY2FuIGludGVyYWN0IHdpdGggaXQgdmlhIE5ldGxpbmsuIFN5emthbGxlciwgd2hpY2ggSSBrbm93IHZlcnkgd2VsbCwgYWN0aXZlbHkgZnV6emV6IE9WUyB1c2luZyBOZXRsaW5rIGNvbW1hbmRzIGxpa2UgYG92c19wYWNrZXRfY21kX2V4ZWN1dGVgIGFuZCBgb3ZzX2Zsb3dfY21kX25ld2AuIEdpdmVuIHRoaXMsIGl0J3MgYWJzb2x1dGVseSByZWFjaGFibGUuIFRoZXJlIGFyZSBubyBxdWVzdGlvbnMuIEl0J3MgZnVsbHkgcmVhY2hhYmxlLlxuXG5UaW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBmaWxlcy4gSSBzaG91bGQgY2hlY2sgYEtjb25maWdgIGZvciBPUEVOVlNXSVRDSC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbmZpZ3VyZWQsIGFuZCB3aGF0J3MgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDUuOTE1NDgwMzVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgT3BlbiB2U3dpdGNoXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBPUEVOVlNXSVRDSFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IFxcXFxcXG4gIDEwOlxcdFxcdFxcdCAgIChORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdFxcdCAgICAgKCFORl9OQVQgfHwgTkZfTkFUKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMjpcXHRcXHRcXHRcXHRcXHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcXG4gIDE0OlxcdFxcdHNlbGVjdCBNUExTXFxuICAxNTpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9NUExTX0dTT1xcbiAgMTc6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAgMTg6XFx0XFx0c2VsZWN0IE5FVF9OU0hcXG4gIDE5OlxcdFxcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xcbiAgMjA6XFx0XFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXFxuICAyMzpcXHRcXHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXFxuICAyNDpcXHRcXHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxcbiAgMjU6XFx0XFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXFxuICAyNjpcXHRcXHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcXG4gIDI3OlxcdFxcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXFxuICAyODpcXHRcXHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXFxuICAyOTpcXHRcXHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBwcm92aWRlcyBhbiBpbi1rZXJuZWwgZmFzdCBwYXRoIGZvciBwYWNrZXRcXG4gIDMyOlxcdFxcdCAgZm9yd2FyZGluZy4gIEl0IGlzIGNvbXBsZW1lbnRlZCBieSBhIHVzZXJzcGFjZSBkYWVtb24sIG92cy12c3dpdGNoZCxcXG4gIDMzOlxcdFxcdCAgd2hpY2ggaXMgYWJsZSB0byBhY2NlcHQgY29uZmlndXJhdGlvbiBmcm9tIGEgdmFyaWV0eSBvZiBzb3VyY2VzIGFuZFxcbiAgMzQ6XFx0XFx0ICB0cmFuc2xhdGUgaXQgaW50byBwYWNrZXQgcHJvY2Vzc2luZyBydWxlcy5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXFxuICAzNzpcXHRcXHQgIHV0aWxpdGllcy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA0MDpcXHRcXHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDUuOTE1NTQ4MDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU2MzgzMzg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBEZXBlbmRlbmN5IGluIE9wZW4gdlN3aXRjaCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gSVB2NiBhbmQgSU5FVCBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBPcGVuIHZTd2l0Y2guIEkga25vdyBPVlMgaXMgbGlua2VkIHRvIElORVQsIGFuZCB0aGF0IE9WUyBpdHNlbGYgaXMgY29tcGlsZWQgd2l0aCBpdHMgb3duIG1vZHVsZXMuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciBJUHY2IHN1cHBvcnQgd2l0aGluIE9WUyBpcyBjb25kaXRpb25hbCwgdGhhdCBpcywgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFnLiBJJ20gYmV0dGluZyB0aGF0IGBDT05GSUdfSVBWNmAgaXMgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRvIGNvbmZpcm0gdGhpcyBhbmQgdG8gYWN0dWFsbHkgKnNlZSogaG93IElQdjYgc3VwcG9ydCBpcyBoYW5kbGVkLCBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaW5zdGFuY2VzIG9mIGBDT05GSUdfSVBWNmAgb3IgZXZlbiBqdXN0IHBsYWluIGBJUFY2YCB3aGljaCB3aWxsIGdpdmUgbWUgdGhlIGNsdWUgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgZW1wbG95ZWQgd2l0aGluIE9WUyByZWdhcmRpbmcgSVB2Ni4gVGhpcyBzaG91bGQgcXVpY2tseSBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IGFuZCBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA2NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDguNDc5Mzg0NTQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQzMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBWNnxJU19FTkFCTEVEXFxcXChDT05GSUdfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jPTE0NDY9c3RhdGljIGJvb2wgb3ZzX2N0X25hdF90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMtMTQ3NC1cXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxubmV0L29wZW52c3dpdGNoL2Nvbm50cmFjay5jOjE0NzU6XFx0XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYy0xNDc2LVxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWZhbWlseSA9PSBORlBST1RPX0lQVjYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MDguNTI4ODI1MjE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NjY2NjEyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IEZsb3cgSGFuZGxpbmcqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIHdoZW4gSSdtIHRyYWNraW5nIGRvd24gdGhlIElQdjYtcmVsYXRlZCBzdHVmZiBpbiBPcGVuIHZTd2l0Y2gsIG15IGluc3RpbmN0IGlzIGFsd2F5cyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AuIFRoYXQncyB0aGUgaGVhcnQgb2YgdGhlIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24sIHNvIGl0J3MgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgdG8gZmlndXJlIG91dCBob3cgSVB2NiBwYWNrZXRzIGFyZSBiZWluZyBjbGFzc2lmaWVkIGFuZCBtYXRjaGVkLiBJIHdhbnQgdG8gc2VlIGV4YWN0bHkgKmhvdyogdGhleSdyZSBoYW5kbGluZyB0aG9zZSBJUHY2IGFkZHJlc3NlcywgdGhlIGZsb3cga2V5cywgYW5kIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIHRoZXkgbWlnaHQgaGF2ZSBpbiBwbGFjZSBmb3IgSVB2NiB0cmFmZmljLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgc3RydWN0dXJlcywgbWF5YmUgYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhhdCBwYWNrZXQgaGVhZGVyLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIHRoZSBJUHY2IGZsb3cgcHJvY2Vzc2luZyBpcyBsaWtlbHkgbG9jYXRlZC4gSSB3aWxsIGJlIGxvb2tpbmcgYXQgd2hhdCdzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZCwgSSBob3BlIHRvIGZpbmQgc29tZSBpbnRlcmVzdGluZyB0cmlja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTM0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MTEuMjk1NDg5OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX2lwdjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjY5PXN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzgwLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzgxOnN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM4Mi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jPTY3OT1zdGF0aWMgaW50IGtleV9leHRyYWN0X2wzbDQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgxOC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjgxOTpcXHRcXHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTgyMC1cXHRcXHRpZiAodW5saWtlbHkobmhfbGVuIFxcdTAwM2MgMCkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MTEuMzQ3MTE5OTQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2NjY1OTI0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBJUHY2IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYElQVjZgIGNvbmZpZ3VyYXRpb24gZmxhZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYm90aCBgQ09ORklHX0lQVjZgIGFuZCBgQ09ORklHX09QRU5WU1dJVENIYCBhcmUgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYENPTkZJR19JUFY2YCBpcywgaW4gZmFjdCwgYSBmdW5kYW1lbnRhbCByZXF1aXJlbWVudCBmb3IgYW55IElQdjYgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBzZXR1cC4gSW4gdGhlIExpbnV4IGtlcm5lbCwgZW5hYmxpbmcgYElQVjZgIGlzIHByZXR0eSBzdGFuZGFyZCBwcmFjdGljZSwgc28gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGRlcGVuZGVuY3kgaGVyZS5cblxuTG9va2luZyBhdCBgZmxvdy5jYCwgdGhlIHRyaWdnZXIgc2VlbXMgdG8gYmUgYGtleS1cdTAwM2VldGgudHlwZSA9PSBodG9ucyhFVEhfUF9JUFY2KWAsIHdoaWNoIHN1YnNlcXVlbnRseSBjYWxscyBgcGFyc2VfaXB2NmhkcmAuIFNvLCBkb2VzIGBPUEVOVlNXSVRDSGAgcmVseSBkaXJlY3RseSBvbiBgSVBWNmAgb3Igbm90PyBJcyB0aGVyZSBhbnkgaW5kaXJlY3QgZGVwZW5kZW5jeT8gSSBuZWVkIHRvIGRlZmluaXRpdmVseSBkZXRlcm1pbmUgaWYgaXQncyBzdHJpY3RseSBuZWNlc3NhcnksIG9yIGlmIHRoZXJlJ3Mgc29tZSBjb25kaXRpb25hbCBsb2dpYyBhdCBwbGF5LlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbGwgZXhhbWluZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgYXJvdW5kIGxpbmUgODE4LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHNwb3QgdG8gY2hlY2sgaG93IHRoZSBmbGFnIGlzIHVzZWQgd2l0aCByZXNwZWN0IHRvIE9wZW4gdlN3aXRjaC4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIGFuc3dlciB0aGVyZSBhbmQgY2FuIGRldGVybWluZSB0aGUgbmVjZXNzaXR5IG9mIHRoZSBgSVBWNmAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzAyOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODoxNy4wMTM3MTUzMzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3cuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTA6XFx0XFx0XFx0XFx0bGFiZWxfY291bnQrKztcXG4gODExOlxcdFxcdFxcdH1cXG4gODEyOlxcdFxcdFxcdGlmIChsYWJlbF9jb3VudCBcXHUwMDNlIE1QTFNfTEFCRUxfREVQVEgpXFxuIDgxMzpcXHRcXHRcXHRcXHRsYWJlbF9jb3VudCA9IE1QTFNfTEFCRUxfREVQVEg7XFxuIDgxNDpcXHRcXG4gODE1OlxcdFxcdFxcdGtleS1cXHUwMDNlbXBscy5udW1fbGFiZWxzX21hc2sgPSBHRU5NQVNLKGxhYmVsX2NvdW50IC0gMSwgMCk7XFxuIDgxNjpcXHRcXHR9IGVsc2UgaWYgKGtleS1cXHUwMDNlZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gODE3OlxcdFxcdFxcdGludCBuaF9sZW47ICAgICAgICAgICAgIC8qIElQdjYgSGVhZGVyICsgRXh0ZW5zaW9ucyAqL1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRcXHRuaF9sZW4gPSBwYXJzZV9pcHY2aGRyKHNrYiwga2V5KTtcXG4gODIwOlxcdFxcdFxcdGlmICh1bmxpa2VseShuaF9sZW4gXFx1MDAzYyAwKSkge1xcbiA4MjE6XFx0XFx0XFx0XFx0c3dpdGNoIChuaF9sZW4pIHtcXG4gODIyOlxcdFxcdFxcdFxcdGNhc2UgLUVJTlZBTDpcXG4gODIzOlxcdFxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2a2V5LVxcdTAwM2VpcCwgMCwgc2l6ZW9mKGtleS1cXHUwMDNlaXApKTtcXG4gODI0OlxcdFxcdFxcdFxcdFxcdG1lbXNldChcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmFkZHIsIDAsIHNpemVvZihrZXktXFx1MDAzZWlwdjYuYWRkcikpO1xcbiA4MjU6XFx0XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuIDgyNjpcXHRcXHRcXHRcXHRjYXNlIC1FUFJPVE86XFxuIDgyNzpcXHRcXHRcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyO1xcbiA4Mjg6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSAwO1xcbiA4Mjk6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgzMDpcXHRcXHRcXHRcXHRkZWZhdWx0OlxcbiA4MzE6XFx0XFx0XFx0XFx0XFx0ZXJyb3IgPSBuaF9sZW47XFxuIDgzMjpcXHRcXHRcXHRcXHR9XFxuIDgzMzpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDgzNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjE3LjAxMzgxMTc1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2ODU2Nzk5Njg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9wZW4gdlN3aXRjaCBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5jYCBzcGVjaWZpY2FsbHksIGZvY3VzaW5nIG9uIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3ltYm9scyBmb3IgZnV6emluZy4gSSdtIHplcm9pbmcgaW4gb24gYHBhcnNlX2lwdjZoZHJgIGFuZCBgZ2V0X2lwdjZfZXh0X2hkcnNgIGluIGBmbG93LmNgIGFzIGNvcmUgdG8gdGhpcyBhcmVhLCBhbmQgdGhlbiBhbHNvIGBvdnNfZmxvd19rZXlfZXh0cmFjdGAgYW5kIGBvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VgIGFzIHRoZSBleHRlcm5hbCBlbnRyeSBwb2ludHMuIEkga25vdyBgZ2V0X2lwdjZfZXh0X2hkcnNgIGFuZCBgcGFyc2VfaXB2NmhkcmAgYXJlIHN0YXRpYyB3aXRoaW4gYGZsb3cuY2AsIGFuZCB0aGF0J3MgaW1wb3J0YW50IGJlY2F1c2UgaXQgaW1wYWN0cyBzeW1ib2wgdmlzaWJpbGl0eS5cblxuTm93LCBteSB1bmRlcnN0YW5kaW5nIG9mIGBGb2N1c1N5bWJvbHNgIGd1aWRhbmNlIGlzIGtleSBoZXJlLiBCZWNhdXNlIGBnZXRfaXB2Nl9leHRfaGRyc2AgYW5kIGBwYXJzZV9pcHY2aGRyYCBhcmVuJ3QgaW5saW5lZCBhbmQgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICpzaG91bGQqIGJlIHRhcmdldGFibGUuIEV2ZW4gaWYgdGhleSB3ZXJlIHN0YXRpYywgSSBrbm93IHRoYXQgaWYgdGhleSBhcmUgbm9uLWlubGluZWQgdGhlbiB0aGV5IHNob3VsZCBiZSB0YXJnZXRhYmxlLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGhlbHBlcnMgdG8gcHVibGljIGZhY2luZyBmdW5jdGlvbnMuIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGxpc3QgZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYywgYW5kIGlkZW50aWZ5IGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVycy4gSSB0aGluayBJJ3ZlIGRvbmUgdGhhdC4gSSBhbHNvIHRoaW5rIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RgIGFuZCBgb3ZzX2Zsb3dfa2V5X2V4dHJhY3RfdXNlcnNwYWNlYCBhcmUga2V5IGFzIHRoZSBwdWJsaWMgZW50cnlwb2ludHMuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmZpZ3VyYXRpb246IGBPUEVOVlNXSVRDSGAgYW5kIGBJUFY2YCBhcmUgZGVmaW5pdGVseSByZWxldmFudCwgYW5kIHRoYXQncyBnb29kLlxuXG5BcyBmb3IgXCJXb3J0aEZ1enppbmdcIiwgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIGluIHRoZSBgZ2V0X2lwdjZfZXh0X2hkcnNgIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB2aXJ0dWFsIG5ldHdvcmtpbmcgaW50ZXJmYWNlcyBhbmQgbmV0bGluayBjb21tYW5kcy4gVGhhdCdzIGEgc3Ryb25nIHBvc2l0aXZlIGluZGljYXRvci5cblxuU28sIGhlcmUncyB0aGUgZmluYWwgcmVzdWx0OlxuKiAgICoqQ29uZmlncyoqOiBcXFtcIk9QRU5WU1dJVENIXCIsIFwiSVBWNlwiXVxuKiAgICoqRm9jdXNTeW1ib2xzKio6IFxcW1wiZ2V0XFxfaXB2NlxcX2V4dFxcX2hkcnNcIiwgXCJwYXJzZVxcX2lwdjZoZHJcIiwgXCJvdnNcXF9mbG93XFxfa2V5XFxfZXh0cmFjdFwiLCBcIm92c1xcX2Zsb3dcXF9rZXlcXF9leHRyYWN0XFxfdXNlcnNwYWNlXCJdXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBPcGVuIHZTd2l0Y2gncyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgcGFyc2luZyAoYGdldF9pcHY2X2V4dF9oZHJzYCkgYnkgY2hhbmdpbmcgYW4gaW5jb3JyZWN0IGBJUFBST1RPX0ZSQUdNRU5UYCBjb25zdGFudCB0byBgT0ZQSUVIMTJfRlJBR2AgYml0bWFzayBmbGFncy4gVGhpcyBhcmVhIGlzIHJlYWNoYWJsZSB0aHJvdWdoIE9wZW4gdlN3aXRjaCBmbG93IGtleSBleHRyYWN0aW9uIHdoZW4gcHJvY2Vzc2luZyBJUHY2IHBhY2tldHMuIEZ1enppbmcgaXMganVzdGlmaWVkIHRvIHRlc3QgdGhhdCBleHRlbnNpb24gaGVhZGVyIGZsYWdzIGFuZCBzZXF1ZW5jaW5nIGNoZWNrcyBoYW5kbGUgYWxsIHBvc3NpYmxlIElQdjYgcGFja2V0IGhlYWRlcnMgY29ycmVjdGx5IGFuZCB3aXRob3V0IHJlZ3Jlc3Npb24uXG5cbkknbGwgcHJvY2VlZCB0byBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NDgsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuODcwNjE0NTg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MTcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2lwdjZfZXh0X2hkcnNcIixcbiAgICBcInBhcnNlX2lwdjZoZHJcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0XCIsXG4gICAgXCJvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gZ2V0X2lwdjZfZXh0X2hkcnMoKSwgY29ycmVjdGx5IHVzaW5nIHRoZSBPRlBJRUgxMl9GUkFHIGJpdG1hc2sgaW5zdGVhZCBvZiB0aGUgSVBQUk9UT19GUkFHTUVOVCBwcm90b2NvbCBjb25zdGFudCB3aGVuIGNoZWNraW5nIGZvciBvdXQtb2Ytc2VxdWVuY2UgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZsb3cga2V5IGV4dHJhY3Rpb24gdmlhIE5ldGxpbmsgLyBkYXRhcGF0aCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2V0X2lwdjZfZXh0X2hkcnNcIixcbiAgICBcInBhcnNlX2lwdjZoZHJcIixcbiAgICBcIm92c19mbG93X2tleV9leHRyYWN0XCIsXG4gICAgXCJvdnNfZmxvd19rZXlfZXh0cmFjdF91c2Vyc3BhY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgbG9naWMgaW4gZ2V0X2lwdjZfZXh0X2hkcnMoKSwgY29ycmVjdGx5IHVzaW5nIHRoZSBPRlBJRUgxMl9GUkFHIGJpdG1hc2sgaW5zdGVhZCBvZiB0aGUgSVBQUk9UT19GUkFHTUVOVCBwcm90b2NvbCBjb25zdGFudCB3aGVuIGNoZWNraW5nIGZvciBvdXQtb2Ytc2VxdWVuY2UgZXh0ZW5zaW9uIGhlYWRlcnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIElQdjYgcGFja2V0IHByb2Nlc3NpbmcgYW5kIGZsb3cga2V5IGV4dHJhY3Rpb24gdmlhIE5ldGxpbmsgLyBkYXRhcGF0aCBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODoyMy45NTA1NDAwOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzYyNTEwODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuOTUxMjI1Mjg3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3NjE4MjAwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxcblxcbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNjkzODkxNTk5MTA0ZmNlNTBlY2M2NDc2ODMxZWY4MzAxMDcwMjUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxODozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jXG5pbmRleCA0NmMxZDY2YWFkOGMzLi44NjhkOWZkZjNhZmRmIDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuY1xuQEAgLTI4OCw3ICsyODgsNyBAQCBzdGF0aWMgdm9pZCBnZXRfaXB2Nl9leHRfaGRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXB2NmhkciAqbmgsXG4gXHRcdFx0aWYgKCpleHRfaGRycyBcdTAwMjYgT0ZQSUVIMTJfRVNQKVxuIFx0XHRcdFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xuIFx0XHRcdGlmICgoKmV4dF9oZHJzIFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxuLVx0XHRcdFx0XHQgICBPRlBJRUgxMl9ST1VURVIgfCBJUFBST1RPX0ZSQUdNRU5UIHxcbitcdFx0XHRcdFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XG4gXHRcdFx0XHRcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG5AQCAtMzAxLDcgKzMwMSw3IEBAIHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcbiBcdFx0XHRcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcbiBcdFx0XHRpZiAoKCpleHRfaGRycyBcdTAwMjZcbiBcdFx0XHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XG4tXHRcdFx0ICAgICAgIElQUFJPVE9fRlJBR01FTlQgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4rXHRcdFx0ICAgICAgIE9GUElFSDEyX0ZSQUcgfCBPRlBJRUgxMl9VTlJFUCkpIHx8XG4gXHRcdFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXHUwMDNlPSAyKSB7XG4gXHRcdFx0XHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XG4gXHRcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTg6Mzg6MjMuOTUxMjI2NDY3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTUwMDA0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBDb2RlYmFzZTogSW5pdGlhbCBBcHByb2FjaCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBzdHJhdGVneSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXkgaW50ZWdyYXRlIGludG8gdGhlIGV4aXN0aW5nIGNvZGUuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHRoZSByZWxldmFudCBhcmVhIGlzIGxpa2VseSBhcm91bmQgdGhlIGZsb3cgaGFuZGxpbmcgd2l0aGluIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBgbmV0L29wZW52c3dpdGNoL2Zsb3cuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiBsaW5lIDI4OCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYXMgYSBmaXJzdCBwb2ludCBvZiBhdHRhY2ssIGFzIHRoaXMgb2Z0ZW4gZ2l2ZXMgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBjb3JlIGxvZ2ljIG9mIHRoZSBmdW5jdGlvbnMgdXNlZC5cblxuVGhlbiwgdG8gZmFjaWxpdGF0ZSBhIGRlZXBlciB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgdGhlIGByZWFkLWZpbGVgIGNvbW1hbmQsIGFwcGx5aW5nIGl0IHRvIGEgYnJvYWRlciByYW5nZSB3aXRoaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93LmNgLCBzYXksIGxpbmVzIDI1MCB0aHJvdWdoIDM1MC4gVGhpcyBzaG91bGQgcHJvdmlkZSBlbm91Z2ggc3Vycm91bmRpbmcgY29kZSBjb250ZXh0IGZvciBhIGZvY3VzZWQgYXNzZXNzbWVudC4gVGhhdCBzaG91bGQgcXVpY2tseSBnZXQgbWUgdGhlIGNvcmUgb2Ygd2hhdCBuZWVkcyB0byBiZSB1bmRlcnN0b29kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMC4wMDYyMzU1MjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdCAqIE9GUElFSDEyX1VOUkVQIGlzIHNldCBpZiBtb3JlIHRoYW4gb25lIG9mIGEgZ2l2ZW4gSVB2NiBleHRlbnNpb24gaGVhZGVyXFxuIDI1MTpcXHQgKiBpcyB1bmV4cGVjdGVkbHkgZW5jb3VudGVyZWQuIChUd28gZGVzdGluYXRpb24gb3B0aW9ucyBoZWFkZXJzIG1heSBiZVxcbiAyNTI6XFx0ICogZXhwZWN0ZWQgYW5kIHdvdWxkIG5vdCBjYXVzZSB0aGlzIGJpdCB0byBiZSBzZXQuKVxcbiAyNTM6XFx0ICpcXG4gMjU0OlxcdCAqIE9GUElFSDEyX1VOU0VRIGlzIHNldCBpZiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHdlcmUgbm90IGluIHRoZSBvcmRlclxcbiAyNTU6XFx0ICogcHJlZmVycmVkIChidXQgbm90IHJlcXVpcmVkKSBieSBSRkMgMjQ2MDpcXG4gMjU2OlxcdCAqXFxuIDI1NzpcXHQgKiBXaGVuIG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uIGhlYWRlciBpcyB1c2VkIGluIHRoZSBzYW1lIHBhY2tldCwgaXQgaXNcXG4gMjU4OlxcdCAqIHJlY29tbWVuZGVkIHRoYXQgdGhvc2UgaGVhZGVycyBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcXG4gMjU5OlxcdCAqICAgICAgSVB2NiBoZWFkZXJcXG4gMjYwOlxcdCAqICAgICAgSG9wLWJ5LUhvcCBPcHRpb25zIGhlYWRlclxcbiAyNjE6XFx0ICogICAgICBEZXN0aW5hdGlvbiBPcHRpb25zIGhlYWRlclxcbiAyNjI6XFx0ICogICAgICBSb3V0aW5nIGhlYWRlclxcbiAyNjM6XFx0ICogICAgICBGcmFnbWVudCBoZWFkZXJcXG4gMjY0OlxcdCAqICAgICAgQXV0aGVudGljYXRpb24gaGVhZGVyXFxuIDI2NTpcXHQgKiAgICAgIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCBoZWFkZXJcXG4gMjY2OlxcdCAqICAgICAgRGVzdGluYXRpb24gT3B0aW9ucyBoZWFkZXJcXG4gMjY3OlxcdCAqICAgICAgdXBwZXItbGF5ZXIgaGVhZGVyXFxuIDI2ODpcXHQgKi9cXG4gMjY5OlxcdHN0YXRpYyB2b2lkIGdldF9pcHY2X2V4dF9oZHJzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyICpuaCxcXG4gMjcwOlxcdFxcdFxcdFxcdCAgICAgIHUxNiAqZXh0X2hkcnMpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHR1OCBuZXh0X3R5cGUgPSBuaC1cXHUwMDNlbmV4dGhkcjtcXG4gMjczOlxcdFxcdHVuc2lnbmVkIGludCBzdGFydCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gMjc0OlxcdFxcdGludCBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID0gMDtcXG4gMjc1OlxcdFxcbiAyNzY6XFx0XFx0KmV4dF9oZHJzID0gMDtcXG4gMjc3OlxcdFxcbiAyNzg6XFx0XFx0d2hpbGUgKGlwdjZfZXh0X2hkcihuZXh0X3R5cGUpKSB7XFxuIDI3OTpcXHRcXHRcXHRzdHJ1Y3QgaXB2Nl9vcHRfaGRyIF9oZHIsICpocDtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0XFx0c3dpdGNoIChuZXh0X3R5cGUpIHtcXG4gMjgyOlxcdFxcdFxcdGNhc2UgSVBQUk9UT19OT05FOlxcbiAyODM6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcXG4gMjg0OlxcdFxcdFxcdFxcdC8qIHN0b3AgcGFyc2luZyAqL1xcbiAyODU6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRjYXNlIElQUFJPVE9fRVNQOlxcbiAyODg6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0VTUClcXG4gMjg5OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMjkwOlxcdFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbiAyOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfQVVUSCB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMjkzOlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMjk1OlxcdFxcdFxcdFxcdH1cXG4gMjk2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9FU1A7XFxuIDI5NzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0FIOlxcbiAzMDA6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0FVVEgpXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDMwMjpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2XFxuIDMwMzpcXHRcXHRcXHRcXHQgICAgIH4oT0ZQSUVIMTJfSE9QIHwgT0ZQSUVIMTJfREVTVCB8IE9GUElFSDEyX1JPVVRFUiB8XFxuIDMwNDpcXHRcXHRcXHRcXHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMzA1OlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMzA2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMzA3OlxcdFxcdFxcdFxcdH1cXG4gMzA4OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9BVVRIO1xcbiAzMDk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdGNhc2UgSVBQUk9UT19EU1RPUFRTOlxcbiAzMTI6XFx0XFx0XFx0XFx0aWYgKGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgPT0gMCkge1xcbiAzMTM6XFx0XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2XFxuIDMxNDpcXHRcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9VTlJFUCkpXFxuIDMxNTpcXHRcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDMxNjpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfREVTVDtcXG4gMzE3OlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCA9PSAxKSB7XFxuIDMxODpcXHRcXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjZcXG4gMzE5OlxcdFxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbiAzMjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgT0ZQSUVIMTJfUk9VVEVSIHwgT0ZQSUVIMTJfRlJBRyB8XFxuIDMyMTpcXHRcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIE9GUElFSDEyX1VOUkVQKSkge1xcbiAzMjM6XFx0XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzMjQ6XFx0XFx0XFx0XFx0XFx0fVxcbiAzMjU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMzI2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzI3OlxcdFxcdFxcdFxcdH1cXG4gMzI4OlxcdFxcdFxcdFxcdGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQrKztcXG4gMzI5OlxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMC4wMDY1NDY0ODVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMyMzM0Mzc0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9pcHY2X2V4dF9oZHJzYCBhbmQgSXRzIENhbGwgU2l0ZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgaW1wYWN0IG9mIGBnZXRfaXB2Nl9leHRfaGRyc2AgbW9yZSB0aG9yb3VnaGx5LiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBjYW4ndCBqdXN0IGlzb2xhdGUgaXQ7IEkgbmVlZCB0byBmb2xsb3cgdGhlIGRhdGEuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBlbHNlIGlzIHRoaXMgdXNlZD9cIiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSBhbGwgdGhlIGNhbGwgc2l0ZXMuIEkgd2FudCB0byBrbm93IGFsbCB0aGUgaW5wdXRzIGFuZCB1c2UtY2FzZXMgdGhhdCBkZXBlbmQgb24gdGhpcyBmdW5jdGlvbiwgdGhlIHBvc3NpYmxlIGVycm9ycywgYW5kIGFsbCB0aGUgcGF0aHMgdGhyb3VnaCB0aGUgY29kZS4gVGhhdOKAmXMgaG93IEkgY2FuIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IsIGFuZCBldmFsdWF0ZSBhbnkgcG90ZW50aWFsIHByb2JsZW1zLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZXJlJ3MgYW4gYXJlYSBJIHNob3VsZCBiZSBmb2N1c2VkIG9uLCBvciBpZiB0aGVyZSBpcyBhIG1vcmUgZWZmaWNpZW50IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDUyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozMi4zMjk4OTMzMzZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzMwOlxcdFxcbiAzMzE6XFx0XFx0XFx0Y2FzZSBJUFBST1RPX0ZSQUdNRU5UOlxcbiAzMzI6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0ZSQUcpXFxuIDMzMzpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxuIDMzNDpcXHRcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG4gMzM1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0RFU1QgfFxcbiAzMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHxcXG4gMzM3OlxcdFxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1VOUkVQKSkgfHxcXG4gMzM4OlxcdFxcdFxcdFxcdCAgICBkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50IFxcdTAwM2U9IDIpIHtcXG4gMzM5OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG4gMzQwOlxcdFxcdFxcdFxcdH1cXG4gMzQxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9GUkFHO1xcbiAzNDI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM0MzpcXHRcXG4gMzQ0OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19ST1VUSU5HOlxcbiAzNDU6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX1JPVVRFUilcXG4gMzQ2OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzQ3OlxcdFxcdFxcdFxcdGlmICgoKmV4dF9oZHJzIFxcdTAwMjYgfihPRlBJRUgxMl9IT1AgfFxcbiAzNDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfREVTVCB8XFxuIDM0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxuIDM1MDpcXHRcXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxuIDM1MTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxuIDM1MjpcXHRcXHRcXHRcXHR9XFxuIDM1MzpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfUk9VVEVSO1xcbiAzNTQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxcbiAzNTc6XFx0XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0hPUClcXG4gMzU4OlxcdFxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG4gMzU5OlxcdFxcdFxcdFxcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2NlxcbiAzNjA6XFx0XFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpcyBwcmVzZW50IGFzIHRoZSBmaXJzdFxcbiAzNjE6XFx0XFx0XFx0XFx0ICogZXh0ZW5zaW9uIGhlYWRlciBpbiB0aGUgcGFja2V0LlxcbiAzNjI6XFx0XFx0XFx0XFx0ICovXFxuIDM2MzpcXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzID09IDApXFxuIDM2NDpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfSE9QO1xcbiAzNjU6XFx0XFx0XFx0XFx0ZWxzZVxcbiAzNjY6XFx0XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbiAzNjc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM2ODpcXHRcXG4gMzY5OlxcdFxcdFxcdGRlZmF1bHQ6XFxuIDM3MDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuIDM3MTpcXHRcXHRcXHR9XFxuIDM3MjpcXHRcXG4gMzczOlxcdFxcdFxcdGhwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc3RhcnQsIHNpemVvZihfaGRyKSwgXFx1MDAyNl9oZHIpO1xcbiAzNzQ6XFx0XFx0XFx0aWYgKCFocClcXG4gMzc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAzNzY6XFx0XFx0XFx0bmV4dF90eXBlID0gaHAtXFx1MDAzZW5leHRoZHI7XFxuIDM3NzpcXHRcXHRcXHRzdGFydCArPSBpcHY2X29wdGxlbihocCk7XFxuIDM3ODpcXHRcXHR9XFxuIDM3OTpcXHR9XFxuIDM4MDpcXHRcXG4gMzgxOlxcdHN0YXRpYyBpbnQgcGFyc2VfaXB2NmhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gMzgyOlxcdHtcXG4gMzgzOlxcdFxcdHVuc2lnbmVkIHNob3J0IGZyYWdfb2ZmO1xcbiAzODQ6XFx0XFx0dW5zaWduZWQgaW50IHBheWxvYWRfb2ZzID0gMDtcXG4gMzg1OlxcdFxcdHVuc2lnbmVkIGludCBuaF9vZnMgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTtcXG4gMzg2OlxcdFxcdHVuc2lnbmVkIGludCBuaF9sZW47XFxuIDM4NzpcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqbmg7XFxuIDM4ODpcXHRcXHRpbnQgZXJyLCBuZXh0aGRyLCBmbGFncyA9IDA7XFxuIDM4OTpcXHRcXG4gMzkwOlxcdFxcdGVyciA9IGNoZWNrX2hlYWRlcihza2IsIG5oX29mcyArIHNpemVvZigqbmgpKTtcXG4gMzkxOlxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bmggPSBpcHY2X2hkcihza2IpO1xcbiAzOTU6XFx0XFxuIDM5NjpcXHRcXHRnZXRfaXB2Nl9leHRfaGRycyhza2IsIG5oLCBcXHUwMDI2a2V5LVxcdTAwM2VpcHY2LmV4dGhkcnMpO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRrZXktXFx1MDAzZWlwLnByb3RvID0gTkVYVEhEUl9OT05FO1xcbiAzOTk6XFx0XFx0a2V5LVxcdTAwM2VpcC50b3MgPSBpcHY2X2dldF9kc2ZpZWxkKG5oKTtcXG4gNDAwOlxcdFxcdGtleS1cXHUwMDNlaXAudHRsID0gbmgtXFx1MDAzZWhvcF9saW1pdDtcXG4gNDAxOlxcdFxcdGtleS1cXHUwMDNlaXB2Ni5sYWJlbCA9ICooX19iZTMyICopbmggXFx1MDAyNiBodG9ubChJUFY2X0ZMT1dJTkZPX0ZMT1dMQUJFTCk7XFxuIDQwMjpcXHRcXHRrZXktXFx1MDAzZWlwdjYuYWRkci5zcmMgPSBuaC1cXHUwMDNlc2FkZHI7XFxuIDQwMzpcXHRcXHRrZXktXFx1MDAzZWlwdjYuYWRkci5kc3QgPSBuaC1cXHUwMDNlZGFkZHI7XFxuIDQwNDpcXHRcXG4gNDA1OlxcdFxcdG5leHRoZHIgPSBpcHY2X2ZpbmRfaGRyKHNrYiwgXFx1MDAyNnBheWxvYWRfb2ZzLCAtMSwgXFx1MDAyNmZyYWdfb2ZmLCBcXHUwMDI2ZmxhZ3MpO1xcbiA0MDY6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVA2X0ZIX0ZfRlJBRykge1xcbiA0MDc6XFx0XFx0XFx0aWYgKGZyYWdfb2ZmKSB7XFxuIDQwODpcXHRcXHRcXHRcXHRrZXktXFx1MDAzZWlwLmZyYWcgPSBPVlNfRlJBR19UWVBFX0xBVEVSO1xcbiA0MDk6XFx0XFx0XFx0XFx0a2V5LVxcdTAwM2VpcC5wcm90byA9IE5FWFRIRFJfRlJBR01FTlQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE4OjM4OjMyLjMzMDAwMzIyNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjcwOTU4MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0IGFwcGVhcnMgd2UncmUgcmVmaW5pbmcgdGhlIHdheSBPcGVuIHZTd2l0Y2ggaGFuZGxlcyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZmxvdy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb24gY2hlY2tpbmcgZm9yIGhlYWRlciB0eXBlcy5cblxuSSBjYW4gc2VlIHRoZSBjaGFuZ2UgaW52b2x2ZXMgcmVwbGFjaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCB3aXRoIGBPRlBJRUgxMl9GUkFHYCBpbiB0aGUgYml0bWFzayB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVyIHNlcXVlbmNlIGlzIHZhbGlkIGFuZCB1bnNlcXVlbmNlZC4gVGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHNlZW1zIHRvIGJlIGFib3V0IGlkZW50aWZ5aW5nIFwidW5yZWNvZ25pemVkXCIgb3IgcG90ZW50aWFsbHkgbWFsZm9ybWVkIGV4dGVuc2lvbiBoZWFkZXIgc2VxdWVuY2VzLiBUaGUgY29kZSBmbGFncyBhIHNlcmllcyBvZiBiaXR3aXNlIG9wZXJhdGlvbnMgb24gYGV4dF9oZHJzYCwgdGhlIG1haW4gdmFyaWFibGUgdXNlZCB0byBlbmNvZGUgd2hpY2ggaGVhZGVycyBhcmUgcHJlc2VudC5cblxuTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGFkanVzdG1lbnQgaXMgbGlrZWx5IGEgYnVnIGZpeCBvciBpbXByb3ZlbWVudCBpbiBpZGVudGlmeWluZyB0aGUgdmFsaWQgaGVhZGVyIHR5cGVzLiBJdCdzIHBvc3NpYmxlIHRoZSBvcmlnaW5hbCBjaGVjayB3YXMgb3Zlcmx5IHJlc3RyaWN0aXZlIG9yIHBvdGVudGlhbGx5IGluY29ycmVjdCB3aXRoIHJlc3BlY3QgdG8gdGhlIE9wZW5GbG93IHNwZWNpZmljYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgT0ZQSUVIMTJfRlJBR2AgbGlrZWx5IGNsYXJpZmllcyB0aGUgaW50ZW50aW9uIHRvIHRyZWF0IGZyYWdtZW50IGhlYWRlcnMgaW4gYSBzcGVjaWZpYyB3YXkgd2l0aGluIHRoaXMgZmxvdyBwcm9jZXNzaW5nIGNvbnRleHQuIFRoZSBsb2dpYyBmb3IgYE9GUElFSDEyX1VOUkVQYCBhbmQgYE9GUElFSDEyX1VOU0VRYCBzZWVtIHRvIGJlIGltcG9ydGFudCB0byBob3cgT1ZTIGhhbmRsZXMgZnJhZ21lbnRlZCB0cmFmZmljIGFuZCBtYWxmb3JtZWQgcGFja2V0cy5cblxuQmVmb3JlIEkgc2lnbiBvZmYgb24gdGhpcywgSSdsbCBkZWZpbml0ZWx5IHdhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBkZWZpbml0aW9ucyBvZiBgT0ZQSUVIMTJfKmAgY29uc3RhbnRzIGFuZCBgSVBQUk9UT19GUkFHTUVOVGAgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBpcyBzZW1hbnRpY2FsbHkgc291bmQgYW5kIGFsaWducyB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvciBvZiBJUHY2IGZyYWdtZW50IGhhbmRsaW5nIGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGVkZ2UgY2FzZXMgb3IgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MjUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozNi42MDA5NjUxMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODc0MDE5MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0ZQSUVIMTJfXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93LmM9MjM3PXN0YXRpYyBib29sIGljbXBoZHJfb2soc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjQ5LSAqXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyNTA6ICogT0ZQSUVIMTJfVU5SRVAgaXMgc2V0IGlmIG1vcmUgdGhhbiBvbmUgb2YgYSBnaXZlbiBJUHY2IGV4dGVuc2lvbiBoZWFkZXJcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1MS0gKiBpcyB1bmV4cGVjdGVkbHkgZW5jb3VudGVyZWQuIChUd28gZGVzdGluYXRpb24gb3B0aW9ucyBoZWFkZXJzIG1heSBiZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yNTMtICpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI1NDogKiBPRlBJRUgxMl9VTlNFUSBpcyBzZXQgaWYgSVB2NiBleHRlbnNpb24gaGVhZGVycyB3ZXJlIG5vdCBpbiB0aGUgb3JkZXJcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI1NS0gKiBwcmVmZXJyZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5IFJGQyAyNDYwOlxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYz0yNjk9c3RhdGljIHZvaWQgZ2V0X2lwdjZfZXh0X2hkcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwdjZoZHIgKm5oLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yODItXFx0XFx0Y2FzZSBJUFBST1RPX05PTkU6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyODM6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX05PTkVYVDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI4NC1cXHRcXHRcXHQvKiBzdG9wIHBhcnNpbmcgKi9cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjg3LVxcdFxcdGNhc2UgSVBQUk9UT19FU1A6XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyODg6XFx0XFx0XFx0aWYgKCpleHRfaGRycyBcXHUwMDI2IE9GUElFSDEyX0VTUClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjI4OTpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTA6XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX0RFU1QgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkxOlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX1JPVVRFUiB8IE9GUElFSDEyX0ZSQUcgfFxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MjkyOlxcdFxcdFxcdFxcdFxcdCAgIE9GUElFSDEyX0FVVEggfCBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0yOTMtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6Mjk0OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5NS1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzoyOTY6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0VTUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTI5Ny1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMjk5LVxcdFxcdGNhc2UgSVBQUk9UT19BSDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMDpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfQVVUSClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwMTpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMDItXFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzAzOlxcdFxcdFxcdCAgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHwgT0ZQSUVIMTJfUk9VVEVSIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwNDpcXHRcXHRcXHQgICAgICAgT0ZQSUVIMTJfRlJBRyB8IE9GUElFSDEyX1VOUkVQKSkgfHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwNS1cXHRcXHRcXHQgICAgZGVzdF9vcHRpb25zX2hlYWRlcl9jb3VudCBcXHUwMDNlPSAyKSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMDY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOU0VRO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzA3LVxcdFxcdFxcdH1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMwODpcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfQVVUSDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMwOS1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzEzLVxcdFxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzE0OlxcdFxcdFxcdFxcdCAgICB+KE9GUElFSDEyX0hPUCB8IE9GUElFSDEyX1VOUkVQKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxNTpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMTY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0RFU1Q7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMTctXFx0XFx0XFx0fSBlbHNlIGlmIChkZXN0X29wdGlvbnNfaGVhZGVyX2NvdW50ID09IDEpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTMxOC1cXHRcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjZcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMxOTpcXHRcXHRcXHRcXHQgICAgfihPRlBJRUgxMl9IT1AgfCBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMDpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9ST1VURVIgfCBPRlBJRUgxMl9GUkFHIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMTpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9BVVRIIHwgT0ZQSUVIMTJfRVNQIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMjpcXHRcXHRcXHRcXHQgICAgICBPRlBJRUgxMl9VTlJFUCkpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMyMzpcXHRcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMjQtXFx0XFx0XFx0XFx0fVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI1LVxcdFxcdFxcdH0gZWxzZSB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMjY6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzI3LVxcdFxcdFxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzMxLVxcdFxcdGNhc2UgSVBQUk9UT19GUkFHTUVOVDpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMjpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfRlJBRylcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzMzpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5SRVA7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzQ6XFx0XFx0XFx0aWYgKCgqZXh0X2hkcnMgXFx1MDAyNiB+KE9GUElFSDEyX0hPUCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzU6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfREVTVCB8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozMzY6XFx0XFx0XFx0XFx0XFx0ICAgT0ZQSUVIMTJfUk9VVEVSIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjMzNzpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zMzgtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzM5OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0MC1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNDE6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX0ZSQUc7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNDItXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM0NC1cXHRcXHRjYXNlIElQUFJPVE9fUk9VVElORzpcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NTpcXHRcXHRcXHRpZiAoKmV4dF9oZHJzIFxcdTAwMjYgT0ZQSUVIMTJfUk9VVEVSKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzQ2OlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlJFUDtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0NzpcXHRcXHRcXHRpZiAoKCpleHRfaGRycyBcXHUwMDI2IH4oT0ZQSUVIMTJfSE9QIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0ODpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9ERVNUIHxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM0OTpcXHRcXHRcXHRcXHRcXHQgICBPRlBJRUgxMl9VTlJFUCkpIHx8XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNTAtXFx0XFx0XFx0ICAgIGRlc3Rfb3B0aW9uc19oZWFkZXJfY291bnQgXFx1MDAzZT0gMikge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzUxOlxcdFxcdFxcdFxcdCpleHRfaGRycyB8PSBPRlBJRUgxMl9VTlNFUTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1Mi1cXHRcXHRcXHR9XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTM6XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1JPVVRFUjtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jLTM1NC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzU2LVxcdFxcdGNhc2UgSVBQUk9UT19IT1BPUFRTOlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzU3OlxcdFxcdFxcdGlmICgqZXh0X2hkcnMgXFx1MDAyNiBPRlBJRUgxMl9IT1ApXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYzozNTg6XFx0XFx0XFx0XFx0KmV4dF9oZHJzIHw9IE9GUElFSDEyX1VOUkVQO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmM6MzU5OlxcdFxcdFxcdC8qIE9GUElFSDEyX0hPUCBpcyBzZXQgdG8gMSBpZiBhIGhvcC1ieS1ob3AgSVB2Nlxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYwLVxcdFxcdFxcdCAqIGV4dGVuc2lvbiBoZWFkZXIgaXMgcHJlc2VudCBhcyB0aGUgZmlyc3RcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzYzLVxcdFxcdFxcdGlmICgqZXh0X2hkcnMgPT0gMClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NDpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfSE9QO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93LmMtMzY1LVxcdFxcdFxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jOjM2NjpcXHRcXHRcXHRcXHQqZXh0X2hkcnMgfD0gT0ZQSUVIMTJfVU5TRVE7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuYy0zNjctXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oPTM2PWVudW0gb2ZwMTJfaXB2NmV4dGhkcl9mbGFncyB7XFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozNzpcXHRPRlBJRUgxMl9OT05FWFQgPSAxIFxcdTAwM2NcXHUwMDNjIDAsICAgLyogXFxcIk5vIG5leHQgaGVhZGVyXFxcIiBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjM4OlxcdE9GUElFSDEyX0VTUCAgICA9IDEgXFx1MDAzY1xcdTAwM2MgMSwgICAvKiBFbmNyeXB0ZWQgU2VjIFBheWxvYWQgaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDozOTpcXHRPRlBJRUgxMl9BVVRIICAgPSAxIFxcdTAwM2NcXHUwMDNjIDIsICAgLyogQXV0aGVudGljYXRpb24gaGVhZGVyIHByZXNlbnQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaDo0MDpcXHRPRlBJRUgxMl9ERVNUICAgPSAxIFxcdTAwM2NcXHUwMDNjIDMsICAgLyogMSBvciAyIGRlc3QgaGVhZGVycyBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDE6XFx0T0ZQSUVIMTJfRlJBRyAgID0gMSBcXHUwMDNjXFx1MDAzYyA0LCAgIC8qIEZyYWdtZW50IGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDI6XFx0T0ZQSUVIMTJfUk9VVEVSID0gMSBcXHUwMDNjXFx1MDAzYyA1LCAgIC8qIFJvdXRlciBoZWFkZXIgcHJlc2VudC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQzOlxcdE9GUElFSDEyX0hPUCAgICA9IDEgXFx1MDAzY1xcdTAwM2MgNiwgICAvKiBIb3AtYnktaG9wIGhlYWRlciBwcmVzZW50LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93Lmg6NDQ6XFx0T0ZQSUVIMTJfVU5SRVAgID0gMSBcXHUwMDNjXFx1MDAzYyA3LCAgIC8qIFVuZXhwZWN0ZWQgcmVwZWF0cyBlbmNvdW50ZXJlZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oOjQ1OlxcdE9GUElFSDEyX1VOU0VRICA9IDEgXFx1MDAzY1xcdTAwM2MgOCAgICAvKiBVbmV4cGVjdGVkIHNlcXVlbmNpbmcgZW5jb3VudGVyZWQuICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3cuaC00Ni19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODozOC44ODgzNzE5NDVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDgyNDYzMTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTdWJ0bGUgQnVnIEZpeCBpbiBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2UsIGJ1dCBJIGFsd2F5cyB3YW50IHRvIGJlIHRob3JvdWdoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGEgdHlwbyBmaXghXCIgIFRoZSBhdXRob3Igd2FzIHVzaW5nIGBJUFBST1RPX0ZSQUdNRU5UYCAod2hpY2gsIGxldCdzIHNlZSwgaXMgYDQ0YCwgcmVwcmVzZW50aW5nIGEgY29tYmluYXRpb24gb2YgYml0cyBpbiBhIGJpdG1hc2spIHdoZXJlIHRoZXkgc2hvdWxkIGhhdmUgYmVlbiB1c2luZyBgT0ZQSUVIMTJfRlJBR2AgKHdoaWNoIGlzIGAxIFx1MDAzY1x1MDAzYyA0YCwgb3IgYDE2YCkuIFRoZSBjb2RlJ3MgaW4gYGdldF9pcHY2X2V4dF9oZHJzYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYElQUFJPVE9fRVNQYCBhbmQgYElQUFJPVE9fQUhgIGNhc2VzLiBJdCdzIGEgYml0bWFzayBjYWxjdWxhdGlvbiwgYW5kIHRoZXkncmUgdXNpbmcgYSBwcm90b2NvbCBudW1iZXIgaW5zdGVhZCBvZiBhIGZsYWcuIENsYXNzaWMgZXJyb3IuXG5cbk5vdywgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiAgSXMgdGhpcyBqdXN0IGEgbG9naWMgZXJyb3IsIG9yIGRvZXMgaXQgaGF2ZSBkZWVwZXIgaW1wbGljYXRpb25zPyBJcyB0aGVyZSBhIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSBvZiB0aGlzIHR5cG8/IEkgbmVlZCB0byBydWxlIHRoYXQgb3V0IGltbWVkaWF0ZWx5LiBJJ20gdGhpbmtpbmcgYWJvdXQgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBhbmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikuIFdoYXQgdHJpZ2dlcnMgdGhlc2U/XG5cbiogICBJIGNoZWNrOiBEb2VzIHRoZSBwYXRjaCBhbHRlciBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy9maWVsZHM/IE5vcGUuIE5vdCByZWxldmFudCBoZXJlLlxuKiAgIERvZXMgaXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBObywgYmVjYXVzZSBgKmV4dF9oZHJzYCBpcyBpbml0aWFsaXplZCB0byBgMGAgYmVmb3JlaGFuZC4gIExpbmUgMjc2LiBHb29kLlxuKiAgIERvZXMgaXQgYWxsb2NhdGUvaW5pdGlhbGl6ZSBjb21wbGV4IHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQ/IE5vcGUsIGRvZXNuJ3QgYXBwZWFyIHNvLlxuKiAgIERvZXMgaXQgYWx0ZXIgYm91bmRzIGNoZWNrcy9sZW5ndGhzIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBsb29rcyBsaWtlIGl0IGlzIHNhZmUuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBiaXR3aXNlIGZsYWcgbWFuaXB1bGF0aW9uIGZvciBtYXRjaGluZyBPcGVuRmxvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHJlbGF0ZWQgdG8gdGhlIHNlcXVlbmNpbmcgZmxhZyAoYE9GUElFSDEyX1VOU0VRYCkuIFNvLCB0aGlzIGlzIGEgY2xlYW4sIHNpbXBsZSBidWcgZml4LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgYWJzb2x1dGVseSBmYWxzZS4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBjb3JyZWN0aW9uLlxuXG5Pa2F5LCBJJ3ZlIGNvbmZpcm1lZCBteSBhbmFseXNpcy4gVGltZSB0byBmaW5hbGl6ZSB0aGUgcmVzcG9uc2UgYW5kIHVzZSBgc2V0LXJlc3VsdHNgIHRvb2wsIHByb3ZpZGluZyBhIGNsZWFyIGFuZCBjb25jaXNlIGV4cGxhbmF0aW9uIGZvciB0aGUgbWFpbnRhaW5lcnMsIHNvIHRoZXkgY2FuIGFkZHJlc3MgdGhpcyBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxODozODo0My43MTMwMDc4MTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdHlwbyBpbiBPcGVuIHZTd2l0Y2ggSVB2NiBleHRlbnNpb24gaGVhZGVyIHBhcnNpbmcgKGBnZXRfaXB2Nl9leHRfaGRyc2ApLCB3aGVyZSB0aGUgcHJvdG9jb2wgbnVtYmVyIGBJUFBST1RPX0ZSQUdNRU5UYCB3YXMgbWlzdGFrZW5seSB1c2VkIGluIGJpdG1hc2sgY2hlY2tzIGluc3RlYWQgb2YgdGhlIGJpdGZsYWcgYE9GUElFSDEyX0ZSQUdgLlxcblxcbkFsbCB2YXJpYWJsZXMgYW5kIGJpdGZpZWxkcyBpbnZvbHZlZCAoYCpleHRfaGRyc2ApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHBhcnNpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBjb3BpZXMgdG8gdXNlcnNwYWNlLCBvciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHR5cG8gaW4gT3BlbiB2U3dpdGNoIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBwYXJzaW5nIChgZ2V0X2lwdjZfZXh0X2hkcnNgKSwgd2hlcmUgdGhlIHByb3RvY29sIG51bWJlciBgSVBQUk9UT19GUkFHTUVOVGAgd2FzIG1pc3Rha2VubHkgdXNlZCBpbiBiaXRtYXNrIGNoZWNrcyBpbnN0ZWFkIG9mIHRoZSBiaXRmbGFnIGBPRlBJRUgxMl9GUkFHYC5cXG5cXG5BbGwgdmFyaWFibGVzIGFuZCBiaXRmaWVsZHMgaW52b2x2ZWQgKGAqZXh0X2hkcnNgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byB6ZXJvIGJlZm9yZSBwYXJzaW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uLCBidWZmZXIgbGVuZ3RocywgY29waWVzIHRvIHVzZXJzcGFjZSwgb3IgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[1] Phase: Succeeded StartedAt: 2026-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 18:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 18:38:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2] Phase: Succeeded StartedAt: 2026-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 18:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:38:54 +0000 UTC FinishedAt: 2026-09-08 18:38:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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-workflow5t285/series-workflow5t285-convert-artifact-312579472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:39:04 +0000 UTC FinishedAt: 2026-09-08 18:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:39:04 +0000 UTC FinishedAt: 2026-09-08 18:56:14 +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:*5d1dff3a-0a9d-46d6-8ec7-1f2d4dd8bf55,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-workflow5t285/series-workflow5t285-convert-artifact-312579472/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": "8f147b26-46c2-416a-8db8-3b4f94519021", "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-workflow5t285/series-workflow5t285-build-action-155890198/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:39:04 +0000 UTC FinishedAt: 2026-09-08 18:56:04 +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:*5d1dff3a-0a9d-46d6-8ec7-1f2d4dd8bf55,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-workflow5t285/series-workflow5t285-convert-artifact-312579472/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": "8f147b26-46c2-416a-8db8-3b4f94519021", "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-workflow5t285/series-workflow5t285-build-action-155890198/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:14 +0000 UTC FinishedAt: 2026-09-08 18:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:14 +0000 UTC FinishedAt: 2026-09-08 18:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:14 +0000 UTC FinishedAt: 2026-09-08 18:56:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:14 +0000 UTC FinishedAt: 2026-09-08 18:56:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-workflow5t285/series-workflow5t285-convert-artifact-611973367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:24 +0000 UTC FinishedAt: 2026-09-08 18:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:56:24 +0000 UTC FinishedAt: 2026-09-08 18:57:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f147b26-46c2-416a-8db8-3b4f94519021,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-workflow5t285/series-workflow5t285-build-action-155890198/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-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:58:02 +0000 UTC FinishedAt: 2026-09-08 18:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:58:02 +0000 UTC FinishedAt: 2026-09-08 18:58:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:58:02 +0000 UTC FinishedAt: 2026-09-08 19:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:58:02 +0000 UTC FinishedAt: 2026-09-08 19:15:01 +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:*5d1dff3a-0a9d-46d6-8ec7-1f2d4dd8bf55,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-workflow5t285/series-workflow5t285-convert-artifact-611973367/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": "571fdeb1-9557-420a-a8aa-1f3dde432f1f", "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-workflow5t285/series-workflow5t285-build-action-4093823931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 18:58:02 +0000 UTC FinishedAt: 2026-09-08 19:14:51 +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:*5d1dff3a-0a9d-46d6-8ec7-1f2d4dd8bf55,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-workflow5t285/series-workflow5t285-convert-artifact-611973367/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": "571fdeb1-9557-420a-a8aa-1f3dde432f1f", "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-workflow5t285/series-workflow5t285-build-action-4093823931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:15:01 +0000 UTC FinishedAt: 2026-09-08 19:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:15:01 +0000 UTC FinishedAt: 2026-09-08 19:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:15:01 +0000 UTC FinishedAt: 2026-09-08 19:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:15:01 +0000 UTC FinishedAt: 2026-09-08 19:16:43 +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:*571fdeb1-9557-420a-a8aa-1f3dde432f1f,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-workflow5t285/series-workflow5t285-build-action-4093823931/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-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"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:*8f147b26-46c2-416a-8db8-3b4f94519021,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*571fdeb1-9557-420a-a8aa-1f3dde432f1f,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-workflow5t285/series-workflow5t285-build-action-155890198/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-workflow5t285/series-workflow5t285-build-action-4093823931/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 19:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 19:17:00 +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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"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-workflow5t285/series-workflow5t285-convert-artifact-821249328/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 19:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 19:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:16:53 +0000 UTC FinishedAt: 2026-09-08 19:16:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:17:03 +0000 UTC FinishedAt: 2026-09-08 22:18:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5t285[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"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":["get_ipv6_ext_hdrs","parse_ipv6hdr","ovs_flow_key_extract","ovs_flow_key_extract_userspace"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e0554c6276da957b6e72849520c70a97404cd1ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH","IPV6"],"series_id":"00c1dbb2-aad6-47c8-ad80-50869f01b0b2","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-09-08 19:17:03 +0000 UTC FinishedAt: 2026-09-08 22:18:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f147b26-46c2-416a-8db8-3b4f94519021,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*571fdeb1-9557-420a-a8aa-1f3dde432f1f,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-workflow5t285/series-workflow5t285-build-action-155890198/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-workflow5t285/series-workflow5t285-build-action-4093823931/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-workflow5t285/series-workflow5t285-convert-artifact-821249328/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,}