Name: series-workflowtwm4q Phase: Succeeded StartedAt: 2026-09-01 19:11:16 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[0] Phase: Succeeded StartedAt: 2026-09-01 19:11:16 +0000 UTC FinishedAt: 2026-09-01 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 19:11:16 +0000 UTC FinishedAt: 2026-09-01 19:45:14 +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": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "a45a0cc4-0774-4485-bed6-acba6763e760" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_sendmsg", "xsk_destruct_skb", "xsk_bind", "xsk_setsockopt", "xsk_poll" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTI5MzllOTBhMWI3YTVkNmI0NzNhNzAxZDI2YjY4MjQyZDMzMmIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOToyOTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC05NDcsNiAmIzQzOzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcbiBcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYmluZCYjMzQ7LAogICAgJiMzNDt4c2tfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt4c2tfcG9sbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTI5MzllOTBhMWI3YTVkNmI0NzNhNzAxZDI2YjY4MjQyZDMzMmIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAxOToyOTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiB7CiAJaW50IGVycjsKIAomIzQzOwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKIAllcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OAoJCQkJCQkJb3V0cHV0OiA5OAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBYU0sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3hkcC94c2suY2AuIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGFkZGl0aW9uOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYHhza19za2JfaW5pdF9taXNjYCBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB3aGVyZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoaXMgbW9kdWxlLiBXaGF04oCZcyBpdHMgb3ZlcmFsbCBwdXJwb3NlIGluIHRoZSBYRFAvQUZfWERQIGxpZmVjeWNsZT8gR2l2ZW4gdGhpcyBhZGRpdGlvbiwgd2hhdCBpcyB0aGUgKnJlYXNvbiogZm9yIG5lZWRpbmcgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIGF0IHRoaXMgc3RhZ2U/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcGFja2V0IHByb2Nlc3Npbmcgb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIGJ1ZyBmaXggb3Igc2VjdXJpdHkgY29uY2VybiB0aGlzIGFkZHJlc3Nlcz8KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZTogd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIEFGX1hEUD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgb3B0aW9ucyBvciBidWlsZCBmbGFncyB0aGF0IGluZmx1ZW5jZSBob3cgdGhpcyBjb2RlIGJlaGF2ZXM/IEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IGtlcm5lbCBtb2R1bGVzIG9yIGZlYXR1cmVzIHJlbGF0ZWQgdG8gQUZfWERQIGFyZSBsb2FkaW5nLCBvciBub3QsIHdoZW4gSSBleHBlY3QgdGhlbSB0byBiZS4KCkZpbmFsbHksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCB3aGF0IGlzIGhhcHBlbmluZyBfYmVmb3JlXyB0aGlzIGFuZCBfYWZ0ZXJfIHRoaXM/IFRoYXQmIzM5O3MgZXNzZW50aWFsIHRvIGdyYXNwIHRoZSAqd2h5Ki4gSWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGZvcm1pbmcgYSBjb2hlcmVudCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgc21hbGwgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBhbmQgcGFja2V0IGZsb3cgd2l0aGluIFhEUC4gSSYjMzk7bGwgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHRvIHNlZSB0aGUgaW1tZWRpYXRlIGVmZmVjdCwgYW5kIHRoZSBsb25nZXItdGVybSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcbiA5MzE6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuIDkzMjpcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkzMzpcdHtcbiA5MzQ6XHRcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhza19tZXRhO1xuIDkzNTpcdFxuIDkzNjpcdFx0aWYgKGNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCkge1xuIDkzNzpcdFx0XHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cbiA5Mzg6XHRcdFx0KmNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCA9IGt0aW1lX2dldF90YWlfZmFzdF9ucygpO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2Vwb29sLCBza2IpO1xuIDk0MjpcdFx0c29ja193ZnJlZShza2IpO1xuIDk0MzpcdH1cbiA5NDQ6XHRcbiA5NDU6XHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gOTQ2Olx0XHRcdFx0ICAgICB1NjQgYWRkcilcbiA5NDc6XHR7XG4gOTQ4Olx0XHRpbnQgZXJyO1xuIDk0OTpcdFxuIDk1MDpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gOTUxOlx0XG4gOTUyOlx0XHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiA5NTM6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDk1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDk1NTpcdFxuIDk1NjpcdFx0c2tiLVx1MDAzZWRldiA9IHhzLVx1MDAzZWRldjtcbiA5NTc6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19wcmlvcml0eSk7XG4gOTU4Olx0XHRza2ItXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19tYXJrKTtcbiA5NTk6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcbiA5NjA6XHRcdHJldHVybiAwO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NjQ6XHR7XG4gOTY1Olx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4gOTY2Olx0XHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk2NzpcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4gOTY4Olx0XG4gOTY5Olx0XHRpZiAodW5saWtlbHkoIXhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHNrYikpKSB7XG4gOTcwOlx0XHRcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4gOTcxOlx0XHRcdGttZW1fY2FjaGVfZnJlZSh4c2tfdHhfZ2VuZXJpY19jYWNoZSwgeHNrX2FkZHIpO1xuIDk3MjpcdFx0fVxuIDk3MzpcdFxuIDk3NDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3dmcmVlO1xuIDk3NTpcdFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcbiA5NzY6XHRcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXG4gOTc3Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDk3ODpcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiA5Nzk6XHR9XG4gOTgwOlx0XG4gOTgxOlx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTgyOlx0e1xuIDk4MzpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk4NDpcdFxuIDk4NTpcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk4NjpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5ODc6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTg4Olx0fVxuIDk4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hkcC94c2suYy05NDQtXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTk0Ni1cdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTExODYtXHRpZiAoIXhzLVx1MDAzZXNrYikge1xubmV0L3hkcC94c2suYzoxMTg3Olx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xubmV0L3hkcC94c2suYy0xMTg4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYU0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQwND1zdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDA1LXtcbm5ldC94ZHAveHNrLmM6NDA2Olx0aWYgKFJFQURfT05DRSh4cy1cdTAwM2VzdGF0ZSkgPT0gWFNLX0JPVU5EKSB7XG5uZXQveGRwL3hzay5jLTQwNy1cdFx0LyogTWF0Y2hlcyBzbXBfd21iKCkgaW4gYmluZCgpLiAqL1xuLS1cbm5ldC94ZHAveHNrLmM9NDc3PXN0YXRpYyBpbnQgeHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQveGRwL3hzay5jLTQ4NS1cbm5ldC94ZHAveHNrLmM6NDg2Olx0aWYgKHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCkge1xubmV0L3hkcC94c2suYy00ODctXHRcdGxlbiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhO1xuLS1cbm5ldC94ZHAveHNrLmM9MTQ5Nj1zdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTQ5OS1cbm5ldC94ZHAveHNrLmM6MTUwMDpcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfQk9VTkQpXG5uZXQveGRwL3hzay5jLTE1MDEtXHRcdHJldHVybjtcbm5ldC94ZHAveHNrLmM6MTUwMjpcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19VTkJPVU5EKTtcbm5ldC94ZHAveHNrLmMtMTUwMy1cbi0tXG5uZXQveGRwL3hzay5jPTE2MTY9c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTY0MS1cdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxNjQyOlx0aWYgKHhzLVx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xubmV0L3hkcC94c2suYy0xNjQzLVx0XHRlcnIgPSAtRUJVU1k7XG4tLVxubmV0L3hkcC94c2suYy0xNzk3LVx0XHRzbXBfd21iKCk7XG5uZXQveGRwL3hzay5jOjE3OTg6XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG5uZXQveGRwL3hzay5jLTE3OTktXHR9XG4tLVxubmV0L3hkcC94c2suYz0xODE0PXN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQveGRwL3hzay5jLTE4MzYtXHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxODM3Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG5uZXQveGRwL3hzay5jLTE4MzgtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbi0tXG5uZXQveGRwL3hzay5jLTE4NzQtXHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxODc1Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVx1MDAzZXVtZW0pIHtcbm5ldC94ZHAveHNrLmMtMTg3Ni1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmMtMTkwMy1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jOjE5MDQ6XHRcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbm5ldC94ZHAveHNrLmMtMTkwNS1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmM9MjA4NT1zdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC94ZHAveHNrLmMtMjA5My1cbm5ldC94ZHAveHNrLmM6MjA5NDpcdGlmIChzdGF0ZSAhPSBYU0tfUkVBRFkgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFhTS19CT1VORClcbm5ldC94ZHAveHNrLmMtMjA5NS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQveGRwL3hzay5jLTIxMDQtXHRcdGlmIChvZmZzZXQgPT0gWERQX1VNRU1fUEdPRkZfRklMTF9SSU5HKVxubmV0L3hkcC94c2suYzoyMTA1Olx0XHRcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXHUwMDNlZnFfdG1wKSA6XG5uZXQveGRwL3hzay5jLTIxMDYtXHRcdFx0XHRcdFx0IFJFQURfT05DRSh4cy1cdTAwM2Vwb29sLVx1MDAzZWZxKTtcbm5ldC94ZHAveHNrLmMtMjEwNy1cdFx0ZWxzZSBpZiAob2Zmc2V0ID09IFhEUF9VTUVNX1BHT0ZGX0NPTVBMRVRJT05fUklORylcbm5ldC94ZHAveHNrLmM6MjEwODpcdFx0XHRxID0gc3RhdGUgPT0gWFNLX1JFQURZID8gUkVBRF9PTkNFKHhzLVx1MDAzZWNxX3RtcCkgOlxubmV0L3hkcC94c2suYy0yMTA5LVx0XHRcdFx0XHRcdCBSRUFEX09OQ0UoeHMtXHUwMDNlcG9vbC1cdTAwM2VjcSk7XG4tLVxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQveGRwL3hzay5jLTIyMjItXHR4cyA9IHhkcF9zayhzayk7XG5uZXQveGRwL3hzay5jOjIyMjM6XHR4cy1cdTAwM2VzdGF0ZSA9IFhTS19SRUFEWTtcbm5ldC94ZHAveHNrLmMtMjIyNC1cdHhzLVx1MDAzZW1heF90eF9idWRnZXQgPSBUWF9CQVRDSF9TSVpFO1xuLS1cbm5ldC94ZHAveHNrLmgtMy1cbm5ldC94ZHAveHNrLmg6NDojaWZuZGVmIFhTS19IX1xubmV0L3hkcC94c2suaDo1OiNkZWZpbmUgWFNLX0hfXG5uZXQveGRwL3hzay5oLTYtXG4tLVxubmV0L3hkcC94c2suaD0zOD1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5uZXQveGRwL3hzay5oLTQwLVxubmV0L3hkcC94c2suaDo0MTojZW5kaWYgLyogWFNLX0hfICovXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTQ1PXN0YXRpYyB2b2lkIHhwX2Rpc2FibGVfZHJ2X3pjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTE1Mi1cdGlmIChwb29sLVx1MDAzZXVtZW0tXHUwMDNlemMpIHtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjE1MzpcdFx0YnBmLmNvbW1hbmQgPSBYRFBfU0VUVVBfWFNLX1BPT0w7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0xNTQtXHRcdGJwZi54c2sucG9vbCA9IE5VTEw7XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTY0PWludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTIxMS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjIxMjpcdGlmICgobmV0ZGV2LVx1MDAzZXhkcF9mZWF0dXJlcyBcdTAwMjYgTkVUREVWX1hEUF9BQ1RfWFNLKSAhPSBORVRERVZfWERQX0FDVF9YU0spIHtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTIxMy1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjQyLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MjQzOlx0YnBmLmNvbW1hbmQgPSBYRFBfU0VUVVBfWFNLX1BPT0w7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yNDQtXHRicGYueHNrLnBvb2wgPSBwb29sO1xuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTM4OT1zdGF0aWMgdm9pZCBfX3hwX2RtYV91bm1hcChzdHJ1Y3QgeHNrX2RtYV9tYXAgKmRtYV9tYXAsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMzk2LVx0XHRpZiAoKmRtYSkge1xubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mzk3Olx0XHRcdCpkbWEgXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0zOTgtXHRcdFx0ZG1hX3VubWFwX3BhZ2VfYXR0cnMoZG1hX21hcC1cdTAwM2VkZXYsICpkbWEsIFBBR0VfU0laRSxcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz00MzA9c3RhdGljIHZvaWQgeHBfY2hlY2tfZG1hX2NvbnRpZ3VpdHkoc3RydWN0IHhza19kbWFfbWFwICpkbWFfbWFwKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQzNS1cdFx0aWYgKGRtYV9tYXAtXHUwMDNlZG1hX3BhZ2VzW2ldICYjNDM7IFBBR0VfU0laRSA9PSBkbWFfbWFwLVx1MDAzZWRtYV9wYWdlc1tpICYjNDM7IDFdKVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6NDM2Olx0XHRcdGRtYV9tYXAtXHUwMDNlZG1hX3BhZ2VzW2ldIHw9IFhTS19ORVhUX1BHX0NPTlRJR19NQVNLO1xubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM3LVx0XHRlbHNlXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0Mzg6XHRcdFx0ZG1hX21hcC1cdTAwM2VkbWFfcGFnZXNbaV0gXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00MzktXHR9XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9NzQ5PXN0YXRpYyBkbWFfYWRkcl90IF9feHBfcmF3X2dldF9kbWEoY29uc3Qgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1MS1cdHJldHVybiAocG9vbC1cdTAwM2VkbWFfcGFnZXNbYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVF0gXHUwMDI2XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3NTI6XHRcdH5YU0tfTkVYVF9QR19DT05USUdfTUFTSykgJiM0Mztcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1My1cdFx0KGFkZHIgXHUwMDI2IH5QQUdFX01BU0spO1xuLS1cbm5ldC94ZHAveHNrX2RpYWcuYz05Mj1zdGF0aWMgaW50IHhza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tLVxubmV0L3hkcC94c2tfZGlhZy5jLTExMy1cdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2tfZGlhZy5jOjExNDpcdGlmIChSRUFEX09OQ0UoeHMtXHUwMDNlc3RhdGUpID09IFhTS19VTkJPVU5EKVxubmV0L3hkcC94c2tfZGlhZy5jLTExNS1cdFx0Z290byBvdXRfbmxtc2dfdHJpbTtcbi0tXG5uZXQveGRwL3hza19xdWV1ZS5oLTUtXG5uZXQveGRwL3hza19xdWV1ZS5oOjY6I2lmbmRlZiBfTElOVVhfWFNLX1FVRVVFX0hcbm5ldC94ZHAveHNrX3F1ZXVlLmg6NzojZGVmaW5lIF9MSU5VWF9YU0tfUVVFVUVfSFxubmV0L3hkcC94c2tfcXVldWUuaC04LVxuLS1cbm5ldC94ZHAveHNrX3F1ZXVlLmg9NTM1PXZvaWQgeHNrcV9kZXN0cm95KHN0cnVjdCB4c2tfcXVldWUgKnFfb3BzKTtcbm5ldC94ZHAveHNrX3F1ZXVlLmgtNTM2LVxubmV0L3hkcC94c2tfcXVldWUuaDo1Mzc6I2VuZGlmIC8qIF9MSU5VWF9YU0tfUVVFVUVfSCAqL1xuLS1cbm5ldC94ZHAveHNrbWFwLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L3hkcC94c2ttYXAuYzoyOi8qIFhTS01BUCB1c2VkIGZvciBBRl9YRFAgc29ja2V0c1xubmV0L3hkcC94c2ttYXAuYy0zLSAqIENvcHlyaWdodChjKSAyMDE4IEludGVsIENvcnBvcmF0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjkKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgWERQIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFhEUCwgc3BlY2lmaWNhbGx5IHdoZXJlIGB4c2tfYnVpbGRfc2tiYCBpcyB1c2VkIGFuZCBob3cgYHhzay5jYCBpcyB1bHRpbWF0ZWx5IGNvbXBpbGVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBjYWxscyB0byBgeHNrX2J1aWxkX3NrYmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlcyDigJMgdGhlIGBuZXQveGRwL01ha2VmaWxlYCBhbmQgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgWERQIGNvbXBvbmVudHMgYXJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMuIEkmIzM5O20gaG9waW5nIHRob3NlIHR3byBmaWxlcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBuZWNlc3NhcnkgYnVpbGQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xuICAgMzpcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuICAgNDpcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSAmIzQzOz0geHNrX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZHAvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0xMy1cdGRlZmF1bHQgblxuLS1cbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBYRFAgU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQveGRwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBpbXBsaWNhdGlvbnMgc3Vycm91bmRpbmcgYENPTkZJR19YRFBfU09DS0VUU2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhpcyBpcyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBYRFAgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVmYXVsdHMgb3IgcG90ZW50aWFsbHkgaGlkZGVuIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfWERQX1NPQ0tFVFNgLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgc3VjaCBhcyB0aGUgc29ja2V0LWJhc2VkIFhEUCBpbmZyYXN0cnVjdHVyZSYjMzk7cyBhdmFpbGFiaWxpdHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgcnVudGltZSBkZXBlbmRlbmNpZXMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpbmUtZ3JhaW5lZCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipYRFAgU29ja2V0czogRGVwZW5kZW5jaWVzIGFuZCB0aGUgRGF0YSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWERQIHNvY2tldHMsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19YRFBfU09DS0VUU2Agd29uJiMzOTt0IGJlIGVuYWJsZWQgdW5sZXNzIHdlIGFsc28gaGF2ZSBgQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBCUEYgcGFydCwgbmF0dXJhbGx5KSBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIHdoaWNoIGlzIGBORVRgLiBUaG9zZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIHBhdGggd2hlbiB3ZSYjMzk7cmUgaW4gdGhlIGdlbmVyaWMgY29weSBtb2RlIGFuZCBhbHNvIGxvb2sgYXQgaG93IHRoZSBYRFAgc29ja2V0IHNlbmQvdHggd29ya3MuIEkgd2FudCB0byBkaXZlIGludG8gdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIFNLQiBpcyBidWlsdC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBhbGwgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBzb2NrZXQgc2VuZCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCBhbGwgdGhlIGxheWVycyBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGlzIGFjdHVhbGx5IGNvcGllZCwgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBhbmQgdGhlIHN0YWNrLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGF0IGRhdGEgbW92ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExOC1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExOTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMjAtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuLS1cbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMjYzLVxubmV0L3hkcC94c2suYzoxMjY0Olx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTI2NS1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB3cml0dGVuIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNvbGlkaWZ5IG15IGdyYXNwIG9uIHRoZSBYRFAgdHJhbnNtaXNzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX3NlbmRtc2dgLCBhbmQgYHhza19wb2xsYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGRvZXMsIHNvIEkgY2FuIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCB3aXRoaW4gdGhlIFhEUCBmcmFtZXdvcmsuIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIGhhbmRsZWQsIGFuZCBob3cgdGhlIHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG15IGN1cnJlbnQgdGFzayB0byBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTA6XHRcdFx0LyogTGV0IGFwcGxpY2F0aW9uIHJldHJ5ICovXG4xMjExOlx0XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIDEpO1xuMTIxMjpcdFx0fVxuMTIxMzpcdFxuMTIxNDpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjEyMTU6XHR9XG4xMjE2Olx0XG4xMjE3Olx0c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuMTIxODpcdHtcbjEyMTk6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTIyMDpcdFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XG4xMjIxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTIyMjpcdFx0dTMyIGNhY2hlZF9jb25zO1xuMTIyMzpcdFx0dTMyIG1heF9iYXRjaDtcbjEyMjQ6XHRcdGludCBlcnIgPSAwO1xuMTIyNTpcdFxuMTIyNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xMjI3Olx0XHRjYWNoZWRfY29ucyA9IHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zO1xuMTIyODpcdFxuMTIyOTpcdFx0LyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovXG4xMjMwOlx0XHRpZiAodW5saWtlbHkoIXhza19pc19ib3VuZCh4cykpKSB7XG4xMjMxOlx0XHRcdGVyciA9IC1FTlhJTztcbjEyMzI6XHRcdFx0Z290byBvdXQ7XG4xMjMzOlx0XHR9XG4xMjM0Olx0XG4xMjM1Olx0XHRpZiAoeHMtXHUwMDNlcXVldWVfaWQgXHUwMDNlPSB4cy1cdTAwM2VkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMTIzNjpcdFx0XHRnb3RvIG91dDtcbjEyMzc6XHRcbjEyMzg6XHRcdG1heF9iYXRjaCA9IFJFQURfT05DRSh4cy1cdTAwM2VtYXhfdHhfYnVkZ2V0KTtcbjEyMzk6XHRcdHdoaWxlICh4c2txX2NvbnNfcGVla19kZXNjKHhzLVx1MDAzZXR4LCBcdTAwMjZkZXNjLCB4cy1cdTAwM2Vwb29sKSkge1xuMTI0MDpcdFx0XHRpZiAobWF4X2JhdGNoLS0gPT0gMCkge1xuMTI0MTpcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4xMjQyOlx0XHRcdFx0Z290byBvdXQ7XG4xMjQzOlx0XHRcdH1cbjEyNDQ6XHRcbjEyNDU6XHRcdFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguXG4xMjQ2Olx0XHRcdCAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgYW5kIG9ubHkgcHJvY2VlZFxuMTI0NzpcdFx0XHQgKiBpZiB0aGVyZSBpcyBzcGFjZSBpbiBpdC4gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGltcGxlbWVudFxuMTI0ODpcdFx0XHQgKiBhbnkgYnVmZmVyaW5nIGluIHRoZSBUeCBwYXRoLlxuMTI0OTpcdFx0XHQgKi9cbjEyNTA6XHRcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuMTI1MTpcdFx0XHRpZiAoZXJyKSB7XG4xMjUyOlx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyNTM6XHRcdFx0XHRnb3RvIG91dDtcbjEyNTQ6XHRcdFx0fVxuMTI1NTpcdFxuMTI1NjpcdFx0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbjEyNTc6XHRcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbjEyNTg6XHRcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbjEyNTk6XHRcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjYwOlx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4xMjYxOlx0XHRcdFx0Y29udGludWU7XG4xMjYyOlx0XHRcdH1cbjEyNjM6XHRcbjEyNjQ6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4xMjY1Olx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTI2NjpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjEyNjc6XHRcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4xMjY4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjEyNjk6XHRcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbjEyNzA6XHRcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuMTI3MTpcdFx0XHRcdGVyciA9IDA7XG4xMjcyOlx0XHRcdFx0Y29udGludWU7XG4xMjczOlx0XHRcdH1cbjEyNzQ6XHRcbjEyNzU6XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuMTI3NjpcdFxuMTI3NzpcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSkge1xuMTI3ODpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IHNrYjtcbjEyNzk6XHRcdFx0XHRjb250aW51ZTtcbjEyODA6XHRcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0XHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVx1MDAzZXF1ZXVlX2lkKTtcbjEyODM6XHRcdFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcbjEyODQ6XHRcdFx0XHQvKiBUZWxsIHVzZXItc3BhY2UgdG8gcmV0cnkgdGhlIHNlbmQgKi9cbjEyODU6XHRcdFx0XHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXHUwMDNldHgsIHhza19nZXRfbnVtX2Rlc2Moc2tiKSk7XG4xMjg2Olx0XHRcdFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4xMjg3Olx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyODg6XHRcdFx0XHRnb3RvIG91dDtcbjEyODk6XHRcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0XHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXG4xMjkyOlx0XHRcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xuMTI5MzpcdFx0XHRcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXG4xMjk0Olx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMTI5NTpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4xMjk2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjk3Olx0XHRcdH1cbjEyOTg6XHRcbjEyOTk6XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYU0sgVHJhbnNtaXNzaW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgX194c2tfZ2VuZXJpY194bWl0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIHRoZSBTS0IgdXNpbmcgYHhza19idWlsZF9za2JgIGFuZCB0aGVuIGludm9raW5nIGBfX2Rldl9kaXJlY3RfeG1pdGAgd2l0aCB0aGUgU0tCIGFuZCB0aGUgcXVldWUgSUQuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2NgIGlzIHRoZSBrZXkgcG9pbnQgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSByZXNldD8mIzM0OwoKSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaW4gc2NlbmFyaW9zIHdoZXJlIHRoZSBTS0IgaXMgYmVpbmcgdHJhbnNtaXR0ZWQgZGlyZWN0bHkgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdGAsIG9yIHRocm91Z2ggdGhlIG1vcmUgY29tcGxleCBuZXR3b3JraW5nIHN0YWNrIGNvbXBvbmVudHMgbGlrZSBUQywgbmV0ZmlsdGVyLCBxZGlzYywgb3IgZXZlbiBhdCB0aGUgZHJpdmVyIGxldmVsLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoYXQgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIGlzIGJlaW5nIHJlYWQgb3IgYWNjZXNzZWQuIElmIHRoaXMgaGVhZGVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZCBvciwgYXMgaXMgdGhlIGNhc2UgaGVyZSwgZXhwbGljaXRseSByZXNldCwgd2UmIzM5O3JlIGxpa2VseSBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgZm9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGlzIGFsd2F5cyBhIGNvbmNlcm4uIFRoZSByZXNldCBvcGVyYXRpb24gaXMgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZS4KClRoaXMgbWFrZXMgc2Vuc2UuIElmIHdlJiMzOTtyZSByZWx5aW5nIG9uIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhpcyBoZWxwcyBtYWludGFpbiB0aGUgcHJvcGVyIHN0YXRlIGFuZCBwcmV2ZW50cyB0aG9zZSBidWdzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aG8gaXMgY2FsbGluZyBgX194c2tfZ2VuZXJpY194bWl0YCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xMTExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTIxNi1cbm5ldC94ZHAveHNrLmM6MTIxNzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMTgte1xuLS1cbm5ldC94ZHAveHNrLmM9MTMzMj1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTMzNy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzM4Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMzOS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB4c2tfZ2VuZXJpY194bWl0YCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgeHNrX2dlbmVyaWNfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbnRleHQsIGFuZCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBYRFAvQUZfWERQIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBncmFzcCBvbiB0aGUgZGlmZmVyZW50IHBhdGhzIG9mIGV4ZWN1dGlvbiB0aGF0IGVuZCB1cCB1c2luZyBpdC4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBtaWdodCBiZSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19nZW5lcmljX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMjE2LVxubmV0L3hkcC94c2suYzoxMjE3OnN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTIxOC17XG4tLVxubmV0L3hkcC94c2suYy0xMzMxLVxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzMzMte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMzNy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzM4Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMzOS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuLS1cbm5ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTEtXHRcdFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xubmV0L3hkcC94c2suYzoxMzkyOlx0XHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XG5uZXQveGRwL3hzay5jLTEzOTMtXHR9XG4tLVxubmV0L3hkcC94c2suYz0xNDQ1PXN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQveGRwL3hzay5jLTE0NjUtXHRcdFx0LyogUG9sbCBuZWVkcyB0byBkcml2ZSBUeCBhbHNvIGluIGNvcHkgbW9kZSAqL1xubmV0L3hkcC94c2suYzoxNDY2Olx0XHRcdHhza19nZW5lcmljX3htaXQoc2spO1xubmV0L3hkcC94c2suYy0xNDY3LVx0fVxuLS1cbm5ldC94ZHAveHNrLmM9MjI2Nj1zdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMjI4NS1cbm5ldC94ZHAveHNrLmM6MjI4NjpcdHhza190eF9nZW5lcmljX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7eHNrX2dlbmVyaWNfeG1pdF9jYWNoZVwmIzM0Oyxcbm5ldC94ZHAveHNrLmMtMjI4Ny1cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB4c2tfYWRkcnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFhTSyBTb2NrZXQgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgX194c2tfc2VuZG1zZ2AgYW5kIGB4c2tfcG9sbGAuIFRob3NlIGFyZSB0aGUgYnJlYWQtYW5kLWJ1dHRlciBvcGVyYXRpb25zIGZvciBBRl9YRFAgc29ja2V0cyDigJMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyB3ZSYjMzk7ZCBleHBlY3QuIE1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiBob3cgeW91IHB1c2ggYW5kIHB1bGwgZGF0YSB1c2luZyBYRFAuIEJlZm9yZSBkaXZpbmcgZnVydGhlciBpbnRvIGEgc3BlY2lmaWMgaXNzdWUsIG9yIG1heWJlIGp1c3QgdG8gcmVmcmVzaCBteSBtZW1vcnksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYG9wc2Agc3RydWN0IGZvciB0aGUgWFNLIHNvY2tldC4gU2VlaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVycyBhdmFpbGFibGUsIG9yIHBlcmhhcHMgdGhlIHdheSB0aGV5JiMzOTtyZSBpbXBsZW1lbnRlZCwgbWlnaHQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlnZ2luZyBpbnRvIHNvY2tldCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbjIxNjI6XHRcdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4yMTYzOlx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbjIxNjQ6XHRcdC5yZWxlYXNlXHQ9IHhza19yZWxlYXNlLFxuMjE2NTpcdFx0LmJpbmRcdFx0PSB4c2tfYmluZCxcbjIxNjY6XHRcdC5jb25uZWN0XHQ9IHNvY2tfbm9fY29ubmVjdCxcbjIxNjc6XHRcdC5zb2NrZXRwYWlyXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcbjIxNjg6XHRcdC5hY2NlcHRcdFx0PSBzb2NrX25vX2FjY2VwdCxcbjIxNjk6XHRcdC5nZXRuYW1lXHQ9IHNvY2tfbm9fZ2V0bmFtZSxcbjIxNzA6XHRcdC5wb2xsXHRcdD0geHNrX3BvbGwsXG4yMTcxOlx0XHQuaW9jdGxcdFx0PSBzb2NrX25vX2lvY3RsLFxuMjE3MjpcdFx0Lmxpc3Rlblx0XHQ9IHNvY2tfbm9fbGlzdGVuLFxuMjE3MzpcdFx0LnNodXRkb3duXHQ9IHNvY2tfbm9fc2h1dGRvd24sXG4yMTc0Olx0XHQuc2V0c29ja29wdFx0PSB4c2tfc2V0c29ja29wdCxcbjIxNzU6XHRcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB4c2tfZ2V0c29ja29wdCxcbjIxNzY6XHRcdC5zZW5kbXNnXHQ9IHhza19zZW5kbXNnLFxuMjE3NzpcdFx0LnJlY3Ztc2dcdD0geHNrX3JlY3Ztc2csXG4yMTc4Olx0XHQubW1hcFx0XHQ9IHhza19tbWFwLFxuMjE3OTpcdH07XG4yMTgwOlx0XG4yMTgxOlx0c3RhdGljIHZvaWQgeHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbjIxODI6XHR7XG4yMTgzOlx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcbjIxODQ6XHRcbjIxODU6XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuMjE4NjpcdFx0XHRyZXR1cm47XG4yMTg3Olx0XG4yMTg4Olx0XHRpZiAoIXhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpKVxuMjE4OTpcdFx0XHR4ZHBfcHV0X3VtZW0oeHMtXHUwMDNldW1lbSwgIXhzLVx1MDAzZXBvb2wpO1xuMjE5MDpcdH1cbjIxOTE6XHRcbjIxOTI6XHRzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4yMTkzOlx0XHRcdCAgICAgIGludCBrZXJuKVxuMjE5NDpcdHtcbjIxOTU6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4yMTk2Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4yMTk3Olx0XG4yMTk4Olx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbjIxOTk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjIyMDA6XHRcdGlmIChzb2NrLVx1MDAzZXR5cGUgIT0gU09DS19SQVcpXG4yMjAxOlx0XHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xuMjIwMjpcdFxuMjIwMzpcdFx0aWYgKHByb3RvY29sKVxuMjIwNDpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjIyMDU6XHRcbjIyMDY6XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjIyMDc6XHRcbjIyMDg6XHRcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9YRFAsIEdGUF9LRVJORUwsIFx1MDAyNnhza19wcm90bywga2Vybik7XG4yMjA5Olx0XHRpZiAoIXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFGX1hEUCBQYWNrZXQgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBlbmdpbmU6IEFGX1hEUCBzb2NrZXRzIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgcGFja2V0cyBnZXQgdHJhbnNtaXR0ZWQgdmlhIHRoZSBjb3B5IG1vZGUgd2l0aGluIEFGX1hEUC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7Q2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgaW4gbXkgdHlwaWNhbCBlbnZpcm9ubWVudHM/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaGVyZSBpcyBhIHNvbGlkICYjMzQ7WWVzLiYjMzQ7IEFGX1hEUCBpcyBwZXJmZWN0bHkgaGFwcHkgcnVubmluZyBvbiBsb29wYmFjaywgdmV0aCwgb3IgYW55IHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW4gY29weSBtb2RlLCB3aGljaCBjb3ZlcnMgZ2VuZXJpYyBYRFAgYW5kIGdlbmVyaWMgWFNLIG1vZGVzIOKAkyB0aG9zZSBhcmUgY29tbW9uIHNldHVwcywgYW5kIEkga25vdyBJIGNhbiBlYXNpbHkgZ2V0IHRoaXMgcnVubmluZy4KCk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIGBza19idWZmYCBhbmQgYWN0dWFsbHkgKnNlbmRpbmcqIHRoZSBwYWNrZXQsIHRoaW5ncyBsaWtlIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrX3NlbmRtc2dgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGZpcmluZyBsaW5lLiBUaGF0IHdob2xlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aCBpcyBhIHBvdGVudGlhbCBnb2xkIG1pbmUgZm9yIGZpbmRpbmcgYnVncy4gSSBrbm93IHRoYXQga2luZCBvZiBsb3cgbGV2ZWwgcGFja2V0IGNvbnN0cnVjdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreSBhbmQgdnVsbmVyYWJpbGl0aWVzIGNhbiBoaWRlLgoKTm93LCBiZWZvcmUgSSBzdGFydCB0aHJvd2luZyBmdXp6ZXJzIGF0IGl0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBlaXRoZXIgb2YgdGhvc2Ugb3B0aW9ucyBoYXZlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBoYXJuZXNzIGlzIHNldCB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIEJQRl9TWVNDQUxMIGluIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24mIzM5O3QgdXN1YWxseSBhIHRyaXZpYWwgdGFzazsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBLY29uZmlnIGZpbGVzLCBvZnRlbiBuZXN0ZWQgZGVlcCB3aXRoaW4gZmVhdHVyZSBkaXJlY3RvcmllcyBhbmQgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZmluZGAgb3IgYGdyZXBgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsaWtlbHkgdXNpbmcgYSBwYXR0ZXJuIHRoYXQmIzM5O3MgYXMgZ2VuZXJhbCBhcyBwb3NzaWJsZSB0byBzdGFydCwgcGVyaGFwcyBgZ3JlcCAmIzM5O0JQRl9TWVNDQUxMJiMzOTsgS2NvbmZpZyogLXJgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgZWFjaCBtYXRjaCwgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyAoZS5nLiwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLikuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBtZW51IHN0cnVjdHVyZSwgYW55IGRlZmF1bHQgdmFsdWVzIGFzc2lnbmVkLCBhbmQgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoZSBhc3NvY2lhdGVkIEMgY29kZSBtaWdodCBiZS4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBvciBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24uIFRoaXMgbWlnaHQgbWVhbiBuZWVkaW5nIHRvIHRyYXZlcnNlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGV4cG9zZSBvciBlbmFibGUgYEJQRl9TWVNDQUxMYCAuIElmIHRoYXQgZ2V0cyB0b28gY29tcGxleCwgSSYjMzk7bGwgZmFsbCBiYWNrIHRvIGtlcm5lbCBidWlsZCBzeXN0ZW0gb3B0aW9ucywgbGlrZSBsb29raW5nIGZvciBLY29uZmlnIGluY2x1ZGVzIG9yIG90aGVyIGhpbnRzIGZyb20gYnVpbGQgc2NyaXB0cy4gVGhpcyBpcyBhbGwgYWJvdXQgbmF2aWdhdGluZyB0aGUgY29uZmlndXJhdGlvbiBtYXplIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gd2hldGhlciBgQlBGX1NZU0NBTExgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgbXkgaW5pdGlhbCBodW5jaCB0ZWxscyBtZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI3LiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZUJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlc2lkZXMgYXJvdW5kIHRoYXQgYXJlYS4gVGhpcyB3b3VsZCBiZSB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpZiB0aGVyZSBhcmUgY29uZmlndXJhdGlvbiBpc3N1ZXMuIFdlIHdpbGwgc2VlIGlmIHRoZSBsaW5lIGFuZCBhcm91bmQgdGhhdCByZWdpb24gaGFzIHJlbGV2YW50IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIG9yIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhEUCBTb2NrZXRzIGFuZCBLZXkgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3hkcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBYRFBfU09DS0VUU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIGFuZCBpdCYjMzk7cyBhIGJvb2xlYW4sIGFzIGV4cGVjdGVkLiBHb29kLCBnb29kLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSBBRl9YRFAgcGF0aC4gTGV0JiMzOTtzIHRyYWNlIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBhbmQgZnVuY3Rpb25zIGluIGBuZXQveGRwL3hzay5jYCB0aGF0IGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSBvbmVzIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFyZTogYHhza19zZW5kbXNnYCAob3IgcG9zc2libHkgYF9feHNrX3NlbmRtc2dgKSwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19zZXRzb2Nrb3B0YCwgYHhza19tbWFwYCwgYHhza19jcmVhdGVgLCBhbmQgYHhza19kZXN0cnVjdF9za2JgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucywgbGlrZSBgeHNrX3NlbmRtc2dgLCBgeHNrX3BvbGxgLCBhbmQgYHhza19iaW5kYCwgYXJlIGRlZmluZWQgYXMgc3RhdGljIG9yIG5vdC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xMzU2PXN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTM2NS1cbm5ldC94ZHAveHNrLmM6MTM2NjpzdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM2Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzk2LVxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM5OC17XG4tLVxubmV0L3hkcC94c2suYy0xNDAxLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3hkcC94c2suYzoxNDAyOlx0cmV0ID0gX194c2tfc2VuZG1zZyhzb2NrLCBtLCB0b3RhbF9sZW4pO1xubmV0L3hkcC94c2suYy0xNDAzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3hkcC94c2suYz0yMTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTc1LVx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxubmV0L3hkcC94c2suYzoyMTc2Olx0LnNlbmRtc2dcdD0geHNrX3NlbmRtc2csXG5uZXQveGRwL3hzay5jLTIxNzctXHQucmVjdm1zZ1x0PSB4c2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBYU0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQveGRwL3hzay5jYCBmaWxlLiBJIHNlZSB0aGUgY29yZSBYU0sgZnVuY3Rpb24gY2FsbHM6IGB4c2tfc2VuZG1zZ2AsIGB4c2tfcG9sbGAsIGB4c2tfYmluZGAsIGB4c2tfbW1hcGAsIGB4c2tfc2V0c29ja29wdGAsIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAgYXJlIGFsbCBkZWZpbmVkIGhlcmUuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYHhza19kZXN0cnVjdF9za2JgIHJpZ2h0IG5vdzsgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBTS0IgbGlmZWN5Y2xlLiBHb29kLCBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBmaWxlLiBUaGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIG5hbWUuIE5vdywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGJhY2sgYXQgdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIFhTSyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKC4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XG5uZXQveGRwL3hzay5jLTUwLVxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTUyLXtcbi0tXG5uZXQveGRwL3hzay5jLTU4LX1cbm5ldC94ZHAveHNrLmM6NTk6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtNjAtXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNzUtfVxubmV0L3hkcC94c2suYzo3NjpFWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy03Ny1cbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTc5LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1LX1cbm5ldC94ZHAveHNrLmM6ODY6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy04Ny1cbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTg5LXtcbi0tXG5uZXQveGRwL3hzay5jLTEwMi19XG5uZXQveGRwL3hzay5jOjEwMzpFWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTEwNC1cbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTEwNi17XG4tLVxubmV0L3hkcC94c2suYy0xMDgtfVxubmV0L3hkcC94c2suYzoxMDk6RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTExMC1cbm5ldC94ZHAveHNrLmM9MTExPXN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQveGRwL3hzay5jLTEyMC19XG5uZXQveGRwL3hzay5jOjEyMTpFWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XG5uZXQveGRwL3hzay5jLTEyMi1cbm5ldC94ZHAveHNrLmM6MTIzOnN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTI0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jPTIwOD1zdGF0aWMgdm9pZCBfX3hza19yY3ZfemNfc2FmZShzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLFxuLS1cbm5ldC94ZHAveHNrLmMtMjE4LVxubmV0L3hkcC94c2suYzoyMTk6c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy0yMjAte1xuLS1cbm5ldC94ZHAveHNrLmMtMjU5LVxubmV0L3hkcC94c2suYzoyNjA6c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXG5uZXQveGRwL3hzay5jLTI2MS17XG4tLVxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxuLS1cbm5ldC94ZHAveHNrLmMtMjk1LVxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTI5Ny17XG4tLVxubmV0L3hkcC94c2suYy0zODgtXG5uZXQveGRwL3hzay5jOjM4OTpzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTM5MC17XG4tLVxubmV0L3hkcC94c2suYy0zOTYtXG5uZXQveGRwL3hzay5jOjM5NzpzdGF0aWMgdm9pZCBfX3hza190eF9yZWxlYXNlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTM5OC17XG4tLVxubmV0L3hkcC94c2suYy00MDMtXG5uZXQveGRwL3hzay5jOjQwNDpzdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDA1LXtcbi0tXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy00MzgtXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTQ0MC17XG4tLVxubmV0L3hkcC94c2suYy00NTMtXG5uZXQveGRwL3hzay5jOjQ1NDpzdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDU1LXtcbi0tXG5uZXQveGRwL3hzay5jLTQ2MC1cbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ2Mi17XG4tLVxubmV0L3hkcC94c2suYy00NzYtXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ3OC17XG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuLS1cbm5ldC94ZHAveHNrLmMtNTEzLVxubmV0L3hkcC94c2suYzo1MTQ6dm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbm5ldC94ZHAveHNrLmMtNTE1LXtcbi0tXG5uZXQveGRwL3hzay5jLTUyMy1cbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTUyNS17XG4tLVxubmV0L3hkcC94c2suYy01NDQtfVxubmV0L3hkcC94c2suYzo1NDU6RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbm5ldC94ZHAveHNrLmMtNTQ2LVxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNTQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTU1NS19XG5uZXQveGRwL3hzay5jOjU1NjpFWFBPUlRfU1lNQk9MKHhza190eF9yZWxlYXNlKTtcbm5ldC94ZHAveHNrLmMtNTU3LVxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG5uZXQveGRwL3hzay5jLTU1OS17XG4tLVxubmV0L3hkcC94c2suYy02MDMtfVxubmV0L3hkcC94c2suYzo2MDQ6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19kZXNjKTtcbm5ldC94ZHAveHNrLmMtNjA1LVxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTYwNy17XG4tLVxubmV0L3hkcC94c2suYz02Njg9c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG5uZXQveGRwL3hzay5jLTY3MC17XG4tLVxubmV0L3hkcC94c2suYy03NDMtXG5uZXQveGRwL3hzay5jOjc0NDp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzQ1LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MC19XG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc5Mi1cbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzk0LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5OS1cbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04MDEte1xuLS1cbm5ldC94ZHAveHNrLmMtODEwLVxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgxNS1cbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgxNy17XG4tLVxubmV0L3hkcC94c2suYy04MjAtXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXG5uZXQveGRwL3hzay5jLTgyMi17XG4tLVxubmV0L3hkcC94c2suYy04MzMtXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgzNS17XG4tLVxubmV0L3hkcC94c2suYy04NDYtXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1OC1cbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODYwLXtcbi0tXG5uZXQveGRwL3hzay5jLTg2OC1cbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NzAte1xuLS1cbm5ldC94ZHAveHNrLmM9OTExPXN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtOTIzLVxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTMzLXtcbi0tXG5uZXQveGRwL3hzay5jPTk0NT1zdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy05NjItXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTY0LXtcbi0tXG5uZXQveGRwL3hzay5jLTk4MC1cbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05ODIte1xuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTEyMTYtXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMjE4LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMzEtXG5uZXQveGRwL3hzay5jOjEzMzI6c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTMzMy17XG4tLVxubmV0L3hkcC94c2suYy0xMzQ0LVxubmV0L3hkcC94c2suYzoxMzQ1OnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzQ2LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTUtXG5uZXQveGRwL3hzay5jOjEzNTY6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTEzNTcte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM2NS1cbm5ldC94ZHAveHNrLmM6MTM2NjpzdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM2Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzk2LVxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM5OC17XG4tLVxubmV0L3hkcC94c2suYy0xNDA3LVxubmV0L3hkcC94c2suYzoxNDA4OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MDkte1xuLS1cbm5ldC94ZHAveHNrLmMtMTQzMy1cbm5ldC94ZHAveHNrLmM6MTQzNDpzdGF0aWMgaW50IHhza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbm5ldC94ZHAveHNrLmMtMTQzNS17XG4tLVxubmV0L3hkcC94c2suYz0xNDc4PXN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbi0tXG5uZXQveGRwL3hzay5jLTE0OTUtXG5uZXQveGRwL3hzay5jOjE0OTY6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ5Ny17XG4tLVxubmV0L3hkcC94c2suYz0xNTEwPXN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTUyOS1cbm5ldC94ZHAveHNrLmM6MTUzMDpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTMxLXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NTUtXG5uZXQveGRwL3hzay5jOjE1NTY6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTU3LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1OTMtXG5uZXQveGRwL3hzay5jOjE1OTQ6c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxubmV0L3hkcC94c2suYy0xNTk1LXtcbi0tXG5uZXQveGRwL3hzay5jLTE2MTAtXG5uZXQveGRwL3hzay5jOjE2MTE6c3RhdGljIGJvb2wgeHNrX3ZhbGlkYXRlX3F1ZXVlcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNjEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTE2MTUtXG5uZXQveGRwL3hzay5jOjE2MTY6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxubmV0L3hkcC94c2suYy0xNjE3LXtcbi0tXG5uZXQveGRwL3hzay5jPTE4MTQ9c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC94ZHAveHNrLmMtMTkzNi1cbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5Mzgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTk0My1cbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9MjE2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC94ZHAveHNrLmMtMjE4MC1cbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0yMTgyLXtcbi0tXG5uZXQveGRwL3hzay5jPTIyNDU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xuLS1cbm5ldC94ZHAveHNrLmMtMjI0OC1cbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZHAveHNrLmMtMjI1MC17XG4tLVxubmV0L3hkcC94c2suYy0yMjU1LVxubmV0L3hkcC94c2suYzoyMjU2OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgeHNrX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZHAveHNrLmMtMjI1Ny17XG4tLVxubmV0L3hkcC94c2suYz0yMjYxPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgeHNrX25ldF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMjY1LVxubmV0L3hkcC94c2suYzoyMjY2OnN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXG5uZXQveGRwL3hzay5jLTIyNjcte1xuLS1cbm5ldC94ZHAveHNrLmMtMjMwNy1cbm5ldC94ZHAveHNrLmM6MjMwODpmc19pbml0Y2FsbCh4c2tfaW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTMzCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLgoKRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIFRoZSBjcml0aWNhbCBzeW1ib2xzIHRoYXQgbWF0dGVyIGFyZSBgeHNrX3NlbmRtc2dgLCBgeHNrX2Rlc3RydWN0X3NrYmAsIGB4c2tfZ2VuZXJpY19yY3ZgLCBgeHNrX2JpbmRgLCBhbmQgYHhza19zZXRzb2Nrb3B0YCAob3IgYHhza19wb2xsYCkuIEkgY2FuIGRlZmluaXRlbHkgc2VlIGhvdyB0aGVzZSBpbnRlcmFjdC4gVGhlbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbnMgSSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBmdXp6aW5nIHNldHVwLgoKTm93LCBsZXQgbWUgYW5hbHl6ZSB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgY29weSBtb2RlLCB3aGVuIFNLQnMgYXJlIHJlc2V0LiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyBjaGFuZ2VzIHRvIGNvcmUgQUZfWERQIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzLiBUaGF0IG1ha2VzIGl0IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGlkZWFsIGZvciB0ZXN0aW5nLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgYW5kIGl0IG1lYW5zIHRoZSBlZmZvcnQgaXMgd29ydGggdGhlIHJldHVybi4KCk5vdywgSeKAmW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlncywgaXNvbGF0ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgdGVzdGFibGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGdldCB0aGlzIGludG8gdGhlIGZ1enppbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIG9uIFNLQnMgY3JlYXRlZCBkdXJpbmcgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgbW9kZSAoeHNrX3NrYl9pbml0X21pc2MpLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIG9uIFNLQnMgY3JlYXRlZCBkdXJpbmcgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgbW9kZSAoeHNrX3NrYl9pbml0X21pc2MpLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkyOTM5ZTkwYTFiN2E1ZDZiNDczYTcwMWQyNmI2ODI0MmQzMzJiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTk6Mjk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NAotLS0gYS9uZXQveGRwL3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmMKQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogewogCWludCBlcnI7CiAKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CiAJZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgWFNLIENvZGUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCBpdCwgc28gbXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZGlmZiBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDk0NyBpbiBgbmV0L3hkcC94c2suY2AuIEkgZXhwZWN0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGFyZSwgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tbWl0JiMzOTtzIGludGVudCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFRoYXQmIzM5O2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTMwOlx0XG4gOTMxOlx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbiA5MzI6XHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCA9IFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2V4c2tfbWV0YTtcbiA5MzU6XHRcbiA5MzY6XHRcdGlmIChjb21wbC1cdTAwM2V0eF90aW1lc3RhbXApIHtcbiA5Mzc6XHRcdFx0Lyogc3cgY29tcGxldGlvbiB0aW1lc3RhbXAsIG5vdCBhIHJlYWwgb25lICovXG4gOTM4Olx0XHRcdCpjb21wbC1cdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcbiA5Mzk6XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlcG9vbCwgc2tiKTtcbiA5NDI6XHRcdHNvY2tfd2ZyZWUoc2tiKTtcbiA5NDM6XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIDk0NjpcdFx0XHRcdCAgICAgdTY0IGFkZHIpXG4gOTQ3Olx0e1xuIDk0ODpcdFx0aW50IGVycjtcbiA5NDk6XHRcbiA5NTA6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDk1MTpcdFxuIDk1MjpcdFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gOTUzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA5NTQ6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTU6XHRcbiA5NTY6XHRcdHNrYi1cdTAwM2VkZXYgPSB4cy1cdTAwM2VkZXY7XG4gOTU3Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfcHJpb3JpdHkpO1xuIDk1ODpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfbWFyayk7XG4gOTU5Olx0XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHhza19kZXN0cnVjdF9za2I7XG4gOTYwOlx0XHRyZXR1cm4gMDtcbiA5NjE6XHR9XG4gOTYyOlx0XG4gOTYzOlx0c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTY0Olx0e1xuIDk2NTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk2NjpcdFx0dTMyIG51bV9kZXNjcyA9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5Njc6XHRcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xuIDk2ODpcdFxuIDk2OTpcdFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xuIDk3MDpcdFx0XHR4c2tfYWRkciA9IChzdHJ1Y3QgeHNrX2FkZHJzICopc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnO1xuIDk3MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcbiA5NzI6XHRcdH1cbiA5NzM6XHRcbiA5NzQ6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcbiA5NzU6XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIG51bV9kZXNjcyk7XG4gOTc2Olx0XHQvKiBGcmVlIHNrYiB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHBlcmYgZHJvcCB0cmFjZSAqL1xuIDk3NzpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5Nzg6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIFhTSyBTS0IgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBYRFAgYW5kIHNwZWNpZmljYWxseSB0aGUgWFNLIHBhcnQgb2YgaXQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYW4gU0tCIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gZm9jdXNpbmcgb24gYHhza19za2JfaW5pdF9taXNjYCBpbiBgbmV0L3hkcC94c2suY2AgYmVjYXVzZSBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRob3NlIFNLQnMgc2V0IHVwLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgU0tCcyBhcmUgaW5pdGlhbGx5IGNvbnN0cnVjdGVkLCB3aGF0JiMzOTtzIHB1dCBpbnRvIHRoZW0sIGFuZCBob3cgdGhleSYjMzk7cmUgc3Vic2VxdWVudGx5IHVzZWQgd2l0aGluIHRoZSBYU0sgZnJhbWV3b3JrLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdywgdW5kZXJzdGFuZCBhbnkgZWRnZSBjYXNlcywgYW5kIHBvc3NpYmx5IGV2ZW4gaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3NrYl9pbml0X21pc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMTg2LVx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbm5ldC94ZHAveHNrLmM6MTE4NzpcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbm5ldC94ZHAveHNrLmMtMTE4OC1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBTb2NrZXQgQ29uc3RydWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgdGhlc2UgWERQIHNvY2tldHMgYWN0dWFsbHkgYnVpbGQgdGhlaXIgU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHhza19idWlsZF9za2JgLCBhbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIEdvdHRhIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgaW4gaG93IGl0JiMzOTtzIGFsbCBwdXQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSBoYXBwZW4sIHNvIGxldCYjMzk7cyBzdGFydCBkaXNzZWN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHR9XG4xMTAxOlx0XG4xMTAyOlx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBsZW47XG4xMTAzOlx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGxlbjtcbjExMDQ6XHRcdHNrYi1cdTAwM2V0cnVlc2l6ZSAmIzQzOz0gdHM7XG4xMTA1Olx0XG4xMTA2Olx0XHRyZWZjb3VudF9hZGQodHMsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTEwNzpcdFxuMTEwODpcdFx0cmV0dXJuIHNrYjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4xMTEyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbjExMTM6XHR7XG4xMTE0Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0geHMtXHUwMDNlZGV2O1xuMTExNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVx1MDAzZXNrYjtcbjExMTY6XHRcdGludCBlcnI7XG4xMTE3Olx0XG4xMTE4Olx0XHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG4xMTE5Olx0XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xuMTEyMDpcdFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbjExMjE6XHRcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4xMTIyOlx0XHRcdFx0c2tiID0gTlVMTDtcbjExMjM6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTEyNDpcdFx0XHR9XG4xMTI1Olx0XHR9IGVsc2Uge1xuMTEyNjpcdFx0XHR1MzIgaHIsIHRyLCBsZW47XG4xMTI3Olx0XHRcdHZvaWQgKmJ1ZmZlcjtcbjExMjg6XHRcbjExMjk6XHRcdFx0YnVmZmVyID0geHNrX2J1ZmZfcmF3X2dldF9kYXRhKHhzLVx1MDAzZXBvb2wsIGRlc2MtXHUwMDNlYWRkcik7XG4xMTMwOlx0XHRcdGxlbiA9IGRlc2MtXHUwMDNlbGVuO1xuMTEzMTpcdFxuMTEzMjpcdFx0XHRpZiAoIXNrYikge1xuMTEzMzpcdFx0XHRcdGhyID0gbWF4KE5FVF9TS0JfUEFELCBMMV9DQUNIRV9BTElHTihkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSk7XG4xMTM0Olx0XHRcdFx0dHIgPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuMTEzNTpcdFx0XHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXHUwMDI2eHMtXHUwMDNlc2ssIGhyICYjNDM7IGxlbiAmIzQzOyB0ciwgMSwgXHUwMDI2ZXJyKTtcbjExMzY6XHRcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4xMTM3Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTEzODpcdFxuMTEzOTpcdFx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgaHIpO1xuMTE0MDpcdFx0XHRcdHNrYl9wdXQoc2tiLCBsZW4pO1xuMTE0MTpcdFxuMTE0MjpcdFx0XHRcdGVyciA9IHNrYl9zdG9yZV9iaXRzKHNrYiwgMCwgYnVmZmVyLCBsZW4pO1xuMTE0MzpcdFx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuMTE0NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNDU6XHRcbjExNDY6XHRcdFx0XHRpZiAoZGVzYy1cdTAwM2VvcHRpb25zIFx1MDAyNiBYRFBfVFhfTUVUQURBVEEpIHtcbjExNDc6XHRcdFx0XHRcdGVyciA9IHhza19za2JfbWV0YWRhdGEoc2tiLCBidWZmZXIsIGRlc2MsXG4xMTQ4Olx0XHRcdFx0XHRcdFx0ICAgICAgIHhzLVx1MDAzZXBvb2wsIGhyKTtcbjExNDk6XHRcdFx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuMTE1MDpcdFx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE1MTpcdFx0XHRcdH1cbjExNTI6XHRcdFx0fSBlbHNlIHtcbjExNTM6XHRcdFx0XHRpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4xMTU0Olx0XHRcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4xMTU1Olx0XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4xMTU2Olx0XHRcdFx0dTggKnZhZGRyO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XG4xMTU5Olx0XHRcdFx0aWYgKCF4c2tfYWRkcikge1xuMTE2MDpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjExNjE6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTYyOlx0XHRcdFx0fVxuMTE2MzpcdFxuMTE2NDpcdFx0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4xMTY1Olx0XG4xMTY2Olx0XHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4xMTY3Olx0XHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuMTE2ODpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjk6XHRcdFx0XHR9XG4xMTcwOlx0XG4xMTcxOlx0XHRcdFx0cGFnZSA9IGFsbG9jX3BhZ2UoeHMtXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XG4xMTcyOlx0XHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuMTE3MzpcdFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjExNzQ6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTc1Olx0XHRcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0XHRcdHZhZGRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuMTE3ODpcdFx0XHRcdG1lbWNweSh2YWRkciwgYnVmZmVyLCBsZW4pO1xuMTE3OTpcdFx0XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcbjExODI6XHRcdFx0XHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcdTAwMjZ4cy1cdTAwM2Vzay5za193bWVtX2FsbG9jKTtcbjExODM6XHRcdFx0fVxuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbjExODc6XHRcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbjExODg6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTg5Olx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExOTA6XHRcdH1cbjExOTE6XHRcdHhza19pbmNfbnVtX2Rlc2Moc2tiKTtcbjExOTI6XHRcbjExOTM6XHRcdHJldHVybiBza2I7XG4xMTk0Olx0XG4xMTk1Olx0ZnJlZV9lcnI6XG4xMTk2Olx0XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAheHMtXHUwMDNlc2tiKVxuMTE5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExOTg6XHRcbjExOTk6XHRcdGlmIChlcnIgPT0gLUVPVkVSRkxPVykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzc4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXJgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgd2h5IGl0JiMzOTtzIGJlZW4gaW50cm9kdWNlZC4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXQgZXNzZW50aWFsbHkgc2V0cyBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgc2tiLSZndDtkYXRhYCBhbmQgYHNrYi0mZ3Q7aGVhZGAuIE1ha2VzIHNlbnNlLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZCBhbmQgd2h5PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgc29ja19hbGxvY19zZW5kX3NrYmAgb3IgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGRvbiYjMzk7dCBpbml0aWFsaXplIHRoaXMgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCwgb3IgbWF5YmUgdGhleSBkZWZhdWx0IGl0IHRvIHplcm8gKHdoaWNoIHBvaW50cyBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc2tiLSZndDtoZWFkYCBidWZmZXIpLgoKSXQgc2VlbXMgdmFyaW91cyBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgZnJvbSBkcml2ZXJzIHRvIHBhY2tldCBzY2hlZHVsZXJzIGxpa2UgcWRpc2MgYW5kIGZ1bmN0aW9ucyBsaWtlIGBkZXZfcXVldWVfeG1pdGAgb3IgWERQL0JQRiBwcm9ncmFtcywgZGVwZW5kIG9uIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXJgIGJlaW5nIGNhbGxlZCwgb3IgbW9yZSBnZW5lcmFsbHkgb24gYG5ldHdvcmtfaGVhZGVyYCBoYXZpbmcgYSB2YWxpZCByZWxhdGl2ZSBvZmZzZXQgdG8gYHNrYi0mZ3Q7ZGF0YWAuIEkgYmV0IEkmIzM5O2xsIHNlZSBzb21lIHVzYWdlIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYCBvciB3aXRoIHBhY2tldCBzb2NrZXRzLCBvciBkdXJpbmcgY2hlY2tzIHRoYXQgdXNlIGBza2JfbmV0d29ya19vZmZzZXRgLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNlIGBnaXQgYmxhbWVgIG9yIGBnaXQgbG9nYCB0byBmaW5kIHRoZSByZWxldmFudCBjaGFuZ2VzIG9yIHJlbGF0ZWQgY29kZS4gSSYjMzk7bGwgYWxzbyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcmAsIGFuZCBtYXliZSBgeHNrX3NrYl9pbml0X21pc2NgIG9yIHNpbWlsYXIgZnVuY3Rpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBwb3BzIHVwIHdpdGhpbiB0aGUgbmV0L3hkcCBkaXJlY3Rvcmllcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHdoZXJlIGl0JiMzOTtzIGNyaXRpY2FsbHkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfcmVzZXRfbmV0d29ya19oZWFkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk0NT1zdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy05NDktXG5uZXQveGRwL3hzay5jOjk1MDpcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xubmV0L3hkcC94c2suYy05NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGxpZmUgb2YgYW4gU0tCIOKAkyBzcGVjaWZpY2FsbHksIHRob3NlIGNyZWF0ZWQgd2l0aGluIHRoZSBgeHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24gb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGZyb20gaXRzIGNyZWF0aW9uIHBvaW50LiBXaGVyZSBkb2VzIGl0IGdvPyBXaGF0IGhhcHBlbnMgdG8gaXQ/IEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHVzYWdlIG9mIGB4c2tfYnVpbGRfc2tiYCB0byBnZXQgYSBzZW5zZSBvZiB3aGVyZSB0aGVzZSBTS0JzIGFyZSBpbml0aWFsbHkgY29uc3RydWN0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG1hcCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiB0aGUgU0tCLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05OTA9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMzQtXG5uZXQveGRwL3hzay5jOjEwMzU6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMzYtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTExMTAtXG5uZXQveGRwL3hzay5jOjExMTE6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTExMTItXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTExMTgtXHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG5uZXQveGRwL3hzay5jOjExMTk6XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xubmV0L3hkcC94c2suYy0xMTIwLVx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbi0tXG5uZXQveGRwL3hzay5jPTEyMTc9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTI2My1cbm5ldC94ZHAveHNrLmM6MTI2NDpcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG5uZXQveGRwL3hzay5jLTEyNjUtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFhEUCBmcmFtZXMgYXJlIGFjdHVhbGx5IHNlbnQgb3V0LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYF9feHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjb3JlIHByb2Nlc3MgYXBwZWFycyB0byBiZTogYHhza19idWlsZF9za2JgIGNvbnN0cnVjdHMgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIOKAkyB0aGUgd29ya2hvcnNlIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgaW4gdGhlIGtlcm5lbCDigJMgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgWERQIHNvY2tldCBkZXNjcmlwdG9ycyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoaXMgYHNrYmAgdGhlbiBnZXRzIHBhc3NlZCBvbiBmb3IgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHRyYW5zbWlzc2lvbiBoYXBwZW5zLCBzbyBJIGhhdmUgdG8ga2VlcCBkaWdnaW5nLiBUaGUgY29kZSBtZW50aW9ucyB0aGF0IHRoaXMgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgdmlhIGBkZXZfZGlyZWN0X3htaXRgLCBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBwb3RlbnRpYWxseSBldmVuIGBkZXZfcXVldWVfeG1pdGAuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBfX3hza19nZW5lcmljX3htaXRgIHRvIGdldCB0aGUgZGV0YWlscyBvbiAqd2hpY2gqIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIGludm9rZWQgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMsIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI1NTpcdFxuMTI1NjpcdFx0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbjEyNTc6XHRcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbjEyNTg6XHRcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbjEyNTk6XHRcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjYwOlx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4xMjYxOlx0XHRcdFx0Y29udGludWU7XG4xMjYyOlx0XHRcdH1cbjEyNjM6XHRcbjEyNjQ6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4xMjY1Olx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTI2NjpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjEyNjc6XHRcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4xMjY4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjEyNjk6XHRcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbjEyNzA6XHRcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuMTI3MTpcdFx0XHRcdGVyciA9IDA7XG4xMjcyOlx0XHRcdFx0Y29udGludWU7XG4xMjczOlx0XHRcdH1cbjEyNzQ6XHRcbjEyNzU6XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuMTI3NjpcdFxuMTI3NzpcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSkge1xuMTI3ODpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IHNrYjtcbjEyNzk6XHRcdFx0XHRjb250aW51ZTtcbjEyODA6XHRcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0XHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVx1MDAzZXF1ZXVlX2lkKTtcbjEyODM6XHRcdFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcbjEyODQ6XHRcdFx0XHQvKiBUZWxsIHVzZXItc3BhY2UgdG8gcmV0cnkgdGhlIHNlbmQgKi9cbjEyODU6XHRcdFx0XHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXHUwMDNldHgsIHhza19nZXRfbnVtX2Rlc2Moc2tiKSk7XG4xMjg2Olx0XHRcdFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4xMjg3Olx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyODg6XHRcdFx0XHRnb3RvIG91dDtcbjEyODk6XHRcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0XHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXG4xMjkyOlx0XHRcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xuMTI5MzpcdFx0XHRcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXG4xMjk0Olx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMTI5NTpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4xMjk2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjk3Olx0XHRcdH1cbjEyOTg6XHRcbjEyOTk6XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTYWZldHkgb2YgYW4gU0tCIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXMgYSBzaW1wbGUgb25lLWxpbmVyLCBhZGRpbmcgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYC4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICpzaG91bGQqIGJlIHNhZmUsIGJ1dCBsZXQmIzM5O3MgYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBvcGVuIGFueSBkb29ycyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW5mb3JtYXRpb24gbGVha3MuCgpGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55dGhpbmcgbmV3IG9uIGl0cyBvd24uIERvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgZnVuY3Rpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmA/IE5vLCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZG9pbmcgYW55IG9mIHRoYXQuIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gQW5kIGZpbmFsbHksIGRvZXMgaXQgYWx0ZXIgYW55IGJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIG5ldyBmdW5jdGlvbiBzaW1wbHkgKmluaXRpYWxpemVzKiB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb2YgdGhlIGBza2JgLCBlbnN1cmluZyB0aGF0IGl0JiMzOTtzIHNldCB0byBhIHZhbGlkIHZhbHVlLCBub3QgbGVhdmluZyBpdCBhdCBhbiB1bmRlZmluZWQgc3RhdGUuIEluIGZhY3QsIGl0JiMzOTtzIGFjdHVhbGx5IGRvaW5nIHNvbWUgaGVscGZ1bCBpbml0aWFsaXphdGlvbi4KClRoaXMgYWN0dWFsbHkgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgS01TQU4uIFRoZSBjaGVja3MgdXNlZCBieSBLQVNBTiBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaCB0byBoYW5kbGUgdGhpcyBwYXRjaCBpZiBhbnl0aGluZyB3ZXJlIHRvIGdvIHdyb25nLgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZGluZyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBmb3IgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aC4gSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5ld2x5IGNyZWF0ZWQgU0tCcyBiZWZvcmUgdGhleSBhcmUgdHJhbnNtaXR0ZWQgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdCgpYC4gU28sIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBsZWFrcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHNrYiBpbiB0aGUgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgcGF0aC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjA3LjU3NTc2NzUyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTk0ODA3NDM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjA3LjU3NTc3MzA2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NTg5NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzkyOTM5ZTkwYTFiN2E1ZDZiNDczYTcwMWQyNmI2ODI0MmQzMzJiMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC05NDcsNiArOTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6MDguMDkyODU3MDQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzAzNDUyMjMxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3NlbmRtc2dcIixcbiAgICBcInhza19kZXN0cnVjdF9za2JcIixcbiAgICBcInhza19iaW5kXCIsXG4gICAgXCJ4c2tfc2V0c29ja29wdFwiLFxuICAgIFwieHNrX3BvbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjkzOWU5MGExYjdhNWQ2YjQ3M2E3MDFkMjZiNjgyNDJkMzMyYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgKzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6MDguMDkyODU4MzY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwODY2OTY2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgWFNLIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3hkcC94c2suY2AuIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGFkZGl0aW9uOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgeHNrX3NrYl9pbml0X21pc2NgIGlzIGRvaW5nLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoaXMgbW9kdWxlLiBXaGF04oCZcyBpdHMgb3ZlcmFsbCBwdXJwb3NlIGluIHRoZSBYRFAvQUZfWERQIGxpZmVjeWNsZT8gR2l2ZW4gdGhpcyBhZGRpdGlvbiwgd2hhdCBpcyB0aGUgKnJlYXNvbiogZm9yIG5lZWRpbmcgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIGF0IHRoaXMgc3RhZ2U/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcGFja2V0IHByb2Nlc3Npbmcgb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIGJ1ZyBmaXggb3Igc2VjdXJpdHkgY29uY2VybiB0aGlzIGFkZHJlc3Nlcz9cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmU6IHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBBRl9YRFA/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIG9wdGlvbnMgb3IgYnVpbGQgZmxhZ3MgdGhhdCBpbmZsdWVuY2UgaG93IHRoaXMgY29kZSBiZWhhdmVzPyBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGFueSBrZXJuZWwgbW9kdWxlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIEFGX1hEUCBhcmUgbG9hZGluZywgb3Igbm90LCB3aGVuIEkgZXhwZWN0IHRoZW0gdG8gYmUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCB3aGF0IGlzIGhhcHBlbmluZyBfYmVmb3JlXyB0aGlzIGFuZCBfYWZ0ZXJfIHRoaXM/IFRoYXQncyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlICp3aHkqLiBJZGVudGlmeWluZyB0aGUgY3JpdGljYWwgZW50cnlwb2ludCBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZm9ybWluZyBhIGNvaGVyZW50IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBzbWFsbCBjaGFuZ2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGFuZCBwYWNrZXQgZmxvdyB3aXRoaW4gWERQLiBJJ2xsIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiB0byBzZWUgdGhlIGltbWVkaWF0ZSBlZmZlY3QsIGFuZCB0aGUgbG9uZ2VyLXRlcm0gaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY4LCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6NDUuMTc5NTU4OTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG4gOTgwOlxcdFxcbiA5ODE6XFx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbiA5ODQ6XFx0XFxuIDk4NTpcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5ODY6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gOTg3OlxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbiA5ODg6XFx0fVxcbiA5ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjQ1LjE3OTczNDc4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY1ODQzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTE4Ni1cXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG5uZXQveGRwL3hzay5jOjExODc6XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxubmV0L3hkcC94c2suYy0xMTg4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOToyOTo0NS40NDYzMjQzMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MTkwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWFNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9NDA0PXN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDA1LXtcXG5uZXQveGRwL3hzay5jOjQwNjpcXHRpZiAoUkVBRF9PTkNFKHhzLVxcdTAwM2VzdGF0ZSkgPT0gWFNLX0JPVU5EKSB7XFxubmV0L3hkcC94c2suYy00MDctXFx0XFx0LyogTWF0Y2hlcyBzbXBfd21iKCkgaW4gYmluZCgpLiAqL1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00ODUtXFxubmV0L3hkcC94c2suYzo0ODY6XFx0aWYgKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XFxubmV0L3hkcC94c2suYy00ODctXFx0XFx0bGVuID0geGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ5Nj1zdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNDk5LVxcbm5ldC94ZHAveHNrLmM6MTUwMDpcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19CT1VORClcXG5uZXQveGRwL3hzay5jLTE1MDEtXFx0XFx0cmV0dXJuO1xcbm5ldC94ZHAveHNrLmM6MTUwMjpcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX1VOQk9VTkQpO1xcbm5ldC94ZHAveHNrLmMtMTUwMy1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTYxNj1zdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2NDEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jOjE2NDI6XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG5uZXQveGRwL3hzay5jLTE2NDMtXFx0XFx0ZXJyID0gLUVCVVNZO1xcbi0tXFxubmV0L3hkcC94c2suYy0xNzk3LVxcdFxcdHNtcF93bWIoKTtcXG5uZXQveGRwL3hzay5jOjE3OTg6XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XFxubmV0L3hkcC94c2suYy0xNzk5LVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTgxND1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MzYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jOjE4Mzc6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG5uZXQveGRwL3hzay5jLTE4MzgtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbi0tXFxubmV0L3hkcC94c2suYy0xODc0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYzoxODc1OlxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVxcdTAwM2V1bWVtKSB7XFxubmV0L3hkcC94c2suYy0xODc2LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwMy1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmM6MTkwNDpcXHRcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xcbm5ldC94ZHAveHNrLmMtMTkwNS1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTIwODU9c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA5My1cXG5uZXQveGRwL3hzay5jOjIwOTQ6XFx0aWYgKHN0YXRlICE9IFhTS19SRUFEWSBcXHUwMDI2XFx1MDAyNiBzdGF0ZSAhPSBYU0tfQk9VTkQpXFxubmV0L3hkcC94c2suYy0yMDk1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMDQtXFx0XFx0aWYgKG9mZnNldCA9PSBYRFBfVU1FTV9QR09GRl9GSUxMX1JJTkcpXFxubmV0L3hkcC94c2suYzoyMTA1OlxcdFxcdFxcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXFx1MDAzZWZxX3RtcCkgOlxcbm5ldC94ZHAveHNrLmMtMjEwNi1cXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHhzLVxcdTAwM2Vwb29sLVxcdTAwM2VmcSk7XFxubmV0L3hkcC94c2suYy0yMTA3LVxcdFxcdGVsc2UgaWYgKG9mZnNldCA9PSBYRFBfVU1FTV9QR09GRl9DT01QTEVUSU9OX1JJTkcpXFxubmV0L3hkcC94c2suYzoyMTA4OlxcdFxcdFxcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXFx1MDAzZWNxX3RtcCkgOlxcbm5ldC94ZHAveHNrLmMtMjEwOS1cXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHhzLVxcdTAwM2Vwb29sLVxcdTAwM2VjcSk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTIxOTI9c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMjIyLVxcdHhzID0geGRwX3NrKHNrKTtcXG5uZXQveGRwL3hzay5jOjIyMjM6XFx0eHMtXFx1MDAzZXN0YXRlID0gWFNLX1JFQURZO1xcbm5ldC94ZHAveHNrLmMtMjIyNC1cXHR4cy1cXHUwMDNlbWF4X3R4X2J1ZGdldCA9IFRYX0JBVENIX1NJWkU7XFxuLS1cXG5uZXQveGRwL3hzay5oLTMtXFxubmV0L3hkcC94c2suaDo0OiNpZm5kZWYgWFNLX0hfXFxubmV0L3hkcC94c2suaDo1OiNkZWZpbmUgWFNLX0hfXFxubmV0L3hkcC94c2suaC02LVxcbi0tXFxubmV0L3hkcC94c2suaD0zOD1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmgtNDAtXFxubmV0L3hkcC94c2suaDo0MTojZW5kaWYgLyogWFNLX0hfICovXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0xNDU9c3RhdGljIHZvaWQgeHBfZGlzYWJsZV9kcnZfemMoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0xNTItXFx0aWYgKHBvb2wtXFx1MDAzZXVtZW0tXFx1MDAzZXpjKSB7XFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MTUzOlxcdFxcdGJwZi5jb21tYW5kID0gWERQX1NFVFVQX1hTS19QT09MO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTE1NC1cXHRcXHRicGYueHNrLnBvb2wgPSBOVUxMO1xcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTY0PWludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjExLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjIxMjpcXHRpZiAoKG5ldGRldi1cXHUwMDNleGRwX2ZlYXR1cmVzIFxcdTAwMjYgTkVUREVWX1hEUF9BQ1RfWFNLKSAhPSBORVRERVZfWERQX0FDVF9YU0spIHtcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yMTMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yNDItXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MjQzOlxcdGJwZi5jb21tYW5kID0gWERQX1NFVFVQX1hTS19QT09MO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI0NC1cXHRicGYueHNrLnBvb2wgPSBwb29sO1xcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9Mzg5PXN0YXRpYyB2b2lkIF9feHBfZG1hX3VubWFwKHN0cnVjdCB4c2tfZG1hX21hcCAqZG1hX21hcCwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTM5Ni1cXHRcXHRpZiAoKmRtYSkge1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjM5NzpcXHRcXHRcXHQqZG1hIFxcdTAwMjY9IH5YU0tfTkVYVF9QR19DT05USUdfTUFTSztcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0zOTgtXFx0XFx0XFx0ZG1hX3VubWFwX3BhZ2VfYXR0cnMoZG1hX21hcC1cXHUwMDNlZGV2LCAqZG1hLCBQQUdFX1NJWkUsXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz00MzA9c3RhdGljIHZvaWQgeHBfY2hlY2tfZG1hX2NvbnRpZ3VpdHkoc3RydWN0IHhza19kbWFfbWFwICpkbWFfbWFwKVxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM1LVxcdFxcdGlmIChkbWFfbWFwLVxcdTAwM2VkbWFfcGFnZXNbaV0gKyBQQUdFX1NJWkUgPT0gZG1hX21hcC1cXHUwMDNlZG1hX3BhZ2VzW2kgKyAxXSlcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0MzY6XFx0XFx0XFx0ZG1hX21hcC1cXHUwMDNlZG1hX3BhZ2VzW2ldIHw9IFhTS19ORVhUX1BHX0NPTlRJR19NQVNLO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQzNy1cXHRcXHRlbHNlXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6NDM4OlxcdFxcdFxcdGRtYV9tYXAtXFx1MDAzZWRtYV9wYWdlc1tpXSBcXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM5LVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTc0OT1zdGF0aWMgZG1hX2FkZHJfdCBfX3hwX3Jhd19nZXRfZG1hKGNvbnN0IHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1MS1cXHRyZXR1cm4gKHBvb2wtXFx1MDAzZWRtYV9wYWdlc1thZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlRdIFxcdTAwMjZcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3NTI6XFx0XFx0flhTS19ORVhUX1BHX0NPTlRJR19NQVNLKSArXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzUzLVxcdFxcdChhZGRyIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuLS1cXG5uZXQveGRwL3hza19kaWFnLmM9OTI9c3RhdGljIGludCB4c2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L3hkcC94c2tfZGlhZy5jLTExMy1cXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrX2RpYWcuYzoxMTQ6XFx0aWYgKFJFQURfT05DRSh4cy1cXHUwMDNlc3RhdGUpID09IFhTS19VTkJPVU5EKVxcbm5ldC94ZHAveHNrX2RpYWcuYy0xMTUtXFx0XFx0Z290byBvdXRfbmxtc2dfdHJpbTtcXG4tLVxcbm5ldC94ZHAveHNrX3F1ZXVlLmgtNS1cXG5uZXQveGRwL3hza19xdWV1ZS5oOjY6I2lmbmRlZiBfTElOVVhfWFNLX1FVRVVFX0hcXG5uZXQveGRwL3hza19xdWV1ZS5oOjc6I2RlZmluZSBfTElOVVhfWFNLX1FVRVVFX0hcXG5uZXQveGRwL3hza19xdWV1ZS5oLTgtXFxuLS1cXG5uZXQveGRwL3hza19xdWV1ZS5oPTUzNT12b2lkIHhza3FfZGVzdHJveShzdHJ1Y3QgeHNrX3F1ZXVlICpxX29wcyk7XFxubmV0L3hkcC94c2tfcXVldWUuaC01MzYtXFxubmV0L3hkcC94c2tfcXVldWUuaDo1Mzc6I2VuZGlmIC8qIF9MSU5VWF9YU0tfUVVFVUVfSCAqL1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3hkcC94c2ttYXAuYzoyOi8qIFhTS01BUCB1c2VkIGZvciBBRl9YRFAgc29ja2V0c1xcbm5ldC94ZHAveHNrbWFwLmMtMy0gKiBDb3B5cmlnaHQoYykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6NDUuNTA0MTQ4MjQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxMTE2NTM5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFAgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciBYRFAsIHNwZWNpZmljYWxseSB3aGVyZSBgeHNrX2J1aWxkX3NrYmAgaXMgdXNlZCBhbmQgaG93IGB4c2suY2AgaXMgdWx0aW1hdGVseSBjb21waWxlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCB0cmFjZSB0aGUgY2FsbHMgdG8gYHhza19idWlsZF9za2JgLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzIOKAkyB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIGFuZCBgbmV0L3hkcC9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBYRFAgY29tcG9uZW50cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucy4gSSdtIGhvcGluZyB0aG9zZSB0d28gZmlsZXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgbmVjZXNzYXJ5IGJ1aWxkIHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzY5LCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjYxNTgwNDEyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbiAgIDM6XFx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjYxNTg1NjUwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc1Mjk3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQveGRwL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0xMy1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXFxubmV0L3hkcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrX2J1ZmZfcG9vbC5vXFxubmV0L3hkcC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjkzMzM5MTYxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjI5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMwOjAwLjA0NDAyODI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDM4MzY2MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIFhEUCBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQveGRwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBpbXBsaWNhdGlvbnMgc3Vycm91bmRpbmcgYENPTkZJR19YRFBfU09DS0VUU2AuIEknbSBnb2luZyB0byBsb29rIGF0IGhvdyB0aGlzIGlzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHdoZXJlIGl0J3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgWERQIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlZmF1bHRzIG9yIHBvdGVudGlhbGx5IGhpZGRlbiBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBgQ09ORklHX1hEUF9TT0NLRVRTYC4gSSdtIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgc3VjaCBhcyB0aGUgc29ja2V0LWJhc2VkIFhEUCBpbmZyYXN0cnVjdHVyZSdzIGF2YWlsYWJpbGl0eS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgZm9jdXMgb24gdGhlIGZpbmUtZ3JhaW5lZCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMxOjAwLjQyNzY5MzkyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMxOjAwLjQyNzgxMDE4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDEzMjQyMDk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhEUCBTb2NrZXRzOiBEZXBlbmRlbmNpZXMgYW5kIHRoZSBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWERQIHNvY2tldHMsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCB3b24ndCBiZSBlbmFibGVkIHVubGVzcyB3ZSBhbHNvIGhhdmUgYEJQRl9TWVNDQUxMYCAodGhhdCdzIGNydWNpYWwgZm9yIHRoZSBCUEYgcGFydCwgbmF0dXJhbGx5KSBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIHdoaWNoIGlzIGBORVRgLiBUaG9zZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgcGF0aCB3aGVuIHdlJ3JlIGluIHRoZSBnZW5lcmljIGNvcHkgbW9kZSBhbmQgYWxzbyBsb29rIGF0IGhvdyB0aGUgWERQIHNvY2tldCBzZW5kL3R4IHdvcmtzLiBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBgeHNrX2J1aWxkX3NrYmAgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBTS0IgaXMgYnVpbHQuIEknbGwgbmVlZCB0byByZW1lbWJlciBhbGwgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBzb2NrZXQgc2VuZCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYyB0aHJvdWdoIGFsbCB0aGUgbGF5ZXJzIGFuZCBzZWUgd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgY29waWVkLCBob3cgaXQncyBoYW5kbGVkIGF0IHRoZSBkcml2ZXIgYW5kIHRoZSBzdGFjay4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGF0IGRhdGEgbW92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM1OjAxLjc1MjAyNDU1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MzI1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19idWlsZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05OTA9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAzNC1cXG5uZXQveGRwL3hzay5jOjEwMzU6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDM2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTExMC1cXG5uZXQveGRwL3hzay5jOjExMTE6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMTEyLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTE4LVxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbm5ldC94ZHAveHNrLmM6MTExOTpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcXG5uZXQveGRwL3hzay5jLTExMjAtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMTc9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMjYzLVxcbm5ldC94ZHAveHNrLmM6MTI2NDpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMjY1LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozNTowMi4zMDEzNTQ5MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3ODk2NDY1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB3cml0dGVuIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRFAgVHJhbnNtaXNzaW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNvbGlkaWZ5IG15IGdyYXNwIG9uIHRoZSBYRFAgdHJhbnNtaXNzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX3NlbmRtc2dgLCBhbmQgYHhza19wb2xsYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgZG9lcywgc28gSSBjYW4gbWVudGFsbHkgbWFwIG91dCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGUgWERQIGZyYW1ld29yay4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBwYWNrZXQgaXMgaGFuZGxlZCwgYW5kIGhvdyB0aGUgdHJhbnNtaXNzaW9uIGlzIGluaXRpYXRlZC4gSXQncyBjcnVjaWFsIGZvciBteSBjdXJyZW50IHRhc2sgdG8gaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjA4LjA5MTAwNDA1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdC8qIExldCBhcHBsaWNhdGlvbiByZXRyeSAqL1xcbjEyMTE6XFx0XFx0XFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIDEpO1xcbjEyMTI6XFx0XFx0fVxcbjEyMTM6XFx0XFxuMTIxNDpcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjEyMTU6XFx0fVxcbjEyMTY6XFx0XFxuMTIxNzpcXHRzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuMTIxODpcXHR7XFxuMTIxOTpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcXG4xMjIwOlxcdFxcdHN0cnVjdCB4ZHBfZGVzYyBkZXNjO1xcbjEyMjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMjIyOlxcdFxcdHUzMiBjYWNoZWRfY29ucztcXG4xMjIzOlxcdFxcdHUzMiBtYXhfYmF0Y2g7XFxuMTIyNDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4xMjI3OlxcdFxcdGNhY2hlZF9jb25zID0geHMtXFx1MDAzZXR4LVxcdTAwM2VjYWNoZWRfY29ucztcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0LyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovXFxuMTIzMDpcXHRcXHRpZiAodW5saWtlbHkoIXhza19pc19ib3VuZCh4cykpKSB7XFxuMTIzMTpcXHRcXHRcXHRlcnIgPSAtRU5YSU87XFxuMTIzMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjMzOlxcdFxcdH1cXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0aWYgKHhzLVxcdTAwM2VxdWV1ZV9pZCBcXHUwMDNlPSB4cy1cXHUwMDNlZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXFxuMTIzNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjM3OlxcdFxcbjEyMzg6XFx0XFx0bWF4X2JhdGNoID0gUkVBRF9PTkNFKHhzLVxcdTAwM2VtYXhfdHhfYnVkZ2V0KTtcXG4xMjM5OlxcdFxcdHdoaWxlICh4c2txX2NvbnNfcGVla19kZXNjKHhzLVxcdTAwM2V0eCwgXFx1MDAyNmRlc2MsIHhzLVxcdTAwM2Vwb29sKSkge1xcbjEyNDA6XFx0XFx0XFx0aWYgKG1heF9iYXRjaC0tID09IDApIHtcXG4xMjQxOlxcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTI0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjQzOlxcdFxcdFxcdH1cXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0XFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguXFxuMTI0NjpcXHRcXHRcXHQgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGFuZCBvbmx5IHByb2NlZWRcXG4xMjQ3OlxcdFxcdFxcdCAqIGlmIHRoZXJlIGlzIHNwYWNlIGluIGl0LiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gaW1wbGVtZW50XFxuMTI0ODpcXHRcXHRcXHQgKiBhbnkgYnVmZmVyaW5nIGluIHRoZSBUeCBwYXRoLlxcbjEyNDk6XFx0XFx0XFx0ICovXFxuMTI1MDpcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbjEyNTE6XFx0XFx0XFx0aWYgKGVycikge1xcbjEyNTI6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjUzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNTQ6XFx0XFx0XFx0fVxcbjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRcXHRpZiAodW5saWtlbHkoeHMtXFx1MDAzZWRyYWluX2NvbnQpKSB7XFxuMTI1NzpcXHRcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbjEyNTg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuMTI1OTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNjA6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4xMjYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNjI6XFx0XFx0XFx0fVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuMTI2NTpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMjY2OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4xMjY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNjk6XFx0XFx0XFx0XFx0aWYgKHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpKVxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbjEyNzE6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNzM6XFx0XFx0XFx0fVxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpIHtcXG4xMjc4OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBza2I7XFxuMTI3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjgwOlxcdFxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0ZXJyID0gX19kZXZfZGlyZWN0X3htaXQoc2tiLCB4cy1cXHUwMDNlcXVldWVfaWQpO1xcbjEyODM6XFx0XFx0XFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcXG4xMjg0OlxcdFxcdFxcdFxcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xcbjEyODU6XFx0XFx0XFx0XFx0eHNrcV9jb25zX2NhbmNlbF9uKHhzLVxcdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcXG4xMjg2OlxcdFxcdFxcdFxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbjEyODc6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXFxuMTI5MjpcXHRcXHRcXHRpZiAoZXJyID09IE5FVF9YTUlUX0RST1ApIHtcXG4xMjkzOlxcdFxcdFxcdFxcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXFxuMTI5NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTI5NTpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4xMjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyOTc6XFx0XFx0XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6MzY6MDguMDkxMTIzMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzM1OTUzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWFNLIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX3hza19nZW5lcmljX3htaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIFNLQiB1c2luZyBgeHNrX2J1aWxkX3NrYmAgYW5kIHRoZW4gaW52b2tpbmcgYF9fZGV2X2RpcmVjdF94bWl0YCB3aXRoIHRoZSBTS0IgYW5kIHRoZSBxdWV1ZSBJRC4gVGhlIGFkZGl0aW9uIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzY2AgaXMgdGhlIGtleSBwb2ludCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIHJlc2V0P1wiXG5cbkl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGluIHNjZW5hcmlvcyB3aGVyZSB0aGUgU0tCIGlzIGJlaW5nIHRyYW5zbWl0dGVkIGRpcmVjdGx5IHZpYSBgX19kZXZfZGlyZWN0X3htaXRgLCBvciB0aHJvdWdoIHRoZSBtb3JlIGNvbXBsZXggbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzIGxpa2UgVEMsIG5ldGZpbHRlciwgcWRpc2MsIG9yIGV2ZW4gYXQgdGhlIGRyaXZlciBsZXZlbCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgaXMgYmVpbmcgcmVhZCBvciBhY2Nlc3NlZC4gSWYgdGhpcyBoZWFkZXIgaXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IsIGFzIGlzIHRoZSBjYXNlIGhlcmUsIGV4cGxpY2l0bHkgcmVzZXQsIHdlJ3JlIGxpa2VseSBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgZm9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWx3YXlzIGEgY29uY2Vybi4gVGhlIHJlc2V0IG9wZXJhdGlvbiBpcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlLlxuXG5UaGlzIG1ha2VzIHNlbnNlLiBJZiB3ZSdyZSByZWx5aW5nIG9uIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhpcyBoZWxwcyBtYWludGFpbiB0aGUgcHJvcGVyIHN0YXRlIGFuZCBwcmV2ZW50cyB0aG9zZSBidWdzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHdobyBpcyBjYWxsaW5nIGBfX3hza19nZW5lcmljX3htaXRgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjQ3LjgyNzA3OTcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEyODM5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEzMzI9c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMzNy1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQveGRwL3hzay5jOjEzMzg6XFx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTEzMzktXFx0LyogUmVhcXVpcmUgUkNVIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gY29tbW9uIGNvZGUuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjQ4LjM4ODM2OTIxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY3MzU1NDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHhza19nZW5lcmljX3htaXRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgeHNrX2dlbmVyaWNfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dCwgYW5kIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIFhEUC9BRl9YRFAgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGRpZmZlcmVudCBwYXRocyBvZiBleGVjdXRpb24gdGhhdCBlbmQgdXAgdXNpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgbWlnaHQgYmUgaW4gdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzc6NDUuMDYxOTI4ODA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM5MjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMzEtXFxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMzNy1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQveGRwL3hzay5jOjEzMzg6XFx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTEzMzktXFx0LyogUmVhcXVpcmUgUkNVIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gY29tbW9uIGNvZGUuICovXFxuLS1cXG5uZXQveGRwL3hzay5jPTEzNjY9c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTEtXFx0XFx0XFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xcbm5ldC94ZHAveHNrLmM6MTM5MjpcXHRcXHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XFxubmV0L3hkcC94c2suYy0xMzkzLVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ0NT1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NjUtXFx0XFx0XFx0LyogUG9sbCBuZWVkcyB0byBkcml2ZSBUeCBhbHNvIGluIGNvcHkgbW9kZSAqL1xcbm5ldC94ZHAveHNrLmM6MTQ2NjpcXHRcXHRcXHR4c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTE0NjctXFx0fVxcbi0tXFxubmV0L3hkcC94c2suYz0yMjY2PXN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyODUtXFxubmV0L3hkcC94c2suYzoyMjg2OlxcdHhza190eF9nZW5lcmljX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcInhza19nZW5lcmljX3htaXRfY2FjaGVcXFwiLFxcbm5ldC94ZHAveHNrLmMtMjI4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB4c2tfYWRkcnMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozNzo0NS4xMzAzMjYyNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMDU2NjI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFhTSyBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYF9feHNrX3NlbmRtc2dgIGFuZCBgeHNrX3BvbGxgLiBUaG9zZSBhcmUgdGhlIGJyZWFkLWFuZC1idXR0ZXIgb3BlcmF0aW9ucyBmb3IgQUZfWERQIHNvY2tldHMg4oCTIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgd2UnZCBleHBlY3QuIE1ha2VzIHNlbnNlLiBUaGV5J3JlIHRoZSBjb3JlIG9mIGhvdyB5b3UgcHVzaCBhbmQgcHVsbCBkYXRhIHVzaW5nIFhEUC4gQmVmb3JlIGRpdmluZyBmdXJ0aGVyIGludG8gYSBzcGVjaWZpYyBpc3N1ZSwgb3IgbWF5YmUganVzdCB0byByZWZyZXNoIG15IG1lbW9yeSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBvcHNgIHN0cnVjdCBmb3IgdGhlIFhTSyBzb2NrZXQuIFNlZWluZyB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXZhaWxhYmxlLCBvciBwZXJoYXBzIHRoZSB3YXkgdGhleSdyZSBpbXBsZW1lbnRlZCwgbWlnaHQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBzb2NrZXQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzg6MDkuMjM1OTkyNTYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbjIxNjI6XFx0XFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbjIxNjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yMTY0OlxcdFxcdC5yZWxlYXNlXFx0PSB4c2tfcmVsZWFzZSxcXG4yMTY1OlxcdFxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG4yMTY2OlxcdFxcdC5jb25uZWN0XFx0PSBzb2NrX25vX2Nvbm5lY3QsXFxuMjE2NzpcXHRcXHQuc29ja2V0cGFpclxcdD0gc29ja19ub19zb2NrZXRwYWlyLFxcbjIxNjg6XFx0XFx0LmFjY2VwdFxcdFxcdD0gc29ja19ub19hY2NlcHQsXFxuMjE2OTpcXHRcXHQuZ2V0bmFtZVxcdD0gc29ja19ub19nZXRuYW1lLFxcbjIxNzA6XFx0XFx0LnBvbGxcXHRcXHQ9IHhza19wb2xsLFxcbjIxNzE6XFx0XFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbjIxNzI6XFx0XFx0Lmxpc3RlblxcdFxcdD0gc29ja19ub19saXN0ZW4sXFxuMjE3MzpcXHRcXHQuc2h1dGRvd25cXHQ9IHNvY2tfbm9fc2h1dGRvd24sXFxuMjE3NDpcXHRcXHQuc2V0c29ja29wdFxcdD0geHNrX3NldHNvY2tvcHQsXFxuMjE3NTpcXHRcXHQuZ2V0c29ja29wdF9pdGVyID0geHNrX2dldHNvY2tvcHQsXFxuMjE3NjpcXHRcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxuMjE3NzpcXHRcXHQucmVjdm1zZ1xcdD0geHNrX3JlY3Ztc2csXFxuMjE3ODpcXHRcXHQubW1hcFxcdFxcdD0geHNrX21tYXAsXFxuMjE3OTpcXHR9O1xcbjIxODA6XFx0XFxuMjE4MTpcXHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbjIxODI6XFx0e1xcbjIxODM6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxODY6XFx0XFx0XFx0cmV0dXJuO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAoIXhwX3B1dF9wb29sKHhzLVxcdTAwM2Vwb29sKSlcXG4yMTg5OlxcdFxcdFxcdHhkcF9wdXRfdW1lbSh4cy1cXHUwMDNldW1lbSwgIXhzLVxcdTAwM2Vwb29sKTtcXG4yMTkwOlxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIxOTM6XFx0XFx0XFx0ICAgICAgaW50IGtlcm4pXFxuMjE5NDpcXHR7XFxuMjE5NTpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbjIxOTY6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXFxuMjE5OTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIyMDA6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgIT0gU09DS19SQVcpXFxuMjIwMTpcXHRcXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDtcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0aWYgKHByb3RvY29sKVxcbjIyMDQ6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjIwNTpcXHRcXG4yMjA2OlxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9YRFAsIEdGUF9LRVJORUwsIFxcdTAwMjZ4c2tfcHJvdG8sIGtlcm4pO1xcbjIyMDk6XFx0XFx0aWYgKCFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzg6MDkuMjM2MjkxNzExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3OTE5MjY5MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQUZfWERQIFBhY2tldCBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgZW5naW5lOiBBRl9YRFAgc29ja2V0cyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHBhY2tldHMgZ2V0IHRyYW5zbWl0dGVkIHZpYSB0aGUgY29weSBtb2RlIHdpdGhpbiBBRl9YRFAuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIkNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGluIG15IHR5cGljYWwgZW52aXJvbm1lbnRzP1wiIEFuZCB0aGUgYW5zd2VyIGhlcmUgaXMgYSBzb2xpZCBcIlllcy5cIiBBRl9YRFAgaXMgcGVyZmVjdGx5IGhhcHB5IHJ1bm5pbmcgb24gbG9vcGJhY2ssIHZldGgsIG9yIGFueSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGluIGNvcHkgbW9kZSwgd2hpY2ggY292ZXJzIGdlbmVyaWMgWERQIGFuZCBnZW5lcmljIFhTSyBtb2RlcyDigJMgdGhvc2UgYXJlIGNvbW1vbiBzZXR1cHMsIGFuZCBJIGtub3cgSSBjYW4gZWFzaWx5IGdldCB0aGlzIHJ1bm5pbmcuXG5cbk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIGBza19idWZmYCBhbmQgYWN0dWFsbHkgKnNlbmRpbmcqIHRoZSBwYWNrZXQsIHRoaW5ncyBsaWtlIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrX3NlbmRtc2dgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGZpcmluZyBsaW5lLiBUaGF0IHdob2xlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aCBpcyBhIHBvdGVudGlhbCBnb2xkIG1pbmUgZm9yIGZpbmRpbmcgYnVncy4gSSBrbm93IHRoYXQga2luZCBvZiBsb3cgbGV2ZWwgcGFja2V0IGNvbnN0cnVjdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreSBhbmQgdnVsbmVyYWJpbGl0aWVzIGNhbiBoaWRlLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIGZ1enplcnMgYXQgaXQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IGBYRFBfU09DS0VUU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLiBUaGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGVpdGhlciBvZiB0aG9zZSBvcHRpb25zIGhhdmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGhhcm5lc3MgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozOTozNy4xNTU1NjM5NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzk4MzQ1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozOTozNy41ODM1NzEwNzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1OTEyNjg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIEJQRl9TWVNDQUxMIGluIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgQlBGX1NZU0NBTExgIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXNuJ3QgdXN1YWxseSBhIHRyaXZpYWwgdGFzazsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBLY29uZmlnIGZpbGVzLCBvZnRlbiBuZXN0ZWQgZGVlcCB3aXRoaW4gZmVhdHVyZSBkaXJlY3RvcmllcyBhbmQgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZmluZGAgb3IgYGdyZXBgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsaWtlbHkgdXNpbmcgYSBwYXR0ZXJuIHRoYXQncyBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlIHRvIHN0YXJ0LCBwZXJoYXBzIGBncmVwICdCUEZfU1lTQ0FMTCcgS2NvbmZpZyogLXJgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MuIFRoZW4sIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIG1hdGNoLCBsb29raW5nIGZvciB0aGUgYGNvbmZpZ2Aga2V5d29yZCBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIChlLmcuLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuKS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbWVudSBzdHJ1Y3R1cmUsIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCwgYW5kIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgYXNzb2NpYXRlZCBDIGNvZGUgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBvciBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24uIFRoaXMgbWlnaHQgbWVhbiBuZWVkaW5nIHRvIHRyYXZlcnNlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGV4cG9zZSBvciBlbmFibGUgYEJQRl9TWVNDQUxMYCAuIElmIHRoYXQgZ2V0cyB0b28gY29tcGxleCwgSSdsbCBmYWxsIGJhY2sgdG8ga2VybmVsIGJ1aWxkIHN5c3RlbSBvcHRpb25zLCBsaWtlIGxvb2tpbmcgZm9yIEtjb25maWcgaW5jbHVkZXMgb3Igb3RoZXIgaGludHMgZnJvbSBidWlsZCBzY3JpcHRzLiBUaGlzIGlzIGFsbCBhYm91dCBuYXZpZ2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIG1hemUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDA6MTEuMTc0ODQyNjg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjM0NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQwOjEyLjgyMTA4MzA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODMwMjc0NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIG15IGluaXRpYWwgaHVuY2ggdGVsbHMgbWUgd2UgbmVlZCB0byBleGFtaW5lIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI3LiBJdCdzIGxpa2VseSB0aGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBlQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVzaWRlcyBhcm91bmQgdGhhdCBhcmVhLiBUaGlzIHdvdWxkIGJlIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlmIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIGlzc3Vlcy4gV2Ugd2lsbCBzZWUgaWYgdGhlIGxpbmUgYW5kIGFyb3VuZCB0aGF0IHJlZ2lvbiBoYXMgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0MDo1MS4xMjM4MzI2NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQwOjUxLjEyMzk0MDI0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY0Mjk0MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgU29ja2V0cyBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQveGRwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgYW5kIGl0J3MgYSBib29sZWFuLCBhcyBleHBlY3RlZC4gR29vZCwgZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSBBRl9YRFAgcGF0aC4gTGV0J3MgdHJhY2UgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzIGFuZCBmdW5jdGlvbnMgaW4gYG5ldC94ZHAveHNrLmNgIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9uZXMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQgYXJlOiBgeHNrX3NlbmRtc2dgIChvciBwb3NzaWJseSBgX194c2tfc2VuZG1zZ2ApLCBgeHNrX3BvbGxgLCBgeHNrX2JpbmRgLCBgeHNrX3NldHNvY2tvcHRgLCBgeHNrX21tYXBgLCBgeHNrX2NyZWF0ZWAsIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMsIGxpa2UgYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYW5kIGB4c2tfYmluZGAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBvciBub3QuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUzMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjE4Ljc2Njg4MzQ3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NTc2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTM1Nj1zdGF0aWMgaW50IHhza19jaGVja19jb21tb24oc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM2NS1cXG5uZXQveGRwL3hzay5jOjEzNjY6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MDEtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC94ZHAveHNrLmM6MTQwMjpcXHRyZXQgPSBfX3hza19zZW5kbXNnKHNvY2ssIG0sIHRvdGFsX2xlbik7XFxubmV0L3hkcC94c2suYy0xNDAzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L3hkcC94c2suYz0yMTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxNzUtXFx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxcbm5ldC94ZHAveHNrLmM6MjE3NjpcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxubmV0L3hkcC94c2suYy0yMTc3LVxcdC5yZWN2bXNnXFx0PSB4c2tfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MTkuMTc0NDY2NzMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDkwNTg2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgWFNLIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC94ZHAveHNrLmNgIGZpbGUuIEkgc2VlIHRoZSBjb3JlIFhTSyBmdW5jdGlvbiBjYWxsczogYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19tbWFwYCwgYHhza19zZXRzb2Nrb3B0YCwgYW5kIGB4c2tfZGVzdHJ1Y3Rfc2tiYCBhcmUgYWxsIGRlZmluZWQgaGVyZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB4c2tfZGVzdHJ1Y3Rfc2tiYCByaWdodCBub3c7IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBTS0IgbGlmZWN5Y2xlLiBHb29kLCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZmlsZS4gVGhhdCdzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIG5hbWUuIE5vdywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGJhY2sgYXQgdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGtleSBmdW5jdGlvbnMuIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgWFNLIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MzIuNjY1MDU1NDA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKC4qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XFxubmV0L3hkcC94c2suYy01MC1cXG5uZXQveGRwL3hzay5jOjUxOnZvaWQgeHNrX3NldF9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTUyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTgtfVxcbm5ldC94ZHAveHNrLmM6NTk6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTYwLVxcbm5ldC94ZHAveHNrLmM6NjE6dm9pZCB4c2tfc2V0X3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNjIte1xcbi0tXFxubmV0L3hkcC94c2suYy03NS19XFxubmV0L3hkcC94c2suYzo3NjpFWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtNzctXFxubmV0L3hkcC94c2suYzo3ODp2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTc5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODUtfVxcbm5ldC94ZHAveHNrLmM6ODY6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtODctXFxubmV0L3hkcC94c2suYzo4ODp2b2lkIHhza19jbGVhcl90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTg5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAyLX1cXG5uZXQveGRwL3hzay5jOjEwMzpFWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMDQtXFxubmV0L3hkcC94c2suYzoxMDU6Ym9vbCB4c2tfdXNlc19uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTEwNi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEwOC19XFxubmV0L3hkcC94c2suYzoxMDk6RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMTAtXFxubmV0L3hkcC94c2suYz0xMTE9c3RydWN0IHhza19idWZmX3Bvb2wgKnhza19nZXRfcG9vbF9mcm9tX3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hkcC94c2suYy0xMjAtfVxcbm5ldC94ZHAveHNrLmM6MTIxOkVYUE9SVF9TWU1CT0woeHNrX2dldF9wb29sX2Zyb21fcWlkKTtcXG5uZXQveGRwL3hzay5jLTEyMi1cXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXFxubmV0L3hkcC94c2suYy0xMjQte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzAtXFxubmV0L3hkcC94c2suYzoxMzE6dm9pZCB4c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTMyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjA4PXN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOC1cXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yMjAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yNTktXFxubmV0L3hkcC94c2suYzoyNjA6c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXFxubmV0L3hkcC94c2suYy0yNjEte1xcbi0tXFxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxcbi0tXFxubmV0L3hkcC94c2suYy0yOTUtXFxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yOTcte1xcbi0tXFxubmV0L3hkcC94c2suYy0zODgtXFxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMzkwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzk2LVxcbm5ldC94ZHAveHNrLmM6Mzk3OnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQwMy1cXG5uZXQveGRwL3hzay5jOjQwNDpzdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTQwNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYy00NTMtXFxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00NTUte1xcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTUxMy1cXG5uZXQveGRwL3hzay5jOjUxNDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNTE1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTIzLVxcbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MjUte1xcbi0tXFxubmV0L3hkcC94c2suYy01NDQtfVxcbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU1NS19XFxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XFxubmV0L3hkcC94c2suYy01NTctXFxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxubmV0L3hkcC94c2suYy01NTkte1xcbi0tXFxubmV0L3hkcC94c2suYy02MDMtfVxcbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy02MDUtXFxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy02MDcte1xcbi0tXFxubmV0L3hkcC94c2suYz02Njg9c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG5uZXQveGRwL3hzay5jOjY2OTp4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxcbm5ldC94ZHAveHNrLmMtNjcwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzQzLVxcbm5ldC94ZHAveHNrLmM6NzQ0OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbm5ldC94ZHAveHNrLmMtNzQ1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzkwLX1cXG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03OTItXFxubmV0L3hkcC94c2suYzo3OTM6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtNzk0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzk5LVxcbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtODAxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODEwLVxcbm5ldC94ZHAveHNrLmM6ODExOnN0YXRpYyBib29sIHhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MTIte1xcbi0tXFxubmV0L3hkcC94c2suYy04MTUtXFxubmV0L3hkcC94c2suYzo4MTY6c3RhdGljIHU2NCB4c2tfc2tiX2Rlc3RydWN0b3JfZ2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgyMC1cXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXFxubmV0L3hkcC94c2suYy04MjIte1xcbi0tXFxubmV0L3hkcC94c2suYy04MzMtXFxubmV0L3hkcC94c2suYzo4MzQ6c3RhdGljIHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODM1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODQ2LVxcbm5ldC94ZHAveHNrLmM6ODQ3OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODQ4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODU4LVxcbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg2MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg2OC1cXG5uZXQveGRwL3hzay5jOjg2OTpzdGF0aWMgdTMyIHhza19nZXRfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg3MC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkxMT1zdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTIzLVxcbm5ldC94ZHAveHNrLmM6OTI0OnN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcXG5uZXQveGRwL3hzay5jLTkyNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkzMT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC94ZHAveHNrLmM6OTMyOnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTQ1PXN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTYyLVxcbm5ldC94ZHAveHNrLmM6OTYzOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTY0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTgwLVxcbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTgyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMzEtXFxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM0NC1cXG5uZXQveGRwL3hzay5jOjEzNDU6c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzQ2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM1NS1cXG5uZXQveGRwL3hzay5jOjEzNTY6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xMzU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM2NS1cXG5uZXQveGRwL3hzay5jOjEzNjY6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MDctXFxubmV0L3hkcC94c2suYzoxNDA4OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDA5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQzMy1cXG5uZXQveGRwL3hzay5jOjE0MzQ6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDM1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ3OD1zdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTUtXFxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTUxMD1zdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUyOS1cXG5uZXQveGRwL3hzay5jOjE1MzA6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE1MzEte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNTU1LVxcbm5ldC94ZHAveHNrLmM6MTU1NjpzdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3hkcC94c2suYy0xNTU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU5My1cXG5uZXQveGRwL3hzay5jOjE1OTQ6c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxcbm5ldC94ZHAveHNrLmMtMTU5NS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE2MTAtXFxubmV0L3hkcC94c2suYzoxNjExOnN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE2MTIte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNjE1LVxcbm5ldC94ZHAveHNrLmM6MTYxNjpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxubmV0L3hkcC94c2suYy0xNjE3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTgxND1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MzYtXFxubmV0L3hkcC94c2suYzoxOTM3OnN0YXRpYyB2b2lkIHhza19lbnRlcl9yeHR4X29mZnNldHMoc3RydWN0IHhkcF9yaW5nX29mZnNldF92MSAqcmluZylcXG5uZXQveGRwL3hzay5jLTE5Mzgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xOTQzLVxcbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTQ1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjE2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTgwLVxcbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTIyNDU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ4LVxcbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNTAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjU1LVxcbm5ldC94ZHAveHNrLmM6MjI1NjpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjI2MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhza19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjY1LVxcbm5ldC94ZHAveHNrLmM6MjI2NjpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxcbm5ldC94ZHAveHNrLmMtMjI2Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIzMDctXFxubmV0L3hkcC94c2suYzoyMzA4OmZzX2luaXRjYWxsKHhza19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MzIuNzEzNjY0MzkzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjQ1MDQ4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBpbnZvbHZlZCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIFRoZSBjcml0aWNhbCBzeW1ib2xzIHRoYXQgbWF0dGVyIGFyZSBgeHNrX3NlbmRtc2dgLCBgeHNrX2Rlc3RydWN0X3NrYmAsIGB4c2tfZ2VuZXJpY19yY3ZgLCBgeHNrX2JpbmRgLCBhbmQgYHhza19zZXRzb2Nrb3B0YCAob3IgYHhza19wb2xsYCkuIEkgY2FuIGRlZmluaXRlbHkgc2VlIGhvdyB0aGVzZSBpbnRlcmFjdC4gVGhlbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbnMgSSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBmdXp6aW5nIHNldHVwLlxuXG5Ob3csIGxldCBtZSBhbmFseXplIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBjb3B5IG1vZGUsIHdoZW4gU0tCcyBhcmUgcmVzZXQuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGNoYW5nZXMgdG8gY29yZSBBRl9YRFAgc29ja2V0IHNlbmQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoYXQgbWFrZXMgaXQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgaWRlYWwgZm9yIHRlc3RpbmcuIFRoYXTigJlzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgdGhlIGVmZm9ydCBpcyB3b3J0aCB0aGUgcmV0dXJuLlxuXG5Ob3csIEnigJltIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gSSd2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlncywgaXNvbGF0ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgdGVzdGFibGUgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZ2V0IHRoaXMgaW50byB0aGUgZnV6emluZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzMsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjU4LjM1ODcxNjgyNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzU0OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc2V0cyB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlciBvbiBTS0JzIGNyZWF0ZWQgZHVyaW5nIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IG1vZGUgKHhza19za2JfaW5pdF9taXNjKSwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGJlZm9yZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc2V0cyB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlciBvbiBTS0JzIGNyZWF0ZWQgZHVyaW5nIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IG1vZGUgKHhza19za2JfaW5pdF9taXNjKSwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGJlZm9yZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6NTguNDM4MDg0ODlaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTA4NTc0NzAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjU4LjQzODczNDYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTg1MDg1MDkyMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjkzOWU5MGExYjdhNWQ2YjQ3M2E3MDFkMjZiNjgyNDJkMzMyYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgKzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6NTguNDM4NzM1ODlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcyMzk1NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgWFNLIENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCBpdCwgc28gbXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZGlmZiBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AuIEkga25vdyB0aGF0J3MgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA5NDcgaW4gYG5ldC94ZHAveHNrLmNgLiBJIGV4cGVjdCB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGFyZSwgYW5kIGl0J2xsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21taXQncyBpbnRlbnQgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA0LjE2MjY5Njk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRcXG4gOTMxOlxcdElORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuIDkzMjpcXHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTMzOlxcdHtcXG4gOTM0OlxcdFxcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNleHNrX21ldGE7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChjb21wbC1cXHUwMDNldHhfdGltZXN0YW1wKSB7XFxuIDkzNzpcXHRcXHRcXHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cXG4gOTM4OlxcdFxcdFxcdCpjb21wbC1cXHUwMDNldHhfdGltZXN0YW1wID0ga3RpbWVfZ2V0X3RhaV9mYXN0X25zKCk7XFxuIDkzOTpcXHRcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2Vwb29sLCBza2IpO1xcbiA5NDI6XFx0XFx0c29ja193ZnJlZShza2IpO1xcbiA5NDM6XFx0fVxcbiA5NDQ6XFx0XFxuIDk0NTpcXHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIDk0NjpcXHRcXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbiA5NDc6XFx0e1xcbiA5NDg6XFx0XFx0aW50IGVycjtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiA5NTM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDk1NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTU6XFx0XFxuIDk1NjpcXHRcXHRza2ItXFx1MDAzZWRldiA9IHhzLVxcdTAwM2VkZXY7XFxuIDk1NzpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gUkVBRF9PTkNFKHhzLVxcdTAwM2Vzay5za19wcmlvcml0eSk7XFxuIDk1ODpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX21hcmspO1xcbiA5NTk6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcXG4gOTYwOlxcdFxcdHJldHVybiAwO1xcbiA5NjE6XFx0fVxcbiA5NjI6XFx0XFxuIDk2MzpcXHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTY0OlxcdHtcXG4gOTY1OlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuIDk2NjpcXHRcXHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5Njc6XFx0XFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XFxuIDk2ODpcXHRcXG4gOTY5OlxcdFxcdGlmICh1bmxpa2VseSgheHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc2tiKSkpIHtcXG4gOTcwOlxcdFxcdFxcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnO1xcbiA5NzE6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKHhza190eF9nZW5lcmljX2NhY2hlLCB4c2tfYWRkcik7XFxuIDk3MjpcXHRcXHR9XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfd2ZyZWU7XFxuIDk3NTpcXHRcXHR4c2tfY3FfY2FuY2VsX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcXG4gOTc2OlxcdFxcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXFxuIDk3NzpcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA5Nzg6XFx0XFx0eHMtXFx1MDAzZXNrYiA9IE5VTEw7XFxuIDk3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA0LjE2Mjg2MTU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ5ODk4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYU0sgU0tCIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IFhEUCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBYU0sgcGFydCBvZiBpdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhbiBTS0Igd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIGB4c2tfc2tiX2luaXRfbWlzY2AgaW4gYG5ldC94ZHAveHNrLmNgIGJlY2F1c2UgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRob3NlIFNLQnMgc2V0IHVwLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgU0tCcyBhcmUgaW5pdGlhbGx5IGNvbnN0cnVjdGVkLCB3aGF0J3MgcHV0IGludG8gdGhlbSwgYW5kIGhvdyB0aGV5J3JlIHN1YnNlcXVlbnRseSB1c2VkIHdpdGhpbiB0aGUgWFNLIGZyYW1ld29yay4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3csIHVuZGVyc3RhbmQgYW55IGVkZ2UgY2FzZXMsIGFuZCBwb3NzaWJseSBldmVuIGlkZW50aWZ5IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA2LjUxNzg1NDQ4MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTkzMj12b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTQ0LVxcbm5ldC94ZHAveHNrLmM6OTQ1OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTk0Ni1cXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxubmV0L3hkcC94c2suYz0xMTExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTg2LVxcdGlmICgheHMtXFx1MDAzZXNrYikge1xcbm5ldC94ZHAveHNrLmM6MTE4NzpcXHRcXHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVxcdTAwM2VhZGRyKTtcXG5uZXQveGRwL3hzay5jLTExODgtXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA2LjU3MDUxNzcwOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE2NzQ2MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRFAgU29ja2V0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGVzZSBYRFAgc29ja2V0cyBhY3R1YWxseSBidWlsZCB0aGVpciBTS0JzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgY2FsbGVkIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBHb3R0YSBnZXQgYSBoYW5kbGUgb24gdGhlIGRhdGEgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGluIGhvdyBpdCdzIGFsbCBwdXQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSBoYXBwZW4sIHNvIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0MjozNS43Mzc5ODM5OTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBsZW47XFxuMTEwMzpcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4xMTA0OlxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgKz0gdHM7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHJlZmNvdW50X2FkZCh0cywgXFx1MDAyNnhzLVxcdTAwM2Vzay5za193bWVtX2FsbG9jKTtcXG4xMTA3OlxcdFxcbjExMDg6XFx0XFx0cmV0dXJuIHNrYjtcXG4xMTA5OlxcdH1cXG4xMTEwOlxcdFxcbjExMTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4xMTEzOlxcdHtcXG4xMTE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjExMTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVxcdTAwM2Vza2I7XFxuMTExNjpcXHRcXHRpbnQgZXJyO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG4xMTE5OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbjExMjA6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuMTEyMTpcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuMTEyMjpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjExMjM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTI0OlxcdFxcdFxcdH1cXG4xMTI1OlxcdFxcdH0gZWxzZSB7XFxuMTEyNjpcXHRcXHRcXHR1MzIgaHIsIHRyLCBsZW47XFxuMTEyNzpcXHRcXHRcXHR2b2lkICpidWZmZXI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdGJ1ZmZlciA9IHhza19idWZmX3Jhd19nZXRfZGF0YSh4cy1cXHUwMDNlcG9vbCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTEzMDpcXHRcXHRcXHRsZW4gPSBkZXNjLVxcdTAwM2VsZW47XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmICghc2tiKSB7XFxuMTEzMzpcXHRcXHRcXHRcXHRociA9IG1heChORVRfU0tCX1BBRCwgTDFfQ0FDSEVfQUxJR04oZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcXG4xMTM0OlxcdFxcdFxcdFxcdHRyID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuMTEzNTpcXHRcXHRcXHRcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFxcdTAwMjZ4cy1cXHUwMDNlc2ssIGhyICsgbGVuICsgdHIsIDEsIFxcdTAwMjZlcnIpO1xcbjExMzY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbjExMzc6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XFxuMTE0MDpcXHRcXHRcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG4xMTQxOlxcdFxcbjExNDI6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgWERQX1RYX01FVEFEQVRBKSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4c2tfc2tiX21ldGFkYXRhKHNrYiwgYnVmZmVyLCBkZXNjLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHhzLVxcdTAwM2Vwb29sLCBocik7XFxuMTE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE1MTpcXHRcXHRcXHRcXHR9XFxuMTE1MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjExNTM6XFx0XFx0XFx0XFx0aW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4xMTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xcbjExNTU6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTE1NjpcXHRcXHRcXHRcXHR1OCAqdmFkZHI7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XFxuMTE1OTpcXHRcXHRcXHRcXHRpZiAoIXhza19hZGRyKSB7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjE6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTYyOlxcdFxcdFxcdFxcdH1cXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXFx1MDAyNlxcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuMTE2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFxuMTE3MTpcXHRcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XFxuMTE3MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuMTE3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjExNzQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTc1OlxcdFxcdFxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMTE3ODpcXHRcXHRcXHRcXHRtZW1jcHkodmFkZHIsIGJ1ZmZlciwgbGVuKTtcXG4xMTc5OlxcdFxcdFxcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdFxcdFxcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XFxuMTE4MjpcXHRcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExODM6XFx0XFx0XFx0fVxcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG4xMTg3OlxcdFxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbjExODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuMTE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjExOTQ6XFx0XFxuMTE5NTpcXHRmcmVlX2VycjpcXG4xMTk2OlxcdFxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vza2IpXFxuMTE5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjM1LjczODI4Nzc0OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgxMjA1NTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aHkgaXQncyBiZWVuIGludHJvZHVjZWQuIEZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIGl0IGVzc2VudGlhbGx5IHNldHMgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWhlYWRgLiBNYWtlcyBzZW5zZS4gTm93LCB3aGVyZSBpcyB0aGlzIHVzZWQgYW5kIHdoeT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHNvY2tfYWxsb2Nfc2VuZF9za2JgIG9yIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCBkb24ndCBpbml0aWFsaXplIHRoaXMgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCwgb3IgbWF5YmUgdGhleSBkZWZhdWx0IGl0IHRvIHplcm8gKHdoaWNoIHBvaW50cyBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc2tiLVx1MDAzZWhlYWRgIGJ1ZmZlcikuXG5cbkl0IHNlZW1zIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGZyb20gZHJpdmVycyB0byBwYWNrZXQgc2NoZWR1bGVycyBsaWtlIHFkaXNjIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGV2X3F1ZXVlX3htaXRgIG9yIFhEUC9CUEYgcHJvZ3JhbXMsIGRlcGVuZCBvbiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBiZWluZyBjYWxsZWQsIG9yIG1vcmUgZ2VuZXJhbGx5IG9uIGBuZXR3b3JrX2hlYWRlcmAgaGF2aW5nIGEgdmFsaWQgcmVsYXRpdmUgb2Zmc2V0IHRvIGBza2ItXHUwMDNlZGF0YWAuIEkgYmV0IEknbGwgc2VlIHNvbWUgdXNhZ2UgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgIG9yIHdpdGggcGFja2V0IHNvY2tldHMsIG9yIGR1cmluZyBjaGVja3MgdGhhdCB1c2UgYHNrYl9uZXR3b3JrX29mZnNldGAuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIHVzZSBgZ2l0IGJsYW1lYCBvciBgZ2l0IGxvZ2AgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2hhbmdlcyBvciByZWxhdGVkIGNvZGUuIEknbGwgYWxzbyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcmAsIGFuZCBtYXliZSBgeHNrX3NrYl9pbml0X21pc2NgIG9yIHNpbWlsYXIgZnVuY3Rpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBwb3BzIHVwIHdpdGhpbiB0aGUgbmV0L3hkcCBkaXJlY3Rvcmllcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHdoZXJlIGl0J3MgY3JpdGljYWxseSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0Mjo1My41NTAzNDUwMTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzU3ODQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcmVzZXRfbmV0d29ya19oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05NDU9c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy05NDktXFxubmV0L3hkcC94c2suYzo5NTA6XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxubmV0L3hkcC94c2suYy05NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjUzLjg5NzkzNDQ5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg1OTU2NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGxpZmUgb2YgYW4gU0tCIOKAkyBzcGVjaWZpY2FsbHksIHRob3NlIGNyZWF0ZWQgd2l0aGluIHRoZSBgeHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24gb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGZyb20gaXRzIGNyZWF0aW9uIHBvaW50LiBXaGVyZSBkb2VzIGl0IGdvPyBXaGF0IGhhcHBlbnMgdG8gaXQ/IEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgdXNhZ2Ugb2YgYHhza19idWlsZF9za2JgIHRvIGdldCBhIHNlbnNlIG9mIHdoZXJlIHRoZXNlIFNLQnMgYXJlIGluaXRpYWxseSBjb25zdHJ1Y3RlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbWFwIHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBTS0IuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQzOjAxLjE4Mzg5NDExOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NjY0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTExMTgtXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMTE5OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTEyMC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyNjMtXFxubmV0L3hkcC94c2suYzoxMjY0OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyNjUtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQzOjAxLjIyODY2NDg0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk4MTg4ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBYRFAgZnJhbWVzIGFyZSBhY3R1YWxseSBzZW50IG91dCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBfX3hza19nZW5lcmljX3htaXRgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBwcm9jZXNzIGFwcGVhcnMgdG8gYmU6IGB4c2tfYnVpbGRfc2tiYCBjb25zdHJ1Y3RzIGFuIGBza2JgIChzb2NrZXQgYnVmZmVyKSDigJMgdGhlIHdvcmtob3JzZSBkYXRhIHN0cnVjdHVyZSBmb3IgbmV0d29yayBwYWNrZXRzIGluIHRoZSBrZXJuZWwg4oCTIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIFhEUCBzb2NrZXQgZGVzY3JpcHRvcnMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGlzIGBza2JgIHRoZW4gZ2V0cyBwYXNzZWQgb24gZm9yIHRyYW5zbWlzc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyB0cmFuc21pc3Npb24gaGFwcGVucywgc28gSSBoYXZlIHRvIGtlZXAgZGlnZ2luZy4gVGhlIGNvZGUgbWVudGlvbnMgdGhhdCB0aGlzIHRyYW5zbWlzc2lvbiBpcyBoYW5kbGVkIHZpYSBgZGV2X2RpcmVjdF94bWl0YCwgYF9fZGV2X2RpcmVjdF94bWl0YCwgb3IgcG90ZW50aWFsbHkgZXZlbiBgZGV2X3F1ZXVlX3htaXRgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgX194c2tfZ2VuZXJpY194bWl0YCB0byBnZXQgdGhlIGRldGFpbHMgb24gKndoaWNoKiB0cmFuc21pc3Npb24gZnVuY3Rpb24gaXMgYWN0dWFsbHkgZ2V0dGluZyBpbnZva2VkIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLCBhbmQgd2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDM6MjguMjEwNTU3NzA5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRcXHRpZiAodW5saWtlbHkoeHMtXFx1MDAzZWRyYWluX2NvbnQpKSB7XFxuMTI1NzpcXHRcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbjEyNTg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuMTI1OTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNjA6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4xMjYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNjI6XFx0XFx0XFx0fVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuMTI2NTpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMjY2OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4xMjY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNjk6XFx0XFx0XFx0XFx0aWYgKHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpKVxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbjEyNzE6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNzM6XFx0XFx0XFx0fVxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpIHtcXG4xMjc4OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBza2I7XFxuMTI3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjgwOlxcdFxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0ZXJyID0gX19kZXZfZGlyZWN0X3htaXQoc2tiLCB4cy1cXHUwMDNlcXVldWVfaWQpO1xcbjEyODM6XFx0XFx0XFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcXG4xMjg0OlxcdFxcdFxcdFxcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xcbjEyODU6XFx0XFx0XFx0XFx0eHNrcV9jb25zX2NhbmNlbF9uKHhzLVxcdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcXG4xMjg2OlxcdFxcdFxcdFxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbjEyODc6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXFxuMTI5MjpcXHRcXHRcXHRpZiAoZXJyID09IE5FVF9YTUlUX0RST1ApIHtcXG4xMjkzOlxcdFxcdFxcdFxcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXFxuMTI5NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTI5NTpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4xMjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyOTc6XFx0XFx0XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDM6MjguMjEwNjgxMzE5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1MzEzMTIwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IG9mIGFuIFNLQiBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzaW1wbGUgb25lLWxpbmVyLCBhZGRpbmcgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYC4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICpzaG91bGQqIGJlIHNhZmUsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3BlbiBhbnkgZG9vcnMgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGluZyBuZXcgb24gaXRzIG93bi4gRG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlIHZpYSBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYD8gTm8sIGl0J3Mgbm90IGRpcmVjdGx5IGRvaW5nIGFueSBvZiB0aGF0LiBEb2VzIGl0IGludHJvZHVjZSBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEFuZCBmaW5hbGx5LCBkb2VzIGl0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tzIG9yIHJlbGF0ZWQgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBuZXcgZnVuY3Rpb24gc2ltcGx5ICppbml0aWFsaXplcyogdGhlIGBuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0IG9mIHRoZSBgc2tiYCwgZW5zdXJpbmcgdGhhdCBpdCdzIHNldCB0byBhIHZhbGlkIHZhbHVlLCBub3QgbGVhdmluZyBpdCBhdCBhbiB1bmRlZmluZWQgc3RhdGUuIEluIGZhY3QsIGl0J3MgYWN0dWFsbHkgZG9pbmcgc29tZSBoZWxwZnVsIGluaXRpYWxpemF0aW9uLlxuXG5UaGlzIGFjdHVhbGx5IGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIEtNU0FOLiBUaGUgY2hlY2tzIHVzZWQgYnkgS0FTQU4gc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggdG8gaGFuZGxlIHRoaXMgcGF0Y2ggaWYgYW55dGhpbmcgd2VyZSB0byBnbyB3cm9uZy5cblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZGluZyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBmb3IgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aC4gSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5ld2x5IGNyZWF0ZWQgU0tCcyBiZWZvcmUgdGhleSBhcmUgdHJhbnNtaXR0ZWQgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdCgpYC4gU28sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIGxlYWtzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgaGVyZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDU6MDMuNTIzODA1OTQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHNrYiBpbiB0aGUgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgcGF0aC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtwm4q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 19:11:16 +0000 UTC FinishedAt: 2026-09-01 19:45:04 +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": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1d2929d0850fff683b8aff051275945e65f082c8", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "a45a0cc4-0774-4485-bed6-acba6763e760" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_sendmsg", "xsk_destruct_skb", "xsk_bind", "xsk_setsockopt", "xsk_poll" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "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+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTI5MzllOTBhMWI3YTVkNmI0NzNhNzAxZDI2YjY4MjQyZDMzMmIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAxOToyOTowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suY1xuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcbi0tLSBhL25ldC94ZHAveHNrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmNcbkBAIC05NDcsNiAmIzQzOzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuJiM0MztcbiBcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7LAogICAgJiMzNDt4c2tfYmluZCYjMzQ7LAogICAgJiMzNDt4c2tfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDt4c2tfcG9sbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OTI5MzllOTBhMWI3YTVkNmI0NzNhNzAxZDI2YjY4MjQyZDMzMmIwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAxOToyOTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiB7CiAJaW50IGVycjsKIAomIzQzOwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKIAllcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OAoJCQkJCQkJb3V0cHV0OiA5OAoJCQkJCQkJdGhvdWdodHM6IDI2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBYU0sgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3hkcC94c2suY2AuIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGFkZGl0aW9uOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpNeSBmaXJzdCBzdGVwIGlzIHRvIHF1aWNrbHkgcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYHhza19za2JfaW5pdF9taXNjYCBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB3aGVyZSBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoaXMgbW9kdWxlLiBXaGF04oCZcyBpdHMgb3ZlcmFsbCBwdXJwb3NlIGluIHRoZSBYRFAvQUZfWERQIGxpZmVjeWNsZT8gR2l2ZW4gdGhpcyBhZGRpdGlvbiwgd2hhdCBpcyB0aGUgKnJlYXNvbiogZm9yIG5lZWRpbmcgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIGF0IHRoaXMgc3RhZ2U/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcGFja2V0IHByb2Nlc3Npbmcgb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIGJ1ZyBmaXggb3Igc2VjdXJpdHkgY29uY2VybiB0aGlzIGFkZHJlc3Nlcz8KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZTogd2hhdCBhcmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgZW5hYmxlIEFGX1hEUD8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgb3B0aW9ucyBvciBidWlsZCBmbGFncyB0aGF0IGluZmx1ZW5jZSBob3cgdGhpcyBjb2RlIGJlaGF2ZXM/IEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IGtlcm5lbCBtb2R1bGVzIG9yIGZlYXR1cmVzIHJlbGF0ZWQgdG8gQUZfWERQIGFyZSBsb2FkaW5nLCBvciBub3QsIHdoZW4gSSBleHBlY3QgdGhlbSB0byBiZS4KCkZpbmFsbHksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCB3aGF0IGlzIGhhcHBlbmluZyBfYmVmb3JlXyB0aGlzIGFuZCBfYWZ0ZXJfIHRoaXM/IFRoYXQmIzM5O3MgZXNzZW50aWFsIHRvIGdyYXNwIHRoZSAqd2h5Ki4gSWRlbnRpZnlpbmcgdGhlIGNyaXRpY2FsIGVudHJ5cG9pbnQgZnVuY3Rpb25zIGlzIGNydWNpYWwgZm9yIGZvcm1pbmcgYSBjb2hlcmVudCBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgc21hbGwgY2hhbmdlIGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBhbmQgcGFja2V0IGZsb3cgd2l0aGluIFhEUC4gSSYjMzk7bGwgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgZXhlY3V0aW9uIHRvIHNlZSB0aGUgaW1tZWRpYXRlIGVmZmVjdCwgYW5kIHRoZSBsb25nZXItdGVybSBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcbiA5MzE6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuIDkzMjpcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkzMzpcdHtcbiA5MzQ6XHRcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhza19tZXRhO1xuIDkzNTpcdFxuIDkzNjpcdFx0aWYgKGNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCkge1xuIDkzNzpcdFx0XHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cbiA5Mzg6XHRcdFx0KmNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCA9IGt0aW1lX2dldF90YWlfZmFzdF9ucygpO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2Vwb29sLCBza2IpO1xuIDk0MjpcdFx0c29ja193ZnJlZShza2IpO1xuIDk0MzpcdH1cbiA5NDQ6XHRcbiA5NDU6XHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gOTQ2Olx0XHRcdFx0ICAgICB1NjQgYWRkcilcbiA5NDc6XHR7XG4gOTQ4Olx0XHRpbnQgZXJyO1xuIDk0OTpcdFxuIDk1MDpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gOTUxOlx0XG4gOTUyOlx0XHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiA5NTM6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDk1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDk1NTpcdFxuIDk1NjpcdFx0c2tiLVx1MDAzZWRldiA9IHhzLVx1MDAzZWRldjtcbiA5NTc6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19wcmlvcml0eSk7XG4gOTU4Olx0XHRza2ItXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19tYXJrKTtcbiA5NTk6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcbiA5NjA6XHRcdHJldHVybiAwO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NjQ6XHR7XG4gOTY1Olx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4gOTY2Olx0XHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk2NzpcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4gOTY4Olx0XG4gOTY5Olx0XHRpZiAodW5saWtlbHkoIXhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHNrYikpKSB7XG4gOTcwOlx0XHRcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4gOTcxOlx0XHRcdGttZW1fY2FjaGVfZnJlZSh4c2tfdHhfZ2VuZXJpY19jYWNoZSwgeHNrX2FkZHIpO1xuIDk3MjpcdFx0fVxuIDk3MzpcdFxuIDk3NDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3dmcmVlO1xuIDk3NTpcdFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcbiA5NzY6XHRcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXG4gOTc3Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDk3ODpcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiA5Nzk6XHR9XG4gOTgwOlx0XG4gOTgxOlx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTgyOlx0e1xuIDk4MzpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk4NDpcdFxuIDk4NTpcdFx0eHMtXHUwMDNldHgtXHUwMDNlaW52YWxpZF9kZXNjcyAmIzQzOz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk4NjpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5ODc6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTg4Olx0fVxuIDk4OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hkcC94c2suYy05NDQtXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTk0Ni1cdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTExODYtXHRpZiAoIXhzLVx1MDAzZXNrYikge1xubmV0L3hkcC94c2suYzoxMTg3Olx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xubmV0L3hkcC94c2suYy0xMTg4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtYU0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQwND1zdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDA1LXtcbm5ldC94ZHAveHNrLmM6NDA2Olx0aWYgKFJFQURfT05DRSh4cy1cdTAwM2VzdGF0ZSkgPT0gWFNLX0JPVU5EKSB7XG5uZXQveGRwL3hzay5jLTQwNy1cdFx0LyogTWF0Y2hlcyBzbXBfd21iKCkgaW4gYmluZCgpLiAqL1xuLS1cbm5ldC94ZHAveHNrLmM9NDc3PXN0YXRpYyBpbnQgeHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbi0tXG5uZXQveGRwL3hzay5jLTQ4NS1cbm5ldC94ZHAveHNrLmM6NDg2Olx0aWYgKHhkcC1cdTAwM2VyeHEtXHUwMDNlbWVtLnR5cGUgPT0gTUVNX1RZUEVfWFNLX0JVRkZfUE9PTCkge1xubmV0L3hkcC94c2suYy00ODctXHRcdGxlbiA9IHhkcC1cdTAwM2VkYXRhX2VuZCAtIHhkcC1cdTAwM2VkYXRhO1xuLS1cbm5ldC94ZHAveHNrLmM9MTQ5Nj1zdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTQ5OS1cbm5ldC94ZHAveHNrLmM6MTUwMDpcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfQk9VTkQpXG5uZXQveGRwL3hzay5jLTE1MDEtXHRcdHJldHVybjtcbm5ldC94ZHAveHNrLmM6MTUwMjpcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19VTkJPVU5EKTtcbm5ldC94ZHAveHNrLmMtMTUwMy1cbi0tXG5uZXQveGRwL3hzay5jPTE2MTY9c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTY0MS1cdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxNjQyOlx0aWYgKHhzLVx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xubmV0L3hkcC94c2suYy0xNjQzLVx0XHRlcnIgPSAtRUJVU1k7XG4tLVxubmV0L3hkcC94c2suYy0xNzk3LVx0XHRzbXBfd21iKCk7XG5uZXQveGRwL3hzay5jOjE3OTg6XHRcdFdSSVRFX09OQ0UoeHMtXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XG5uZXQveGRwL3hzay5jLTE3OTktXHR9XG4tLVxubmV0L3hkcC94c2suYz0xODE0PXN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQveGRwL3hzay5jLTE4MzYtXHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxODM3Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZKSB7XG5uZXQveGRwL3hzay5jLTE4MzgtXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbi0tXG5uZXQveGRwL3hzay5jLTE4NzQtXHRcdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2suYzoxODc1Olx0XHRpZiAoeHMtXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVx1MDAzZXVtZW0pIHtcbm5ldC94ZHAveHNrLmMtMTg3Ni1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmMtMTkwMy1cdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG5uZXQveGRwL3hzay5jOjE5MDQ6XHRcdGlmICh4cy1cdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcbm5ldC94ZHAveHNrLmMtMTkwNS1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xuLS1cbm5ldC94ZHAveHNrLmM9MjA4NT1zdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC94ZHAveHNrLmMtMjA5My1cbm5ldC94ZHAveHNrLmM6MjA5NDpcdGlmIChzdGF0ZSAhPSBYU0tfUkVBRFkgXHUwMDI2XHUwMDI2IHN0YXRlICE9IFhTS19CT1VORClcbm5ldC94ZHAveHNrLmMtMjA5NS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5uZXQveGRwL3hzay5jLTIxMDQtXHRcdGlmIChvZmZzZXQgPT0gWERQX1VNRU1fUEdPRkZfRklMTF9SSU5HKVxubmV0L3hkcC94c2suYzoyMTA1Olx0XHRcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXHUwMDNlZnFfdG1wKSA6XG5uZXQveGRwL3hzay5jLTIxMDYtXHRcdFx0XHRcdFx0IFJFQURfT05DRSh4cy1cdTAwM2Vwb29sLVx1MDAzZWZxKTtcbm5ldC94ZHAveHNrLmMtMjEwNy1cdFx0ZWxzZSBpZiAob2Zmc2V0ID09IFhEUF9VTUVNX1BHT0ZGX0NPTVBMRVRJT05fUklORylcbm5ldC94ZHAveHNrLmM6MjEwODpcdFx0XHRxID0gc3RhdGUgPT0gWFNLX1JFQURZID8gUkVBRF9PTkNFKHhzLVx1MDAzZWNxX3RtcCkgOlxubmV0L3hkcC94c2suYy0yMTA5LVx0XHRcdFx0XHRcdCBSRUFEX09OQ0UoeHMtXHUwMDNlcG9vbC1cdTAwM2VjcSk7XG4tLVxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQveGRwL3hzay5jLTIyMjItXHR4cyA9IHhkcF9zayhzayk7XG5uZXQveGRwL3hzay5jOjIyMjM6XHR4cy1cdTAwM2VzdGF0ZSA9IFhTS19SRUFEWTtcbm5ldC94ZHAveHNrLmMtMjIyNC1cdHhzLVx1MDAzZW1heF90eF9idWRnZXQgPSBUWF9CQVRDSF9TSVpFO1xuLS1cbm5ldC94ZHAveHNrLmgtMy1cbm5ldC94ZHAveHNrLmg6NDojaWZuZGVmIFhTS19IX1xubmV0L3hkcC94c2suaDo1OiNkZWZpbmUgWFNLX0hfXG5uZXQveGRwL3hzay5oLTYtXG4tLVxubmV0L3hkcC94c2suaD0zOD1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbi0tXG5uZXQveGRwL3hzay5oLTQwLVxubmV0L3hkcC94c2suaDo0MTojZW5kaWYgLyogWFNLX0hfICovXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTQ1PXN0YXRpYyB2b2lkIHhwX2Rpc2FibGVfZHJ2X3pjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTE1Mi1cdGlmIChwb29sLVx1MDAzZXVtZW0tXHUwMDNlemMpIHtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjE1MzpcdFx0YnBmLmNvbW1hbmQgPSBYRFBfU0VUVVBfWFNLX1BPT0w7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0xNTQtXHRcdGJwZi54c2sucG9vbCA9IE5VTEw7XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTY0PWludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTIxMS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjIxMjpcdGlmICgobmV0ZGV2LVx1MDAzZXhkcF9mZWF0dXJlcyBcdTAwMjYgTkVUREVWX1hEUF9BQ1RfWFNLKSAhPSBORVRERVZfWERQX0FDVF9YU0spIHtcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTIxMy1cdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjQyLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MjQzOlx0YnBmLmNvbW1hbmQgPSBYRFBfU0VUVVBfWFNLX1BPT0w7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yNDQtXHRicGYueHNrLnBvb2wgPSBwb29sO1xuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTM4OT1zdGF0aWMgdm9pZCBfX3hwX2RtYV91bm1hcChzdHJ1Y3QgeHNrX2RtYV9tYXAgKmRtYV9tYXAsIHVuc2lnbmVkIGxvbmcgYXR0cnMpXG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMzk2LVx0XHRpZiAoKmRtYSkge1xubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6Mzk3Olx0XHRcdCpkbWEgXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0zOTgtXHRcdFx0ZG1hX3VubWFwX3BhZ2VfYXR0cnMoZG1hX21hcC1cdTAwM2VkZXYsICpkbWEsIFBBR0VfU0laRSxcbi0tXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz00MzA9c3RhdGljIHZvaWQgeHBfY2hlY2tfZG1hX2NvbnRpZ3VpdHkoc3RydWN0IHhza19kbWFfbWFwICpkbWFfbWFwKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQzNS1cdFx0aWYgKGRtYV9tYXAtXHUwMDNlZG1hX3BhZ2VzW2ldICYjNDM7IFBBR0VfU0laRSA9PSBkbWFfbWFwLVx1MDAzZWRtYV9wYWdlc1tpICYjNDM7IDFdKVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6NDM2Olx0XHRcdGRtYV9tYXAtXHUwMDNlZG1hX3BhZ2VzW2ldIHw9IFhTS19ORVhUX1BHX0NPTlRJR19NQVNLO1xubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM3LVx0XHRlbHNlXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0Mzg6XHRcdFx0ZG1hX21hcC1cdTAwM2VkbWFfcGFnZXNbaV0gXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy00MzktXHR9XG4tLVxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9NzQ5PXN0YXRpYyBkbWFfYWRkcl90IF9feHBfcmF3X2dldF9kbWEoY29uc3Qgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1MS1cdHJldHVybiAocG9vbC1cdTAwM2VkbWFfcGFnZXNbYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVF0gXHUwMDI2XG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3NTI6XHRcdH5YU0tfTkVYVF9QR19DT05USUdfTUFTSykgJiM0Mztcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1My1cdFx0KGFkZHIgXHUwMDI2IH5QQUdFX01BU0spO1xuLS1cbm5ldC94ZHAveHNrX2RpYWcuYz05Mj1zdGF0aWMgaW50IHhza19kaWFnX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsXG4tLVxubmV0L3hkcC94c2tfZGlhZy5jLTExMy1cdG11dGV4X2xvY2soXHUwMDI2eHMtXHUwMDNlbXV0ZXgpO1xubmV0L3hkcC94c2tfZGlhZy5jOjExNDpcdGlmIChSRUFEX09OQ0UoeHMtXHUwMDNlc3RhdGUpID09IFhTS19VTkJPVU5EKVxubmV0L3hkcC94c2tfZGlhZy5jLTExNS1cdFx0Z290byBvdXRfbmxtc2dfdHJpbTtcbi0tXG5uZXQveGRwL3hza19xdWV1ZS5oLTUtXG5uZXQveGRwL3hza19xdWV1ZS5oOjY6I2lmbmRlZiBfTElOVVhfWFNLX1FVRVVFX0hcbm5ldC94ZHAveHNrX3F1ZXVlLmg6NzojZGVmaW5lIF9MSU5VWF9YU0tfUVVFVUVfSFxubmV0L3hkcC94c2tfcXVldWUuaC04LVxuLS1cbm5ldC94ZHAveHNrX3F1ZXVlLmg9NTM1PXZvaWQgeHNrcV9kZXN0cm95KHN0cnVjdCB4c2tfcXVldWUgKnFfb3BzKTtcbm5ldC94ZHAveHNrX3F1ZXVlLmgtNTM2LVxubmV0L3hkcC94c2tfcXVldWUuaDo1Mzc6I2VuZGlmIC8qIF9MSU5VWF9YU0tfUVVFVUVfSCAqL1xuLS1cbm5ldC94ZHAveHNrbWFwLmMtMS0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxubmV0L3hkcC94c2ttYXAuYzoyOi8qIFhTS01BUCB1c2VkIGZvciBBRl9YRFAgc29ja2V0c1xubmV0L3hkcC94c2ttYXAuYy0zLSAqIENvcHlyaWdodChjKSAyMDE4IEludGVsIENvcnBvcmF0aW9uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjkKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgWERQIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFhEUCwgc3BlY2lmaWNhbGx5IHdoZXJlIGB4c2tfYnVpbGRfc2tiYCBpcyB1c2VkIGFuZCBob3cgYHhzay5jYCBpcyB1bHRpbWF0ZWx5IGNvbXBpbGVkLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHRyYWNlIHRoZSBjYWxscyB0byBgeHNrX2J1aWxkX3NrYmAuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLgoKRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlcyDigJMgdGhlIGBuZXQveGRwL01ha2VmaWxlYCBhbmQgYG5ldC94ZHAvS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIGhvdyB0aGUgWERQIGNvbXBvbmVudHMgYXJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9wdGlvbnMuIEkmIzM5O20gaG9waW5nIHRob3NlIHR3byBmaWxlcyB3aWxsIHF1aWNrbHkgcmV2ZWFsIHRoZSBuZWNlc3NhcnkgYnVpbGQgc3RlcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xuICAgMzpcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgJiM0Mzs9IHhza19idWZmX3Bvb2wub1xuICAgNDpcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSAmIzQzOz0geHNrX2RpYWcub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC94ZHAvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0xMy1cdGRlZmF1bHQgblxuLS1cbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC94ZHAvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG5uZXQveGRwL01ha2VmaWxlOjM6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG5uZXQveGRwL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRFBfU09DS0VUUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQveGRwL0tjb25maWc6Mjpjb25maWcgWERQX1NPQ0tFVFNcbm5ldC94ZHAvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuLS1cbm5ldC94ZHAvS2NvbmZpZy05LVxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG5uZXQveGRwL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBYRFAgU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQveGRwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBpbXBsaWNhdGlvbnMgc3Vycm91bmRpbmcgYENPTkZJR19YRFBfU09DS0VUU2AuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhpcyBpcyBkZWZpbmVkLCBhbnkgZGVwZW5kZW5jaWVzIGl0IGhhcyBvbiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB3aGVyZSBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgYnJvYWRlciBYRFAgZnJhbWV3b3JrLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgZGVmYXVsdHMgb3IgcG90ZW50aWFsbHkgaGlkZGVuIGludGVyYWN0aW9ucyByZWxhdGVkIHRvIGBDT05GSUdfWERQX1NPQ0tFVFNgLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgc3VjaCBhcyB0aGUgc29ja2V0LWJhc2VkIFhEUCBpbmZyYXN0cnVjdHVyZSYjMzk7cyBhdmFpbGFiaWxpdHkuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBuZXcgcnVudGltZSBkZXBlbmRlbmNpZXMgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpbmUtZ3JhaW5lZCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBYRFBfU09DS0VUU1xuICAgMzpcdFx0Ym9vbCBcJiMzNDtYRFAgc29ja2V0c1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuICAgNTpcdFx0ZGVmYXVsdCBuXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXG4gICA4Olx0XHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1hEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xuICAxMzpcdFx0ZGVmYXVsdCBuXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXG4gIDE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipYRFAgU29ja2V0czogRGVwZW5kZW5jaWVzIGFuZCB0aGUgRGF0YSBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWERQIHNvY2tldHMsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYENPTkZJR19YRFBfU09DS0VUU2Agd29uJiMzOTt0IGJlIGVuYWJsZWQgdW5sZXNzIHdlIGFsc28gaGF2ZSBgQlBGX1NZU0NBTExgICh0aGF0JiMzOTtzIGNydWNpYWwgZm9yIHRoZSBCUEYgcGFydCwgbmF0dXJhbGx5KSBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIHdoaWNoIGlzIGBORVRgLiBUaG9zZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIHBhdGggd2hlbiB3ZSYjMzk7cmUgaW4gdGhlIGdlbmVyaWMgY29weSBtb2RlIGFuZCBhbHNvIGxvb2sgYXQgaG93IHRoZSBYRFAgc29ja2V0IHNlbmQvdHggd29ya3MuIEkgd2FudCB0byBkaXZlIGludG8gdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIFNLQiBpcyBidWlsdC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBhbGwgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBzb2NrZXQgc2VuZCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGUgbG9naWMgdGhyb3VnaCBhbGwgdGhlIGxheWVycyBhbmQgc2VlIHdoZXJlIHRoZSBkYXRhIGlzIGFjdHVhbGx5IGNvcGllZCwgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGRyaXZlciBhbmQgdGhlIHN0YWNrLiBJdCYjMzk7cyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGF0IGRhdGEgbW92ZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExOC1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExOTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMjAtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuLS1cbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMjYzLVxubmV0L3hkcC94c2suYzoxMjY0Olx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTI2NS1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB3cml0dGVuIGFzIGlmIEkmIzM5O20gdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNvbGlkaWZ5IG15IGdyYXNwIG9uIHRoZSBYRFAgdHJhbnNtaXNzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX3NlbmRtc2dgLCBhbmQgYHhza19wb2xsYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB3aGF0IGVhY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGRvZXMsIHNvIEkgY2FuIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbCB3aXRoaW4gdGhlIFhEUCBmcmFtZXdvcmsuIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIGhhbmRsZWQsIGFuZCBob3cgdGhlIHRyYW5zbWlzc2lvbiBpcyBpbml0aWF0ZWQuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG15IGN1cnJlbnQgdGFzayB0byBoYXZlIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTA6XHRcdFx0LyogTGV0IGFwcGxpY2F0aW9uIHJldHJ5ICovXG4xMjExOlx0XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIDEpO1xuMTIxMjpcdFx0fVxuMTIxMzpcdFxuMTIxNDpcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjEyMTU6XHR9XG4xMjE2Olx0XG4xMjE3Olx0c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuMTIxODpcdHtcbjEyMTk6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTIyMDpcdFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XG4xMjIxOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTIyMjpcdFx0dTMyIGNhY2hlZF9jb25zO1xuMTIyMzpcdFx0dTMyIG1heF9iYXRjaDtcbjEyMjQ6XHRcdGludCBlcnIgPSAwO1xuMTIyNTpcdFxuMTIyNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZ4cy1cdTAwM2VtdXRleCk7XG4xMjI3Olx0XHRjYWNoZWRfY29ucyA9IHhzLVx1MDAzZXR4LVx1MDAzZWNhY2hlZF9jb25zO1xuMTIyODpcdFxuMTIyOTpcdFx0LyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovXG4xMjMwOlx0XHRpZiAodW5saWtlbHkoIXhza19pc19ib3VuZCh4cykpKSB7XG4xMjMxOlx0XHRcdGVyciA9IC1FTlhJTztcbjEyMzI6XHRcdFx0Z290byBvdXQ7XG4xMjMzOlx0XHR9XG4xMjM0Olx0XG4xMjM1Olx0XHRpZiAoeHMtXHUwMDNlcXVldWVfaWQgXHUwMDNlPSB4cy1cdTAwM2VkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMTIzNjpcdFx0XHRnb3RvIG91dDtcbjEyMzc6XHRcbjEyMzg6XHRcdG1heF9iYXRjaCA9IFJFQURfT05DRSh4cy1cdTAwM2VtYXhfdHhfYnVkZ2V0KTtcbjEyMzk6XHRcdHdoaWxlICh4c2txX2NvbnNfcGVla19kZXNjKHhzLVx1MDAzZXR4LCBcdTAwMjZkZXNjLCB4cy1cdTAwM2Vwb29sKSkge1xuMTI0MDpcdFx0XHRpZiAobWF4X2JhdGNoLS0gPT0gMCkge1xuMTI0MTpcdFx0XHRcdGVyciA9IC1FQUdBSU47XG4xMjQyOlx0XHRcdFx0Z290byBvdXQ7XG4xMjQzOlx0XHRcdH1cbjEyNDQ6XHRcbjEyNDU6XHRcdFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguXG4xMjQ2Olx0XHRcdCAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgYW5kIG9ubHkgcHJvY2VlZFxuMTI0NzpcdFx0XHQgKiBpZiB0aGVyZSBpcyBzcGFjZSBpbiBpdC4gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGltcGxlbWVudFxuMTI0ODpcdFx0XHQgKiBhbnkgYnVmZmVyaW5nIGluIHRoZSBUeCBwYXRoLlxuMTI0OTpcdFx0XHQgKi9cbjEyNTA6XHRcdFx0ZXJyID0geHNrX2NxX3Jlc2VydmVfbG9ja2VkKHhzLVx1MDAzZXBvb2wpO1xuMTI1MTpcdFx0XHRpZiAoZXJyKSB7XG4xMjUyOlx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyNTM6XHRcdFx0XHRnb3RvIG91dDtcbjEyNTQ6XHRcdFx0fVxuMTI1NTpcdFxuMTI1NjpcdFx0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbjEyNTc6XHRcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbjEyNTg6XHRcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbjEyNTk6XHRcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjYwOlx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4xMjYxOlx0XHRcdFx0Y29udGludWU7XG4xMjYyOlx0XHRcdH1cbjEyNjM6XHRcbjEyNjQ6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4xMjY1Olx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTI2NjpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjEyNjc6XHRcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4xMjY4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjEyNjk6XHRcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbjEyNzA6XHRcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuMTI3MTpcdFx0XHRcdGVyciA9IDA7XG4xMjcyOlx0XHRcdFx0Y29udGludWU7XG4xMjczOlx0XHRcdH1cbjEyNzQ6XHRcbjEyNzU6XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuMTI3NjpcdFxuMTI3NzpcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSkge1xuMTI3ODpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IHNrYjtcbjEyNzk6XHRcdFx0XHRjb250aW51ZTtcbjEyODA6XHRcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0XHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVx1MDAzZXF1ZXVlX2lkKTtcbjEyODM6XHRcdFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcbjEyODQ6XHRcdFx0XHQvKiBUZWxsIHVzZXItc3BhY2UgdG8gcmV0cnkgdGhlIHNlbmQgKi9cbjEyODU6XHRcdFx0XHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXHUwMDNldHgsIHhza19nZXRfbnVtX2Rlc2Moc2tiKSk7XG4xMjg2Olx0XHRcdFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4xMjg3Olx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyODg6XHRcdFx0XHRnb3RvIG91dDtcbjEyODk6XHRcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0XHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXG4xMjkyOlx0XHRcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xuMTI5MzpcdFx0XHRcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXG4xMjk0Olx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMTI5NTpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4xMjk2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjk3Olx0XHRcdH1cbjEyOTg6XHRcbjEyOTk6XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYU0sgVHJhbnNtaXNzaW9uIFBhdGgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCBgX194c2tfZ2VuZXJpY194bWl0YCBpcyByZXNwb25zaWJsZSBmb3IgY29uc3RydWN0aW5nIHRoZSBTS0IgdXNpbmcgYHhza19idWlsZF9za2JgIGFuZCB0aGVuIGludm9raW5nIGBfX2Rldl9kaXJlY3RfeG1pdGAgd2l0aCB0aGUgU0tCIGFuZCB0aGUgcXVldWUgSUQuIFRoZSBhZGRpdGlvbiBvZiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2NgIGlzIHRoZSBrZXkgcG9pbnQgaGVyZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5IHRoZSByZXNldD8mIzM0OwoKSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaW4gc2NlbmFyaW9zIHdoZXJlIHRoZSBTS0IgaXMgYmVpbmcgdHJhbnNtaXR0ZWQgZGlyZWN0bHkgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdGAsIG9yIHRocm91Z2ggdGhlIG1vcmUgY29tcGxleCBuZXR3b3JraW5nIHN0YWNrIGNvbXBvbmVudHMgbGlrZSBUQywgbmV0ZmlsdGVyLCBxZGlzYywgb3IgZXZlbiBhdCB0aGUgZHJpdmVyIGxldmVsLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIHRoYXQgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIGlzIGJlaW5nIHJlYWQgb3IgYWNjZXNzZWQuIElmIHRoaXMgaGVhZGVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZCBvciwgYXMgaXMgdGhlIGNhc2UgaGVyZSwgZXhwbGljaXRseSByZXNldCwgd2UmIzM5O3JlIGxpa2VseSBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgZm9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlLCBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGlzIGFsd2F5cyBhIGNvbmNlcm4uIFRoZSByZXNldCBvcGVyYXRpb24gaXMgYSBwcmV2ZW50YXRpdmUgbWVhc3VyZS4KClRoaXMgbWFrZXMgc2Vuc2UuIElmIHdlJiMzOTtyZSByZWx5aW5nIG9uIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhpcyBoZWxwcyBtYWludGFpbiB0aGUgcHJvcGVyIHN0YXRlIGFuZCBwcmV2ZW50cyB0aG9zZSBidWdzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB3aG8gaXMgY2FsbGluZyBgX194c2tfZ2VuZXJpY194bWl0YCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194c2tfZ2VuZXJpY194bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xMTExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTIxNi1cbm5ldC94ZHAveHNrLmM6MTIxNzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMTgte1xuLS1cbm5ldC94ZHAveHNrLmM9MTMzMj1zdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTMzNy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzM4Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMzOS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEyMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB4c2tfZ2VuZXJpY194bWl0YCBVc2FnZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgeHNrX2dlbmVyaWNfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGNvbnRleHQsIGFuZCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBYRFAvQUZfWERQIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyB0byBnZXQgYSBncmFzcCBvbiB0aGUgZGlmZmVyZW50IHBhdGhzIG9mIGV4ZWN1dGlvbiB0aGF0IGVuZCB1cCB1c2luZyBpdC4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBtaWdodCBiZSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19nZW5lcmljX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMjE2LVxubmV0L3hkcC94c2suYzoxMjE3OnN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTIxOC17XG4tLVxubmV0L3hkcC94c2suYy0xMzMxLVxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzMzMte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMzNy1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L3hkcC94c2suYzoxMzM4Olx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcbm5ldC94ZHAveHNrLmMtMTMzOS1cdC8qIFJlYXF1aXJlIFJDVSBsb2NrIGJlZm9yZSBnb2luZyBpbnRvIGNvbW1vbiBjb2RlLiAqL1xuLS1cbm5ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTEtXHRcdFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xubmV0L3hkcC94c2suYzoxMzkyOlx0XHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XG5uZXQveGRwL3hzay5jLTEzOTMtXHR9XG4tLVxubmV0L3hkcC94c2suYz0xNDQ1PXN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQveGRwL3hzay5jLTE0NjUtXHRcdFx0LyogUG9sbCBuZWVkcyB0byBkcml2ZSBUeCBhbHNvIGluIGNvcHkgbW9kZSAqL1xubmV0L3hkcC94c2suYzoxNDY2Olx0XHRcdHhza19nZW5lcmljX3htaXQoc2spO1xubmV0L3hkcC94c2suYy0xNDY3LVx0fVxuLS1cbm5ldC94ZHAveHNrLmM9MjI2Nj1zdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMjI4NS1cbm5ldC94ZHAveHNrLmM6MjI4NjpcdHhza190eF9nZW5lcmljX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7eHNrX2dlbmVyaWNfeG1pdF9jYWNoZVwmIzM0Oyxcbm5ldC94ZHAveHNrLmMtMjI4Ny1cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCB4c2tfYWRkcnMpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk2NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIFhTSyBTb2NrZXQgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgX194c2tfc2VuZG1zZ2AgYW5kIGB4c2tfcG9sbGAuIFRob3NlIGFyZSB0aGUgYnJlYWQtYW5kLWJ1dHRlciBvcGVyYXRpb25zIGZvciBBRl9YRFAgc29ja2V0cyDigJMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9ucyB3ZSYjMzk7ZCBleHBlY3QuIE1ha2VzIHNlbnNlLiBUaGV5JiMzOTtyZSB0aGUgY29yZSBvZiBob3cgeW91IHB1c2ggYW5kIHB1bGwgZGF0YSB1c2luZyBYRFAuIEJlZm9yZSBkaXZpbmcgZnVydGhlciBpbnRvIGEgc3BlY2lmaWMgaXNzdWUsIG9yIG1heWJlIGp1c3QgdG8gcmVmcmVzaCBteSBtZW1vcnksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgYG9wc2Agc3RydWN0IGZvciB0aGUgWFNLIHNvY2tldC4gU2VlaW5nIHRoZSBmdW5jdGlvbiBwb2ludGVycyBhdmFpbGFibGUsIG9yIHBlcmhhcHMgdGhlIHdheSB0aGV5JiMzOTtyZSBpbXBsZW1lbnRlZCwgbWlnaHQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSXQmIzM5O3MgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IHdoZW4gZGlnZ2luZyBpbnRvIHNvY2tldCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XG4yMTYxOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbjIxNjI6XHRcdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4yMTYzOlx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbjIxNjQ6XHRcdC5yZWxlYXNlXHQ9IHhza19yZWxlYXNlLFxuMjE2NTpcdFx0LmJpbmRcdFx0PSB4c2tfYmluZCxcbjIxNjY6XHRcdC5jb25uZWN0XHQ9IHNvY2tfbm9fY29ubmVjdCxcbjIxNjc6XHRcdC5zb2NrZXRwYWlyXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcbjIxNjg6XHRcdC5hY2NlcHRcdFx0PSBzb2NrX25vX2FjY2VwdCxcbjIxNjk6XHRcdC5nZXRuYW1lXHQ9IHNvY2tfbm9fZ2V0bmFtZSxcbjIxNzA6XHRcdC5wb2xsXHRcdD0geHNrX3BvbGwsXG4yMTcxOlx0XHQuaW9jdGxcdFx0PSBzb2NrX25vX2lvY3RsLFxuMjE3MjpcdFx0Lmxpc3Rlblx0XHQ9IHNvY2tfbm9fbGlzdGVuLFxuMjE3MzpcdFx0LnNodXRkb3duXHQ9IHNvY2tfbm9fc2h1dGRvd24sXG4yMTc0Olx0XHQuc2V0c29ja29wdFx0PSB4c2tfc2V0c29ja29wdCxcbjIxNzU6XHRcdC5nZXRzb2Nrb3B0X2l0ZXIgPSB4c2tfZ2V0c29ja29wdCxcbjIxNzY6XHRcdC5zZW5kbXNnXHQ9IHhza19zZW5kbXNnLFxuMjE3NzpcdFx0LnJlY3Ztc2dcdD0geHNrX3JlY3Ztc2csXG4yMTc4Olx0XHQubW1hcFx0XHQ9IHhza19tbWFwLFxuMjE3OTpcdH07XG4yMTgwOlx0XG4yMTgxOlx0c3RhdGljIHZvaWQgeHNrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbjIxODI6XHR7XG4yMTgzOlx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcbjIxODQ6XHRcbjIxODU6XHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuMjE4NjpcdFx0XHRyZXR1cm47XG4yMTg3Olx0XG4yMTg4Olx0XHRpZiAoIXhwX3B1dF9wb29sKHhzLVx1MDAzZXBvb2wpKVxuMjE4OTpcdFx0XHR4ZHBfcHV0X3VtZW0oeHMtXHUwMDNldW1lbSwgIXhzLVx1MDAzZXBvb2wpO1xuMjE5MDpcdH1cbjIxOTE6XHRcbjIxOTI6XHRzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4yMTkzOlx0XHRcdCAgICAgIGludCBrZXJuKVxuMjE5NDpcdHtcbjIxOTU6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHM7XG4yMTk2Olx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4yMTk3Olx0XG4yMTk4Olx0XHRpZiAoIW5zX2NhcGFibGUobmV0LVx1MDAzZXVzZXJfbnMsIENBUF9ORVRfUkFXKSlcbjIxOTk6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjIyMDA6XHRcdGlmIChzb2NrLVx1MDAzZXR5cGUgIT0gU09DS19SQVcpXG4yMjAxOlx0XHRcdHJldHVybiAtRVNPQ0tUTk9TVVBQT1JUO1xuMjIwMjpcdFxuMjIwMzpcdFx0aWYgKHByb3RvY29sKVxuMjIwNDpcdFx0XHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcbjIyMDU6XHRcbjIyMDY6XHRcdHNvY2stXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcbjIyMDc6XHRcbjIyMDg6XHRcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9YRFAsIEdGUF9LRVJORUwsIFx1MDAyNnhza19wcm90bywga2Vybik7XG4yMjA5Olx0XHRpZiAoIXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFGX1hEUCBQYWNrZXQgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGluIHRoZSBoZWFydCBvZiB0aGUgbmV0d29ya2luZyBlbmdpbmU6IEFGX1hEUCBzb2NrZXRzIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgcGFja2V0cyBnZXQgdHJhbnNtaXR0ZWQgdmlhIHRoZSBjb3B5IG1vZGUgd2l0aGluIEFGX1hEUC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7Q2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgaW4gbXkgdHlwaWNhbCBlbnZpcm9ubWVudHM/JiMzNDsgQW5kIHRoZSBhbnN3ZXIgaGVyZSBpcyBhIHNvbGlkICYjMzQ7WWVzLiYjMzQ7IEFGX1hEUCBpcyBwZXJmZWN0bHkgaGFwcHkgcnVubmluZyBvbiBsb29wYmFjaywgdmV0aCwgb3IgYW55IHZpcnR1YWwgbmV0d29yayBkZXZpY2UgaW4gY29weSBtb2RlLCB3aGljaCBjb3ZlcnMgZ2VuZXJpYyBYRFAgYW5kIGdlbmVyaWMgWFNLIG1vZGVzIOKAkyB0aG9zZSBhcmUgY29tbW9uIHNldHVwcywgYW5kIEkga25vdyBJIGNhbiBlYXNpbHkgZ2V0IHRoaXMgcnVubmluZy4KCk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIGBza19idWZmYCBhbmQgYWN0dWFsbHkgKnNlbmRpbmcqIHRoZSBwYWNrZXQsIHRoaW5ncyBsaWtlIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrX3NlbmRtc2dgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGZpcmluZyBsaW5lLiBUaGF0IHdob2xlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aCBpcyBhIHBvdGVudGlhbCBnb2xkIG1pbmUgZm9yIGZpbmRpbmcgYnVncy4gSSBrbm93IHRoYXQga2luZCBvZiBsb3cgbGV2ZWwgcGFja2V0IGNvbnN0cnVjdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreSBhbmQgdnVsbmVyYWJpbGl0aWVzIGNhbiBoaWRlLgoKTm93LCBiZWZvcmUgSSBzdGFydCB0aHJvd2luZyBmdXp6ZXJzIGF0IGl0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgY3JpdGljYWwgYml0IGlzIHRoYXQgYFhEUF9TT0NLRVRTYCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIHRvIHNlZSBpZiBlaXRoZXIgb2YgdGhvc2Ugb3B0aW9ucyBoYXZlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBoYXJuZXNzIGlzIHNldCB1cCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU1MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBEb3duIEJQRl9TWVNDQUxMIGluIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gVGhpcyBpc24mIzM5O3QgdXN1YWxseSBhIHRyaXZpYWwgdGFzazsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBLY29uZmlnIGZpbGVzLCBvZnRlbiBuZXN0ZWQgZGVlcCB3aXRoaW4gZmVhdHVyZSBkaXJlY3RvcmllcyBhbmQgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZmluZGAgb3IgYGdyZXBgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsaWtlbHkgdXNpbmcgYSBwYXR0ZXJuIHRoYXQmIzM5O3MgYXMgZ2VuZXJhbCBhcyBwb3NzaWJsZSB0byBzdGFydCwgcGVyaGFwcyBgZ3JlcCAmIzM5O0JQRl9TWVNDQUxMJiMzOTsgS2NvbmZpZyogLXJgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBhcm91bmQgZWFjaCBtYXRjaCwgbG9va2luZyBmb3IgdGhlIGBjb25maWdgIGtleXdvcmQgYW5kIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyAoZS5nLiwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgZXRjLikuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSBtZW51IHN0cnVjdHVyZSwgYW55IGRlZmF1bHQgdmFsdWVzIGFzc2lnbmVkLCBhbmQgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoZSBhc3NvY2lhdGVkIEMgY29kZSBtaWdodCBiZS4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBvciBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24uIFRoaXMgbWlnaHQgbWVhbiBuZWVkaW5nIHRvIHRyYXZlcnNlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGV4cG9zZSBvciBlbmFibGUgYEJQRl9TWVNDQUxMYCAuIElmIHRoYXQgZ2V0cyB0b28gY29tcGxleCwgSSYjMzk7bGwgZmFsbCBiYWNrIHRvIGtlcm5lbCBidWlsZCBzeXN0ZW0gb3B0aW9ucywgbGlrZSBsb29raW5nIGZvciBLY29uZmlnIGluY2x1ZGVzIG9yIG90aGVyIGhpbnRzIGZyb20gYnVpbGQgc2NyaXB0cy4gVGhpcyBpcyBhbGwgYWJvdXQgbmF2aWdhdGluZyB0aGUgY29uZmlndXJhdGlvbiBtYXplIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gd2hldGhlciBgQlBGX1NZU0NBTExgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGFuZCBob3cgdGhlIHVuZGVybHlpbmcgQlBGIHN1YnN5c3RlbSBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdCwgbXkgaW5pdGlhbCBodW5jaCB0ZWxscyBtZSB3ZSBuZWVkIHRvIGV4YW1pbmUgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI3LiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZUJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgZGVwZW5kZW5jaWVzIHJlc2lkZXMgYXJvdW5kIHRoYXQgYXJlYS4gVGhpcyB3b3VsZCBiZSB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBpZiB0aGVyZSBhcmUgY29uZmlndXJhdGlvbiBpc3N1ZXMuIFdlIHdpbGwgc2VlIGlmIHRoZSBsaW5lIGFuZCBhcm91bmQgdGhhdCByZWdpb24gaGFzIHJlbGV2YW50IGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIG9yIHBvdGVudGlhbCBjb25mbGljdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTMzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlhEUCBTb2NrZXRzIGFuZCBLZXkgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjayBhbmQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L3hkcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBYRFBfU09DS0VUU2AgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBCUEZfU1lTQ0FMTGAsIGFuZCBpdCYjMzk7cyBhIGJvb2xlYW4sIGFzIGV4cGVjdGVkLiBHb29kLCBnb29kLgoKTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSBBRl9YRFAgcGF0aC4gTGV0JiMzOTtzIHRyYWNlIHRoZSByZWxldmFudCBlbnRyeXBvaW50cyBhbmQgZnVuY3Rpb25zIGluIGBuZXQveGRwL3hzay5jYCB0aGF0IGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBBUEkgZW50cnlwb2ludHMuIFRoZSBvbmVzIHRoYXQgaW1tZWRpYXRlbHkgY29tZSB0byBtaW5kIGFyZTogYHhza19zZW5kbXNnYCAob3IgcG9zc2libHkgYF9feHNrX3NlbmRtc2dgKSwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19zZXRzb2Nrb3B0YCwgYHhza19tbWFwYCwgYHhza19jcmVhdGVgLCBhbmQgYHhza19kZXN0cnVjdF9za2JgLgoKVGhlIG5leHQgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucywgbGlrZSBgeHNrX3NlbmRtc2dgLCBgeHNrX3BvbGxgLCBhbmQgYHhza19iaW5kYCwgYXJlIGRlZmluZWQgYXMgc3RhdGljIG9yIG5vdC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGZvciB1bmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCB2aXNpYmlsaXR5IHdpdGhpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz0xMzU2PXN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxuLS1cbm5ldC94ZHAveHNrLmMtMTM2NS1cbm5ldC94ZHAveHNrLmM6MTM2NjpzdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM2Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzk2LVxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM5OC17XG4tLVxubmV0L3hkcC94c2suYy0xNDAxLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L3hkcC94c2suYzoxNDAyOlx0cmV0ID0gX194c2tfc2VuZG1zZyhzb2NrLCBtLCB0b3RhbF9sZW4pO1xubmV0L3hkcC94c2suYy0xNDAzLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3hkcC94c2suYz0yMTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMTc1LVx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxubmV0L3hkcC94c2suYzoyMTc2Olx0LnNlbmRtc2dcdD0geHNrX3NlbmRtc2csXG5uZXQveGRwL3hzay5jLTIxNzctXHQucmVjdm1zZ1x0PSB4c2tfcmVjdm1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzQKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBYU0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBuZXQveGRwL3hzay5jYCBmaWxlLiBJIHNlZSB0aGUgY29yZSBYU0sgZnVuY3Rpb24gY2FsbHM6IGB4c2tfc2VuZG1zZ2AsIGB4c2tfcG9sbGAsIGB4c2tfYmluZGAsIGB4c2tfbW1hcGAsIGB4c2tfc2V0c29ja29wdGAsIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAgYXJlIGFsbCBkZWZpbmVkIGhlcmUuIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYHhza19kZXN0cnVjdF9za2JgIHJpZ2h0IG5vdzsgaXQmIzM5O3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBTS0IgbGlmZWN5Y2xlLiBHb29kLCBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBmaWxlLiBUaGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIG5hbWUuIE5vdywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGJhY2sgYXQgdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zLiBJIHdhbnQgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGlzIFhTSyBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKC4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XG5uZXQveGRwL3hzay5jLTUwLVxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTUyLXtcbi0tXG5uZXQveGRwL3hzay5jLTU4LX1cbm5ldC94ZHAveHNrLmM6NTk6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtNjAtXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNzUtfVxubmV0L3hkcC94c2suYzo3NjpFWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy03Ny1cbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTc5LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1LX1cbm5ldC94ZHAveHNrLmM6ODY6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy04Ny1cbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTg5LXtcbi0tXG5uZXQveGRwL3hzay5jLTEwMi19XG5uZXQveGRwL3hzay5jOjEwMzpFWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTEwNC1cbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTEwNi17XG4tLVxubmV0L3hkcC94c2suYy0xMDgtfVxubmV0L3hkcC94c2suYzoxMDk6RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTExMC1cbm5ldC94ZHAveHNrLmM9MTExPXN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQveGRwL3hzay5jLTEyMC19XG5uZXQveGRwL3hzay5jOjEyMTpFWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XG5uZXQveGRwL3hzay5jLTEyMi1cbm5ldC94ZHAveHNrLmM6MTIzOnN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTI0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jPTIwOD1zdGF0aWMgdm9pZCBfX3hza19yY3ZfemNfc2FmZShzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLFxuLS1cbm5ldC94ZHAveHNrLmMtMjE4LVxubmV0L3hkcC94c2suYzoyMTk6c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy0yMjAte1xuLS1cbm5ldC94ZHAveHNrLmMtMjU5LVxubmV0L3hkcC94c2suYzoyNjA6c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXG5uZXQveGRwL3hzay5jLTI2MS17XG4tLVxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxuLS1cbm5ldC94ZHAveHNrLmMtMjk1LVxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTI5Ny17XG4tLVxubmV0L3hkcC94c2suYy0zODgtXG5uZXQveGRwL3hzay5jOjM4OTpzdGF0aWMgYm9vbCB4c2tfdHhfd3JpdGVhYmxlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTM5MC17XG4tLVxubmV0L3hkcC94c2suYy0zOTYtXG5uZXQveGRwL3hzay5jOjM5NzpzdGF0aWMgdm9pZCBfX3hza190eF9yZWxlYXNlKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTM5OC17XG4tLVxubmV0L3hkcC94c2suYy00MDMtXG5uZXQveGRwL3hzay5jOjQwNDpzdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDA1LXtcbi0tXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy00MzgtXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXG5uZXQveGRwL3hzay5jLTQ0MC17XG4tLVxubmV0L3hkcC94c2suYy00NTMtXG5uZXQveGRwL3hzay5jOjQ1NDpzdGF0aWMgdm9pZCB4c2tfZmx1c2goc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtNDU1LXtcbi0tXG5uZXQveGRwL3hzay5jLTQ2MC1cbm5ldC94ZHAveHNrLmM6NDYxOmludCB4c2tfZ2VuZXJpY19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ2Mi17XG4tLVxubmV0L3hkcC94c2suYy00NzYtXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXG5uZXQveGRwL3hzay5jLTQ3OC17XG4tLVxubmV0L3hkcC94c2suYy00OTYtXG5uZXQveGRwL3hzay5jOjQ5NzppbnQgX194c2tfbWFwX3JlZGlyZWN0KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00OTgte1xuLS1cbm5ldC94ZHAveHNrLmMtNTEzLVxubmV0L3hkcC94c2suYzo1MTQ6dm9pZCBfX3hza19tYXBfZmx1c2goc3RydWN0IGxpc3RfaGVhZCAqZmx1c2hfbGlzdClcbm5ldC94ZHAveHNrLmMtNTE1LXtcbi0tXG5uZXQveGRwL3hzay5jLTUyMy1cbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTUyNS17XG4tLVxubmV0L3hkcC94c2suYy01NDQtfVxubmV0L3hkcC94c2suYzo1NDU6RVhQT1JUX1NZTUJPTCh4c2tfdHhfY29tcGxldGVkKTtcbm5ldC94ZHAveHNrLmMtNTQ2LVxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcbm5ldC94ZHAveHNrLmMtNTQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTU1NS19XG5uZXQveGRwL3hzay5jOjU1NjpFWFBPUlRfU1lNQk9MKHhza190eF9yZWxlYXNlKTtcbm5ldC94ZHAveHNrLmMtNTU3LVxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXG5uZXQveGRwL3hzay5jLTU1OS17XG4tLVxubmV0L3hkcC94c2suYy02MDMtfVxubmV0L3hkcC94c2suYzo2MDQ6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcGVla19kZXNjKTtcbm5ldC94ZHAveHNrLmMtNjA1LVxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXG5uZXQveGRwL3hzay5jLTYwNy17XG4tLVxubmV0L3hkcC94c2suYz02Njg9c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG5uZXQveGRwL3hzay5jLTY3MC17XG4tLVxubmV0L3hkcC94c2suYy03NDMtXG5uZXQveGRwL3hzay5jOjc0NDp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzQ1LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MC19XG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc5Mi1cbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzk0LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5OS1cbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04MDEte1xuLS1cbm5ldC94ZHAveHNrLmMtODEwLVxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgxNS1cbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgxNy17XG4tLVxubmV0L3hkcC94c2suYy04MjAtXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXG5uZXQveGRwL3hzay5jLTgyMi17XG4tLVxubmV0L3hkcC94c2suYy04MzMtXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgzNS17XG4tLVxubmV0L3hkcC94c2suYy04NDYtXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1OC1cbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODYwLXtcbi0tXG5uZXQveGRwL3hzay5jLTg2OC1cbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NzAte1xuLS1cbm5ldC94ZHAveHNrLmM9OTExPXN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtOTIzLVxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTMzLXtcbi0tXG5uZXQveGRwL3hzay5jPTk0NT1zdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy05NjItXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTY0LXtcbi0tXG5uZXQveGRwL3hzay5jLTk4MC1cbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05ODIte1xuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTEyMTYtXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMjE4LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMzEtXG5uZXQveGRwL3hzay5jOjEzMzI6c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcbm5ldC94ZHAveHNrLmMtMTMzMy17XG4tLVxubmV0L3hkcC94c2suYy0xMzQ0LVxubmV0L3hkcC94c2suYzoxMzQ1OnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzQ2LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNTUtXG5uZXQveGRwL3hzay5jOjEzNTY6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTEzNTcte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM2NS1cbm5ldC94ZHAveHNrLmM6MTM2NjpzdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM2Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzk2LVxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbm5ldC94ZHAveHNrLmMtMTM5OC17XG4tLVxubmV0L3hkcC94c2suYy0xNDA3LVxubmV0L3hkcC94c2suYzoxNDA4OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG5uZXQveGRwL3hzay5jLTE0MDkte1xuLS1cbm5ldC94ZHAveHNrLmMtMTQzMy1cbm5ldC94ZHAveHNrLmM6MTQzNDpzdGF0aWMgaW50IHhza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbm5ldC94ZHAveHNrLmMtMTQzNS17XG4tLVxubmV0L3hkcC94c2suYz0xNDc4PXN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcbi0tXG5uZXQveGRwL3hzay5jLTE0OTUtXG5uZXQveGRwL3hzay5jOjE0OTY6c3RhdGljIHZvaWQgeHNrX3VuYmluZF9kZXYoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTQ5Ny17XG4tLVxubmV0L3hkcC94c2suYz0xNTEwPXN0YXRpYyBzdHJ1Y3QgeHNrX21hcCAqeHNrX2dldF9tYXBfbGlzdF9lbnRyeShzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuLS1cbm5ldC94ZHAveHNrLmMtMTUyOS1cbm5ldC94ZHAveHNrLmM6MTUzMDpzdGF0aWMgdm9pZCB4c2tfZGVsZXRlX2Zyb21fbWFwcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNTMxLXtcbi0tXG5uZXQveGRwL3hzay5jLTE1NTUtXG5uZXQveGRwL3hzay5jOjE1NTY6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L3hkcC94c2suYy0xNTU3LXtcbi0tXG5uZXQveGRwL3hzay5jLTE1OTMtXG5uZXQveGRwL3hzay5jOjE1OTQ6c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxubmV0L3hkcC94c2suYy0xNTk1LXtcbi0tXG5uZXQveGRwL3hzay5jLTE2MTAtXG5uZXQveGRwL3hzay5jOjE2MTE6c3RhdGljIGJvb2wgeHNrX3ZhbGlkYXRlX3F1ZXVlcyhzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy0xNjEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTE2MTUtXG5uZXQveGRwL3hzay5jOjE2MTY6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxubmV0L3hkcC94c2suYy0xNjE3LXtcbi0tXG5uZXQveGRwL3hzay5jPTE4MTQ9c3RhdGljIGludCB4c2tfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC94ZHAveHNrLmMtMTkzNi1cbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5Mzgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTk0My1cbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9MjE2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xuLS1cbm5ldC94ZHAveHNrLmMtMjE4MC1cbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0yMTgyLXtcbi0tXG5uZXQveGRwL3hzay5jPTIyNDU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xuLS1cbm5ldC94ZHAveHNrLmMtMjI0OC1cbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZHAveHNrLmMtMjI1MC17XG4tLVxubmV0L3hkcC94c2suYy0yMjU1LVxubmV0L3hkcC94c2suYzoyMjU2OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgeHNrX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC94ZHAveHNrLmMtMjI1Ny17XG4tLVxubmV0L3hkcC94c2suYz0yMjYxPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgeHNrX25ldF9vcHMgPSB7XG4tLVxubmV0L3hkcC94c2suYy0yMjY1LVxubmV0L3hkcC94c2suYzoyMjY2OnN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXG5uZXQveGRwL3hzay5jLTIyNjcte1xuLS1cbm5ldC94ZHAveHNrLmMtMjMwNy1cbm5ldC94ZHAveHNrLmM6MjMwODpmc19pbml0Y2FsbCh4c2tfaW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTMzCgkJCQkJCQlvdXRwdXQ6IDE0NQoJCQkJCQkJdGhvdWdodHM6IDIzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIFRoaXMgRnV6emluZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGludm9sdmVkLCBhbmQgaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLgoKRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIFRoZSBjcml0aWNhbCBzeW1ib2xzIHRoYXQgbWF0dGVyIGFyZSBgeHNrX3NlbmRtc2dgLCBgeHNrX2Rlc3RydWN0X3NrYmAsIGB4c2tfZ2VuZXJpY19yY3ZgLCBgeHNrX2JpbmRgLCBhbmQgYHhza19zZXRzb2Nrb3B0YCAob3IgYHhza19wb2xsYCkuIEkgY2FuIGRlZmluaXRlbHkgc2VlIGhvdyB0aGVzZSBpbnRlcmFjdC4gVGhlbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbnMgSSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBmdXp6aW5nIHNldHVwLgoKTm93LCBsZXQgbWUgYW5hbHl6ZSB0aGUgcmVhc29uaW5nLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBBRl9YRFAgdHJhbnNtaXNzaW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIGdlbmVyaWMgY29weSBtb2RlLCB3aGVuIFNLQnMgYXJlIHJlc2V0LiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgaW1wbGllcyBjaGFuZ2VzIHRvIGNvcmUgQUZfWERQIHNvY2tldCBzZW5kIGFuZCByZWNlaXZlIHBhdGhzLiBUaGF0IG1ha2VzIGl0IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGlkZWFsIGZvciB0ZXN0aW5nLiBUaGF04oCZcyBhIGdvb2Qgc2lnbiwgYW5kIGl0IG1lYW5zIHRoZSBlZmZvcnQgaXMgd29ydGggdGhlIHJldHVybi4KCk5vdywgSeKAmW0gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlncywgaXNvbGF0ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgdGVzdGFibGUgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIGdldCB0aGlzIGludG8gdGhlIGZ1enppbmcgcGlwZWxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIG9uIFNLQnMgY3JlYXRlZCBkdXJpbmcgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgbW9kZSAoeHNrX3NrYl9pbml0X21pc2MpLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRFBfU09DS0VUUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hza19zZW5kbXNnJiMzNDssCiAgICAmIzM0O3hza19kZXN0cnVjdF9za2ImIzM0OywKICAgICYjMzQ7eHNrX2JpbmQmIzM0OywKICAgICYjMzQ7eHNrX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7eHNrX3BvbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzZXRzIHRoZSBuZXR3b3JrIGhlYWRlciBwb2ludGVyIG9uIFNLQnMgY3JlYXRlZCBkdXJpbmcgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgbW9kZSAoeHNrX3NrYl9pbml0X21pc2MpLCBlbnN1cmluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgdG91Y2hlcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIHRyYW5zbWlzc2lvbiBwYXRocyB3aGljaCBhcmUgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkyOTM5ZTkwYTFiN2E1ZDZiNDczYTcwMWQyNmI2ODI0MmQzMzJiMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDEgMTk6Mjk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NAotLS0gYS9uZXQveGRwL3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmMKQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogewogCWludCBlcnI7CiAKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CiAJZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDY1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgWFNLIENvZGUqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCBpdCwgc28gbXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZGlmZiBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AuIEkga25vdyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDk0NyBpbiBgbmV0L3hkcC94c2suY2AuIEkgZXhwZWN0IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGFyZSwgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIGEgc29saWQgYmFzZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29tbWl0JiMzOTtzIGludGVudCBhbmQgYW55IHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIFRoYXQmIzM5O2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTMwOlx0XG4gOTMxOlx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbiA5MzI6XHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCA9IFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2V4c2tfbWV0YTtcbiA5MzU6XHRcbiA5MzY6XHRcdGlmIChjb21wbC1cdTAwM2V0eF90aW1lc3RhbXApIHtcbiA5Mzc6XHRcdFx0Lyogc3cgY29tcGxldGlvbiB0aW1lc3RhbXAsIG5vdCBhIHJlYWwgb25lICovXG4gOTM4Olx0XHRcdCpjb21wbC1cdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcbiA5Mzk6XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlcG9vbCwgc2tiKTtcbiA5NDI6XHRcdHNvY2tfd2ZyZWUoc2tiKTtcbiA5NDM6XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIDk0NjpcdFx0XHRcdCAgICAgdTY0IGFkZHIpXG4gOTQ3Olx0e1xuIDk0ODpcdFx0aW50IGVycjtcbiA5NDk6XHRcbiA5NTA6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDk1MTpcdFxuIDk1MjpcdFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gOTUzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA5NTQ6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTU6XHRcbiA5NTY6XHRcdHNrYi1cdTAwM2VkZXYgPSB4cy1cdTAwM2VkZXY7XG4gOTU3Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfcHJpb3JpdHkpO1xuIDk1ODpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfbWFyayk7XG4gOTU5Olx0XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHhza19kZXN0cnVjdF9za2I7XG4gOTYwOlx0XHRyZXR1cm4gMDtcbiA5NjE6XHR9XG4gOTYyOlx0XG4gOTYzOlx0c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTY0Olx0e1xuIDk2NTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk2NjpcdFx0dTMyIG51bV9kZXNjcyA9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5Njc6XHRcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xuIDk2ODpcdFxuIDk2OTpcdFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xuIDk3MDpcdFx0XHR4c2tfYWRkciA9IChzdHJ1Y3QgeHNrX2FkZHJzICopc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnO1xuIDk3MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcbiA5NzI6XHRcdH1cbiA5NzM6XHRcbiA5NzQ6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcbiA5NzU6XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIG51bV9kZXNjcyk7XG4gOTc2Olx0XHQvKiBGcmVlIHNrYiB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHBlcmYgZHJvcCB0cmFjZSAqL1xuIDk3NzpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5Nzg6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTc5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIFhTSyBTS0IgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBYRFAgYW5kIHNwZWNpZmljYWxseSB0aGUgWFNLIHBhcnQgb2YgaXQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYW4gU0tCIHdpdGhpbiB0aGlzIGNvbnRleHQuIEkmIzM5O20gZm9jdXNpbmcgb24gYHhza19za2JfaW5pdF9taXNjYCBpbiBgbmV0L3hkcC94c2suY2AgYmVjYXVzZSBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRob3NlIFNLQnMgc2V0IHVwLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgU0tCcyBhcmUgaW5pdGlhbGx5IGNvbnN0cnVjdGVkLCB3aGF0JiMzOTtzIHB1dCBpbnRvIHRoZW0sIGFuZCBob3cgdGhleSYjMzk7cmUgc3Vic2VxdWVudGx5IHVzZWQgd2l0aGluIHRoZSBYU0sgZnJhbWV3b3JrLiBMb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdywgdW5kZXJzdGFuZCBhbnkgZWRnZSBjYXNlcywgYW5kIHBvc3NpYmx5IGV2ZW4gaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eHNrX3NrYl9pbml0X21pc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMTg2LVx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbm5ldC94ZHAveHNrLmM6MTE4NzpcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbm5ldC94ZHAveHNrLmMtMTE4OC1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBTb2NrZXQgQ29uc3RydWN0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgdGhlc2UgWERQIHNvY2tldHMgYWN0dWFsbHkgYnVpbGQgdGhlaXIgU0tCcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHhza19idWlsZF9za2JgLCBhbmQgb2YgY291cnNlLCBJIG5lZWQgdG8gc2VlIGhvdyBpdCYjMzk7cyBjYWxsZWQgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3hkcC94c2suY2AuIEdvdHRhIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgaW4gaG93IGl0JiMzOTtzIGFsbCBwdXQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSBoYXBwZW4sIHNvIGxldCYjMzk7cyBzdGFydCBkaXNzZWN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XHR9XG4xMTAxOlx0XG4xMTAyOlx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBsZW47XG4xMTAzOlx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGxlbjtcbjExMDQ6XHRcdHNrYi1cdTAwM2V0cnVlc2l6ZSAmIzQzOz0gdHM7XG4xMTA1Olx0XG4xMTA2Olx0XHRyZWZjb3VudF9hZGQodHMsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTEwNzpcdFxuMTEwODpcdFx0cmV0dXJuIHNrYjtcbjExMDk6XHR9XG4xMTEwOlx0XG4xMTExOlx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4xMTEyOlx0XHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbjExMTM6XHR7XG4xMTE0Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0geHMtXHUwMDNlZGV2O1xuMTExNTpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVx1MDAzZXNrYjtcbjExMTY6XHRcdGludCBlcnI7XG4xMTE3Olx0XG4xMTE4Olx0XHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG4xMTE5Olx0XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xuMTEyMDpcdFx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbjExMjE6XHRcdFx0XHRlcnIgPSBQVFJfRVJSKHNrYik7XG4xMTIyOlx0XHRcdFx0c2tiID0gTlVMTDtcbjExMjM6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTEyNDpcdFx0XHR9XG4xMTI1Olx0XHR9IGVsc2Uge1xuMTEyNjpcdFx0XHR1MzIgaHIsIHRyLCBsZW47XG4xMTI3Olx0XHRcdHZvaWQgKmJ1ZmZlcjtcbjExMjg6XHRcbjExMjk6XHRcdFx0YnVmZmVyID0geHNrX2J1ZmZfcmF3X2dldF9kYXRhKHhzLVx1MDAzZXBvb2wsIGRlc2MtXHUwMDNlYWRkcik7XG4xMTMwOlx0XHRcdGxlbiA9IGRlc2MtXHUwMDNlbGVuO1xuMTEzMTpcdFxuMTEzMjpcdFx0XHRpZiAoIXNrYikge1xuMTEzMzpcdFx0XHRcdGhyID0gbWF4KE5FVF9TS0JfUEFELCBMMV9DQUNIRV9BTElHTihkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSk7XG4xMTM0Olx0XHRcdFx0dHIgPSBkZXYtXHUwMDNlbmVlZGVkX3RhaWxyb29tO1xuMTEzNTpcdFx0XHRcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXHUwMDI2eHMtXHUwMDNlc2ssIGhyICYjNDM7IGxlbiAmIzQzOyB0ciwgMSwgXHUwMDI2ZXJyKTtcbjExMzY6XHRcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4xMTM3Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTEzODpcdFxuMTEzOTpcdFx0XHRcdHNrYl9yZXNlcnZlKHNrYiwgaHIpO1xuMTE0MDpcdFx0XHRcdHNrYl9wdXQoc2tiLCBsZW4pO1xuMTE0MTpcdFxuMTE0MjpcdFx0XHRcdGVyciA9IHNrYl9zdG9yZV9iaXRzKHNrYiwgMCwgYnVmZmVyLCBsZW4pO1xuMTE0MzpcdFx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuMTE0NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNDU6XHRcbjExNDY6XHRcdFx0XHRpZiAoZGVzYy1cdTAwM2VvcHRpb25zIFx1MDAyNiBYRFBfVFhfTUVUQURBVEEpIHtcbjExNDc6XHRcdFx0XHRcdGVyciA9IHhza19za2JfbWV0YWRhdGEoc2tiLCBidWZmZXIsIGRlc2MsXG4xMTQ4Olx0XHRcdFx0XHRcdFx0ICAgICAgIHhzLVx1MDAzZXBvb2wsIGhyKTtcbjExNDk6XHRcdFx0XHRcdGlmICh1bmxpa2VseShlcnIpKVxuMTE1MDpcdFx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE1MTpcdFx0XHRcdH1cbjExNTI6XHRcdFx0fSBlbHNlIHtcbjExNTM6XHRcdFx0XHRpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlbnJfZnJhZ3M7XG4xMTU0Olx0XHRcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4xMTU1Olx0XHRcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4xMTU2Olx0XHRcdFx0dTggKnZhZGRyO1xuMTE1NzpcdFxuMTE1ODpcdFx0XHRcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XG4xMTU5Olx0XHRcdFx0aWYgKCF4c2tfYWRkcikge1xuMTE2MDpcdFx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbjExNjE6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTYyOlx0XHRcdFx0fVxuMTE2MzpcdFxuMTE2NDpcdFx0XHRcdHhza19hZGRyLVx1MDAzZWFkZHJzW3hza19hZGRyLVx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVx1MDAzZWFkZHI7XG4xMTY1Olx0XG4xMTY2Olx0XHRcdFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXHUwMDI2XHUwMDI2IHhwX21iX2Rlc2MoZGVzYykpKSB7XG4xMTY3Olx0XHRcdFx0XHRlcnIgPSAtRU9WRVJGTE9XO1xuMTE2ODpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjk6XHRcdFx0XHR9XG4xMTcwOlx0XG4xMTcxOlx0XHRcdFx0cGFnZSA9IGFsbG9jX3BhZ2UoeHMtXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XG4xMTcyOlx0XHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuMTE3MzpcdFx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjExNzQ6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTc1Olx0XHRcdFx0fVxuMTE3NjpcdFxuMTE3NzpcdFx0XHRcdHZhZGRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuMTE3ODpcdFx0XHRcdG1lbWNweSh2YWRkciwgYnVmZmVyLCBsZW4pO1xuMTE3OTpcdFx0XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4xMTgwOlx0XG4xMTgxOlx0XHRcdFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcbjExODI6XHRcdFx0XHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcdTAwMjZ4cy1cdTAwM2Vzay5za193bWVtX2FsbG9jKTtcbjExODM6XHRcdFx0fVxuMTE4NDpcdFx0fVxuMTE4NTpcdFxuMTE4NjpcdFx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbjExODc6XHRcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbjExODg6XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTg5Olx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExOTA6XHRcdH1cbjExOTE6XHRcdHhza19pbmNfbnVtX2Rlc2Moc2tiKTtcbjExOTI6XHRcbjExOTM6XHRcdHJldHVybiBza2I7XG4xMTk0Olx0XG4xMTk1Olx0ZnJlZV9lcnI6XG4xMTk2Olx0XHRpZiAoc2tiIFx1MDAyNlx1MDAyNiAheHMtXHUwMDNlc2tiKVxuMTE5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbjExOTg6XHRcbjExOTk6XHRcdGlmIChlcnIgPT0gLUVPVkVSRkxPVykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzc4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXJgKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgd2h5IGl0JiMzOTtzIGJlZW4gaW50cm9kdWNlZC4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgaXQgZXNzZW50aWFsbHkgc2V0cyBgc2tiLSZndDtuZXR3b3JrX2hlYWRlcmAgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgc2tiLSZndDtkYXRhYCBhbmQgYHNrYi0mZ3Q7aGVhZGAuIE1ha2VzIHNlbnNlLiBOb3csIHdoZXJlIGlzIHRoaXMgdXNlZCBhbmQgd2h5PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBmdW5jdGlvbnMgbGlrZSBgc29ja19hbGxvY19zZW5kX3NrYmAgb3IgYHhza19idWlsZF9za2JfemVyb2NvcHlgIGRvbiYjMzk7dCBpbml0aWFsaXplIHRoaXMgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCwgb3IgbWF5YmUgdGhleSBkZWZhdWx0IGl0IHRvIHplcm8gKHdoaWNoIHBvaW50cyBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc2tiLSZndDtoZWFkYCBidWZmZXIpLgoKSXQgc2VlbXMgdmFyaW91cyBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjaywgZnJvbSBkcml2ZXJzIHRvIHBhY2tldCBzY2hlZHVsZXJzIGxpa2UgcWRpc2MgYW5kIGZ1bmN0aW9ucyBsaWtlIGBkZXZfcXVldWVfeG1pdGAgb3IgWERQL0JQRiBwcm9ncmFtcywgZGVwZW5kIG9uIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXJgIGJlaW5nIGNhbGxlZCwgb3IgbW9yZSBnZW5lcmFsbHkgb24gYG5ldHdvcmtfaGVhZGVyYCBoYXZpbmcgYSB2YWxpZCByZWxhdGl2ZSBvZmZzZXQgdG8gYHNrYi0mZ3Q7ZGF0YWAuIEkgYmV0IEkmIzM5O2xsIHNlZSBzb21lIHVzYWdlIGluIGBkZXZfdmFsaWRhdGVfaGVhZGVyYCBvciB3aXRoIHBhY2tldCBzb2NrZXRzLCBvciBkdXJpbmcgY2hlY2tzIHRoYXQgdXNlIGBza2JfbmV0d29ya19vZmZzZXRgLgoKVG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBjb21taXQgaGlzdG9yeSwgbWF5YmUgdXNlIGBnaXQgYmxhbWVgIG9yIGBnaXQgbG9nYCB0byBmaW5kIHRoZSByZWxldmFudCBjaGFuZ2VzIG9yIHJlbGF0ZWQgY29kZS4gSSYjMzk7bGwgYWxzbyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcmAsIGFuZCBtYXliZSBgeHNrX3NrYl9pbml0X21pc2NgIG9yIHNpbWlsYXIgZnVuY3Rpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBwb3BzIHVwIHdpdGhpbiB0aGUgbmV0L3hkcCBkaXJlY3Rvcmllcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHdoZXJlIGl0JiMzOTtzIGNyaXRpY2FsbHkgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2JfcmVzZXRfbmV0d29ya19oZWFkZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk0NT1zdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy05NDktXG5uZXQveGRwL3hzay5jOjk1MDpcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xubmV0L3hkcC94c2suYy05NTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGN1cmlvdXMgYWJvdXQgdGhlIGxpZmUgb2YgYW4gU0tCIOKAkyBzcGVjaWZpY2FsbHksIHRob3NlIGNyZWF0ZWQgd2l0aGluIHRoZSBgeHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24gb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGZyb20gaXRzIGNyZWF0aW9uIHBvaW50LiBXaGVyZSBkb2VzIGl0IGdvPyBXaGF0IGhhcHBlbnMgdG8gaXQ/IEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIHVzYWdlIG9mIGB4c2tfYnVpbGRfc2tiYCB0byBnZXQgYSBzZW5zZSBvZiB3aGVyZSB0aGVzZSBTS0JzIGFyZSBpbml0aWFsbHkgY29uc3RydWN0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG1hcCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiB0aGUgU0tCLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4c2tfYnVpbGRfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05OTA9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbi0tXG5uZXQveGRwL3hzay5jLTEwMzQtXG5uZXQveGRwL3hzay5jOjEwMzU6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTEwMzYtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTExMTAtXG5uZXQveGRwL3hzay5jOjExMTE6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTExMTItXHRcdFx0XHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcbi0tXG5uZXQveGRwL3hzay5jLTExMTgtXHRpZiAoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XG5uZXQveGRwL3hzay5jOjExMTk6XHRcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xubmV0L3hkcC94c2suYy0xMTIwLVx0XHRpZiAoSVNfRVJSKHNrYikpIHtcbi0tXG5uZXQveGRwL3hzay5jPTEyMTc9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC94ZHAveHNrLmMtMTI2My1cbm5ldC94ZHAveHNrLmM6MTI2NDpcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG5uZXQveGRwL3hzay5jLTEyNjUtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAxOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Nzg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IFhEUCBmcmFtZXMgYXJlIGFjdHVhbGx5IHNlbnQgb3V0LCBzcGVjaWZpY2FsbHkgdGhyb3VnaCB0aGUgYF9feHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjb3JlIHByb2Nlc3MgYXBwZWFycyB0byBiZTogYHhza19idWlsZF9za2JgIGNvbnN0cnVjdHMgYW4gYHNrYmAgKHNvY2tldCBidWZmZXIpIOKAkyB0aGUgd29ya2hvcnNlIGRhdGEgc3RydWN0dXJlIGZvciBuZXR3b3JrIHBhY2tldHMgaW4gdGhlIGtlcm5lbCDigJMgdXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgWERQIHNvY2tldCBkZXNjcmlwdG9ycyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoaXMgYHNrYmAgdGhlbiBnZXRzIHBhc3NlZCBvbiBmb3IgdHJhbnNtaXNzaW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHRyYW5zbWlzc2lvbiBoYXBwZW5zLCBzbyBJIGhhdmUgdG8ga2VlcCBkaWdnaW5nLiBUaGUgY29kZSBtZW50aW9ucyB0aGF0IHRoaXMgdHJhbnNtaXNzaW9uIGlzIGhhbmRsZWQgdmlhIGBkZXZfZGlyZWN0X3htaXRgLCBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBwb3RlbnRpYWxseSBldmVuIGBkZXZfcXVldWVfeG1pdGAuIFNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBfX3hza19nZW5lcmljX3htaXRgIHRvIGdldCB0aGUgZGV0YWlscyBvbiAqd2hpY2gqIHRyYW5zbWlzc2lvbiBmdW5jdGlvbiBpcyBhY3R1YWxseSBnZXR0aW5nIGludm9rZWQgdW5kZXIgZGlmZmVyZW50IGNpcmN1bXN0YW5jZXMsIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDE5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI1NTpcdFxuMTI1NjpcdFx0XHRpZiAodW5saWtlbHkoeHMtXHUwMDNlZHJhaW5fY29udCkpIHtcbjEyNTc6XHRcdFx0XHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cdTAwM2Vwb29sLCBcdTAwMjZkZXNjKTtcbjEyNTg6XHRcdFx0XHR4cy1cdTAwM2V0eC1cdTAwM2VpbnZhbGlkX2Rlc2NzJiM0MzsmIzQzOztcbjEyNTk6XHRcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjYwOlx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXHUwMDI2ZGVzYyk7XG4xMjYxOlx0XHRcdFx0Y29udGludWU7XG4xMjYyOlx0XHRcdH1cbjEyNjM6XHRcbjEyNjQ6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYih4cywgXHUwMDI2ZGVzYyk7XG4xMjY1Olx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTI2NjpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjEyNjc6XHRcdFx0XHRpZiAoZXJyICE9IC1FT1ZFUkZMT1cpXG4xMjY4Olx0XHRcdFx0XHRnb3RvIG91dDtcbjEyNjk6XHRcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSlcbjEyNzA6XHRcdFx0XHRcdHhzLVx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xuMTI3MTpcdFx0XHRcdGVyciA9IDA7XG4xMjcyOlx0XHRcdFx0Y29udGludWU7XG4xMjczOlx0XHRcdH1cbjEyNzQ6XHRcbjEyNzU6XHRcdFx0eHNrcV9jb25zX3JlbGVhc2UoeHMtXHUwMDNldHgpO1xuMTI3NjpcdFxuMTI3NzpcdFx0XHRpZiAoeHBfbWJfZGVzYyhcdTAwMjZkZXNjKSkge1xuMTI3ODpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IHNrYjtcbjEyNzk6XHRcdFx0XHRjb250aW51ZTtcbjEyODA6XHRcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0XHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVx1MDAzZXF1ZXVlX2lkKTtcbjEyODM6XHRcdFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcbjEyODQ6XHRcdFx0XHQvKiBUZWxsIHVzZXItc3BhY2UgdG8gcmV0cnkgdGhlIHNlbmQgKi9cbjEyODU6XHRcdFx0XHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXHUwMDNldHgsIHhza19nZXRfbnVtX2Rlc2Moc2tiKSk7XG4xMjg2Olx0XHRcdFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XG4xMjg3Olx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyODg6XHRcdFx0XHRnb3RvIG91dDtcbjEyODk6XHRcdFx0fVxuMTI5MDpcdFxuMTI5MTpcdFx0XHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXG4xMjkyOlx0XHRcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xuMTI5MzpcdFx0XHRcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXG4xMjk0Olx0XHRcdFx0ZXJyID0gLUVCVVNZO1xuMTI5NTpcdFx0XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4xMjk2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjk3Olx0XHRcdH1cbjEyOTg6XHRcbjEyOTk6XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc5MAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTYWZldHkgb2YgYW4gU0tCIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXMgYSBzaW1wbGUgb25lLWxpbmVyLCBhZGRpbmcgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYC4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICpzaG91bGQqIGJlIHNhZmUsIGJ1dCBsZXQmIzM5O3MgYmUgdGhvcm91Z2guIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBvcGVuIGFueSBkb29ycyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3IgaW5mb3JtYXRpb24gbGVha3MuCgpGaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24mIzM5O3QgYWxsb2NhdGUgYW55dGhpbmcgbmV3IG9uIGl0cyBvd24uIERvZXMgaXQgcGFzcyB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlciBzcGFjZSB2aWEgZnVuY3Rpb25zIGxpa2UgYGNvcHlfdG9fdXNlcmA/IE5vLCBpdCYjMzk7cyBub3QgZGlyZWN0bHkgZG9pbmcgYW55IG9mIHRoYXQuIERvZXMgaXQgaW50cm9kdWNlIG5ldyBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gQW5kIGZpbmFsbHksIGRvZXMgaXQgYWx0ZXIgYW55IGJvdW5kcyBjaGVja3Mgb3IgcmVsYXRlZCBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIG5ldyBmdW5jdGlvbiBzaW1wbHkgKmluaXRpYWxpemVzKiB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb2YgdGhlIGBza2JgLCBlbnN1cmluZyB0aGF0IGl0JiMzOTtzIHNldCB0byBhIHZhbGlkIHZhbHVlLCBub3QgbGVhdmluZyBpdCBhdCBhbiB1bmRlZmluZWQgc3RhdGUuIEluIGZhY3QsIGl0JiMzOTtzIGFjdHVhbGx5IGRvaW5nIHNvbWUgaGVscGZ1bCBpbml0aWFsaXphdGlvbi4KClRoaXMgYWN0dWFsbHkgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgS01TQU4uIFRoZSBjaGVja3MgdXNlZCBieSBLQVNBTiBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaCB0byBoYW5kbGUgdGhpcyBwYXRjaCBpZiBhbnl0aGluZyB3ZXJlIHRvIGdvIHdyb25nLgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZGluZyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBmb3IgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aC4gSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5ld2x5IGNyZWF0ZWQgU0tCcyBiZWZvcmUgdGhleSBhcmUgdHJhbnNtaXR0ZWQgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdCgpYC4gU28sIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBsZWFrcywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIG9yIGtlcm5lbC10by11c2VyIGluZm8gbGVha3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGhlcmUuCgpUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMTk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHNrYiBpbiB0aGUgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgcGF0aC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjA3LjU3NTc2NzUyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NTk0ODA3NDM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gYHhza19za2JfaW5pdF9taXNjKClgIHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaGVhZGVyIG9mZnNldCBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgc2tiIGluIHRoZSBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBUaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBmaWVsZHMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBwYXRocy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjA3LjU3NTc3MzA2OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NTg5NzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzkyOTM5ZTkwYTFiN2E1ZDZiNDczYTcwMWQyNmI2ODI0MmQzMzJiMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC05NDcsNiArOTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6MDguMDkyODU3MDQ5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3NzAzNDUyMjMxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX3NlbmRtc2dcIixcbiAgICBcInhza19kZXN0cnVjdF9za2JcIixcbiAgICBcInhza19iaW5kXCIsXG4gICAgXCJ4c2tfc2V0c29ja29wdFwiLFxuICAgIFwieHNrX3BvbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNldHMgdGhlIG5ldHdvcmsgaGVhZGVyIHBvaW50ZXIgb24gU0tCcyBjcmVhdGVkIGR1cmluZyBBRl9YRFAgZ2VuZXJpYyB0cmFuc21pdCBtb2RlICh4c2tfc2tiX2luaXRfbWlzYyksIGVuc3VyaW5nIHByb3BlciBpbml0aWFsaXphdGlvbiBiZWZvcmUgcGFja2V0IHRyYW5zbWlzc2lvbi4gVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgdHJhbnNtaXNzaW9uIHBhdGhzIHdoaWNoIGFyZSBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjkzOWU5MGExYjdhNWQ2YjQ3M2E3MDFkMjZiNjgyNDJkMzMyYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgKzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6MDguMDkyODU4MzY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzcwODY2OTY2MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgWFNLIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmV0L3hkcC94c2suY2AuIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGFkZGl0aW9uOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHJhY2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBgeHNrX3NrYl9pbml0X21pc2NgIGlzIGRvaW5nLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hlcmUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoaXMgbW9kdWxlLiBXaGF04oCZcyBpdHMgb3ZlcmFsbCBwdXJwb3NlIGluIHRoZSBYRFAvQUZfWERQIGxpZmVjeWNsZT8gR2l2ZW4gdGhpcyBhZGRpdGlvbiwgd2hhdCBpcyB0aGUgKnJlYXNvbiogZm9yIG5lZWRpbmcgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIGF0IHRoaXMgc3RhZ2U/IElzIHRoaXMgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgcGFja2V0IHByb2Nlc3Npbmcgb3B0aW1pemF0aW9uLCBvciBpcyB0aGVyZSBhIGJ1ZyBmaXggb3Igc2VjdXJpdHkgY29uY2VybiB0aGlzIGFkZHJlc3Nlcz9cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmU6IHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGVuYWJsZSBBRl9YRFA/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMga2VybmVsIG9wdGlvbnMgb3IgYnVpbGQgZmxhZ3MgdGhhdCBpbmZsdWVuY2UgaG93IHRoaXMgY29kZSBiZWhhdmVzPyBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGFueSBrZXJuZWwgbW9kdWxlcyBvciBmZWF0dXJlcyByZWxhdGVkIHRvIEFGX1hEUCBhcmUgbG9hZGluZywgb3Igbm90LCB3aGVuIEkgZXhwZWN0IHRoZW0gdG8gYmUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZW50cnkgcG9pbnRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluLCB3aGF0IGlzIGhhcHBlbmluZyBfYmVmb3JlXyB0aGlzIGFuZCBfYWZ0ZXJfIHRoaXM/IFRoYXQncyBlc3NlbnRpYWwgdG8gZ3Jhc3AgdGhlICp3aHkqLiBJZGVudGlmeWluZyB0aGUgY3JpdGljYWwgZW50cnlwb2ludCBmdW5jdGlvbnMgaXMgY3J1Y2lhbCBmb3IgZm9ybWluZyBhIGNvaGVyZW50IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBzbWFsbCBjaGFuZ2UgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGFuZCBwYWNrZXQgZmxvdyB3aXRoaW4gWERQLiBJJ2xsIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiB0byBzZWUgdGhlIGltbWVkaWF0ZSBlZmZlY3QsIGFuZCB0aGUgbG9uZ2VyLXRlcm0gaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY4LCJPdXRwdXRUb2tlbnMiOjk4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6NDUuMTc5NTU4OTkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG4gOTgwOlxcdFxcbiA5ODE6XFx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbiA5ODQ6XFx0XFxuIDk4NTpcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5ODY6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gOTg3OlxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbiA5ODg6XFx0fVxcbiA5ODk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjQ1LjE3OTczNDc4NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY1ODQzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTE4Ni1cXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG5uZXQveGRwL3hzay5jOjExODc6XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxubmV0L3hkcC94c2suYy0xMTg4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOToyOTo0NS40NDYzMjQzMTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc4MTkwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWFNLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9NDA0PXN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtNDA1LXtcXG5uZXQveGRwL3hzay5jOjQwNjpcXHRpZiAoUkVBRF9PTkNFKHhzLVxcdTAwM2VzdGF0ZSkgPT0gWFNLX0JPVU5EKSB7XFxubmV0L3hkcC94c2suYy00MDctXFx0XFx0LyogTWF0Y2hlcyBzbXBfd21iKCkgaW4gYmluZCgpLiAqL1xcbi0tXFxubmV0L3hkcC94c2suYz00Nzc9c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxcbi0tXFxubmV0L3hkcC94c2suYy00ODUtXFxubmV0L3hkcC94c2suYzo0ODY6XFx0aWYgKHhkcC1cXHUwMDNlcnhxLVxcdTAwM2VtZW0udHlwZSA9PSBNRU1fVFlQRV9YU0tfQlVGRl9QT09MKSB7XFxubmV0L3hkcC94c2suYy00ODctXFx0XFx0bGVuID0geGRwLVxcdTAwM2VkYXRhX2VuZCAtIHhkcC1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ5Nj1zdGF0aWMgdm9pZCB4c2tfdW5iaW5kX2RldihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbi0tXFxubmV0L3hkcC94c2suYy0xNDk5LVxcbm5ldC94ZHAveHNrLmM6MTUwMDpcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19CT1VORClcXG5uZXQveGRwL3hzay5jLTE1MDEtXFx0XFx0cmV0dXJuO1xcbm5ldC94ZHAveHNrLmM6MTUwMjpcXHRXUklURV9PTkNFKHhzLVxcdTAwM2VzdGF0ZSwgWFNLX1VOQk9VTkQpO1xcbm5ldC94ZHAveHNrLmMtMTUwMy1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTYxNj1zdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2NDEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jOjE2NDI6XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG5uZXQveGRwL3hzay5jLTE2NDMtXFx0XFx0ZXJyID0gLUVCVVNZO1xcbi0tXFxubmV0L3hkcC94c2suYy0xNzk3LVxcdFxcdHNtcF93bWIoKTtcXG5uZXQveGRwL3hzay5jOjE3OTg6XFx0XFx0V1JJVEVfT05DRSh4cy1cXHUwMDNlc3RhdGUsIFhTS19CT1VORCk7XFxubmV0L3hkcC94c2suYy0xNzk5LVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTgxND1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MzYtXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG5uZXQveGRwL3hzay5jOjE4Mzc6XFx0XFx0aWYgKHhzLVxcdTAwM2VzdGF0ZSAhPSBYU0tfUkVBRFkpIHtcXG5uZXQveGRwL3hzay5jLTE4MzgtXFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbi0tXFxubmV0L3hkcC94c2suYy0xODc0LVxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxubmV0L3hkcC94c2suYzoxODc1OlxcdFxcdGlmICh4cy1cXHUwMDNlc3RhdGUgIT0gWFNLX1JFQURZIHx8IHhzLVxcdTAwM2V1bWVtKSB7XFxubmV0L3hkcC94c2suYy0xODc2LVxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTkwMy1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrLmM6MTkwNDpcXHRcXHRpZiAoeHMtXFx1MDAzZXN0YXRlICE9IFhTS19SRUFEWSkge1xcbm5ldC94ZHAveHNrLmMtMTkwNS1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnhzLVxcdTAwM2VtdXRleCk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTIwODU9c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA5My1cXG5uZXQveGRwL3hzay5jOjIwOTQ6XFx0aWYgKHN0YXRlICE9IFhTS19SRUFEWSBcXHUwMDI2XFx1MDAyNiBzdGF0ZSAhPSBYU0tfQk9VTkQpXFxubmV0L3hkcC94c2suYy0yMDk1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMDQtXFx0XFx0aWYgKG9mZnNldCA9PSBYRFBfVU1FTV9QR09GRl9GSUxMX1JJTkcpXFxubmV0L3hkcC94c2suYzoyMTA1OlxcdFxcdFxcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXFx1MDAzZWZxX3RtcCkgOlxcbm5ldC94ZHAveHNrLmMtMjEwNi1cXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHhzLVxcdTAwM2Vwb29sLVxcdTAwM2VmcSk7XFxubmV0L3hkcC94c2suYy0yMTA3LVxcdFxcdGVsc2UgaWYgKG9mZnNldCA9PSBYRFBfVU1FTV9QR09GRl9DT01QTEVUSU9OX1JJTkcpXFxubmV0L3hkcC94c2suYzoyMTA4OlxcdFxcdFxcdHEgPSBzdGF0ZSA9PSBYU0tfUkVBRFkgPyBSRUFEX09OQ0UoeHMtXFx1MDAzZWNxX3RtcCkgOlxcbm5ldC94ZHAveHNrLmMtMjEwOS1cXHRcXHRcXHRcXHRcXHRcXHQgUkVBRF9PTkNFKHhzLVxcdTAwM2Vwb29sLVxcdTAwM2VjcSk7XFxuLS1cXG5uZXQveGRwL3hzay5jPTIxOTI9c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMjIyLVxcdHhzID0geGRwX3NrKHNrKTtcXG5uZXQveGRwL3hzay5jOjIyMjM6XFx0eHMtXFx1MDAzZXN0YXRlID0gWFNLX1JFQURZO1xcbm5ldC94ZHAveHNrLmMtMjIyNC1cXHR4cy1cXHUwMDNlbWF4X3R4X2J1ZGdldCA9IFRYX0JBVENIX1NJWkU7XFxuLS1cXG5uZXQveGRwL3hzay5oLTMtXFxubmV0L3hkcC94c2suaDo0OiNpZm5kZWYgWFNLX0hfXFxubmV0L3hkcC94c2suaDo1OiNkZWZpbmUgWFNLX0hfXFxubmV0L3hkcC94c2suaC02LVxcbi0tXFxubmV0L3hkcC94c2suaD0zOD1pbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmgtNDAtXFxubmV0L3hkcC94c2suaDo0MTojZW5kaWYgLyogWFNLX0hfICovXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz0xNDU9c3RhdGljIHZvaWQgeHBfZGlzYWJsZV9kcnZfemMoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0xNTItXFx0aWYgKHBvb2wtXFx1MDAzZXVtZW0tXFx1MDAzZXpjKSB7XFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MTUzOlxcdFxcdGJwZi5jb21tYW5kID0gWERQX1NFVFVQX1hTS19QT09MO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTE1NC1cXHRcXHRicGYueHNrLnBvb2wgPSBOVUxMO1xcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9MTY0PWludCB4cF9hc3NpZ25fZGV2KHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtMjExLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjIxMjpcXHRpZiAoKG5ldGRldi1cXHUwMDNleGRwX2ZlYXR1cmVzIFxcdTAwMjYgTkVUREVWX1hEUF9BQ1RfWFNLKSAhPSBORVRERVZfWERQX0FDVF9YU0spIHtcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yMTMtXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0yNDItXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6MjQzOlxcdGJwZi5jb21tYW5kID0gWERQX1NFVFVQX1hTS19QT09MO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTI0NC1cXHRicGYueHNrLnBvb2wgPSBwb29sO1xcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM9Mzg5PXN0YXRpYyB2b2lkIF9feHBfZG1hX3VubWFwKHN0cnVjdCB4c2tfZG1hX21hcCAqZG1hX21hcCwgdW5zaWduZWQgbG9uZyBhdHRycylcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTM5Ni1cXHRcXHRpZiAoKmRtYSkge1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jOjM5NzpcXHRcXHRcXHQqZG1hIFxcdTAwMjY9IH5YU0tfTkVYVF9QR19DT05USUdfTUFTSztcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYy0zOTgtXFx0XFx0XFx0ZG1hX3VubWFwX3BhZ2VfYXR0cnMoZG1hX21hcC1cXHUwMDNlZGV2LCAqZG1hLCBQQUdFX1NJWkUsXFxuLS1cXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYz00MzA9c3RhdGljIHZvaWQgeHBfY2hlY2tfZG1hX2NvbnRpZ3VpdHkoc3RydWN0IHhza19kbWFfbWFwICpkbWFfbWFwKVxcbi0tXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM1LVxcdFxcdGlmIChkbWFfbWFwLVxcdTAwM2VkbWFfcGFnZXNbaV0gKyBQQUdFX1NJWkUgPT0gZG1hX21hcC1cXHUwMDNlZG1hX3BhZ2VzW2kgKyAxXSlcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo0MzY6XFx0XFx0XFx0ZG1hX21hcC1cXHUwMDNlZG1hX3BhZ2VzW2ldIHw9IFhTS19ORVhUX1BHX0NPTlRJR19NQVNLO1xcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTQzNy1cXHRcXHRlbHNlXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmM6NDM4OlxcdFxcdFxcdGRtYV9tYXAtXFx1MDAzZWRtYV9wYWdlc1tpXSBcXHUwMDI2PSB+WFNLX05FWFRfUEdfQ09OVElHX01BU0s7XFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNDM5LVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jPTc0OT1zdGF0aWMgZG1hX2FkZHJfdCBfX3hwX3Jhd19nZXRfZG1hKGNvbnN0IHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrX2J1ZmZfcG9vbC5jLTc1MS1cXHRyZXR1cm4gKHBvb2wtXFx1MDAzZWRtYV9wYWdlc1thZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlRdIFxcdTAwMjZcXG5uZXQveGRwL3hza19idWZmX3Bvb2wuYzo3NTI6XFx0XFx0flhTS19ORVhUX1BHX0NPTlRJR19NQVNLKSArXFxubmV0L3hkcC94c2tfYnVmZl9wb29sLmMtNzUzLVxcdFxcdChhZGRyIFxcdTAwMjYgflBBR0VfTUFTSyk7XFxuLS1cXG5uZXQveGRwL3hza19kaWFnLmM9OTI9c3RhdGljIGludCB4c2tfZGlhZ19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm5sc2tiLFxcbi0tXFxubmV0L3hkcC94c2tfZGlhZy5jLTExMy1cXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbm5ldC94ZHAveHNrX2RpYWcuYzoxMTQ6XFx0aWYgKFJFQURfT05DRSh4cy1cXHUwMDNlc3RhdGUpID09IFhTS19VTkJPVU5EKVxcbm5ldC94ZHAveHNrX2RpYWcuYy0xMTUtXFx0XFx0Z290byBvdXRfbmxtc2dfdHJpbTtcXG4tLVxcbm5ldC94ZHAveHNrX3F1ZXVlLmgtNS1cXG5uZXQveGRwL3hza19xdWV1ZS5oOjY6I2lmbmRlZiBfTElOVVhfWFNLX1FVRVVFX0hcXG5uZXQveGRwL3hza19xdWV1ZS5oOjc6I2RlZmluZSBfTElOVVhfWFNLX1FVRVVFX0hcXG5uZXQveGRwL3hza19xdWV1ZS5oLTgtXFxuLS1cXG5uZXQveGRwL3hza19xdWV1ZS5oPTUzNT12b2lkIHhza3FfZGVzdHJveShzdHJ1Y3QgeHNrX3F1ZXVlICpxX29wcyk7XFxubmV0L3hkcC94c2tfcXVldWUuaC01MzYtXFxubmV0L3hkcC94c2tfcXVldWUuaDo1Mzc6I2VuZGlmIC8qIF9MSU5VWF9YU0tfUVVFVUVfSCAqL1xcbi0tXFxubmV0L3hkcC94c2ttYXAuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3hkcC94c2ttYXAuYzoyOi8qIFhTS01BUCB1c2VkIGZvciBBRl9YRFAgc29ja2V0c1xcbm5ldC94ZHAveHNrbWFwLmMtMy0gKiBDb3B5cmlnaHQoYykgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mjk6NDUuNTA0MTQ4MjQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQxMTE2NTM5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBYRFAgQnVpbGQgUHJvY2VzcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGZvciBYRFAsIHNwZWNpZmljYWxseSB3aGVyZSBgeHNrX2J1aWxkX3NrYmAgaXMgdXNlZCBhbmQgaG93IGB4c2suY2AgaXMgdWx0aW1hdGVseSBjb21waWxlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCB0cmFjZSB0aGUgY2FsbHMgdG8gYHhza19idWlsZF9za2JgLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQuXG5cbkZyb20gdGhlcmUsIEknbGwgbmVlZCB0byBsb29rIGF0IHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBJJ2xsIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2VzIOKAkyB0aGUgYG5ldC94ZHAvTWFrZWZpbGVgIGFuZCBgbmV0L3hkcC9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRoZSBYRFAgY29tcG9uZW50cyBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3B0aW9ucy4gSSdtIGhvcGluZyB0aG9zZSB0d28gZmlsZXMgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgbmVjZXNzYXJ5IGJ1aWxkIHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzY5LCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjYxNTgwNDEyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbiAgIDM6XFx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjYxNTg1NjUwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTc1Mjk3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWERQX1NPQ0tFVFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3hkcC9LY29uZmlnOjI6Y29uZmlnIFhEUF9TT0NLRVRTXFxubmV0L3hkcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiWERQIHNvY2tldHNcXFwiXFxuLS1cXG5uZXQveGRwL0tjb25maWctOS1cXG5uZXQveGRwL0tjb25maWc6MTA6Y29uZmlnIFhEUF9TT0NLRVRTX0RJQUdcXG5uZXQveGRwL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG5uZXQveGRwL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0xMy1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC94ZHAvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQveGRwL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXFxubmV0L3hkcC9NYWtlZmlsZTozOm9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrX2J1ZmZfcG9vbC5vXFxubmV0L3hkcC9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjI5OjU5LjkzMzM5MTYxNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjI5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRFBfU09DS0VUU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC94ZHAvS2NvbmZpZzoyOmNvbmZpZyBYRFBfU09DS0VUU1xcbm5ldC94ZHAvS2NvbmZpZy0zLVxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbi0tXFxubmV0L3hkcC9LY29uZmlnLTktXFxubmV0L3hkcC9LY29uZmlnOjEwOmNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxubmV0L3hkcC9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMwOjAwLjA0NDAyODI3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDM4MzY2MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIFhEUCBTb2NrZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIFhEUCBzb2NrZXRzLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBuZXQveGRwL0tjb25maWdgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBpbXBsaWNhdGlvbnMgc3Vycm91bmRpbmcgYENPTkZJR19YRFBfU09DS0VUU2AuIEknbSBnb2luZyB0byBsb29rIGF0IGhvdyB0aGlzIGlzIGRlZmluZWQsIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzIG9uIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHdoZXJlIGl0J3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgWERQIGZyYW1ld29yay4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlZmF1bHRzIG9yIHBvdGVudGlhbGx5IGhpZGRlbiBpbnRlcmFjdGlvbnMgcmVsYXRlZCB0byBgQ09ORklHX1hEUF9TT0NLRVRTYC4gSSdtIHRoaW5raW5nIGFib3V0IGFzcGVjdHMgc3VjaCBhcyB0aGUgc29ja2V0LWJhc2VkIFhEUCBpbmZyYXN0cnVjdHVyZSdzIGF2YWlsYWJpbGl0eS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgbmV3IHJ1bnRpbWUgZGVwZW5kZW5jaWVzIG9yIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2YuIEknbGwgZm9jdXMgb24gdGhlIGZpbmUtZ3JhaW5lZCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMxOjAwLjQyNzY5MzkyNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgWERQX1NPQ0tFVFNcXG4gICAzOlxcdFxcdGJvb2wgXFxcIlhEUCBzb2NrZXRzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbiAgIDU6XFx0XFx0ZGVmYXVsdCBuXFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFhEUCBzb2NrZXRzIGFsbG93cyBhIGNoYW5uZWwgYmV0d2VlbiBYRFAgcHJvZ3JhbXMgYW5kXFxuICAgODpcXHRcXHQgIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMuXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiWERQIHNvY2tldHM6IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBYRFBfU09DS0VUU1xcbiAgMTM6XFx0XFx0ZGVmYXVsdCBuXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1hEUCBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuXFxuICAxNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjMxOjAwLjQyNzgxMDE4NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDEzMjQyMDk5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlhEUCBTb2NrZXRzOiBEZXBlbmRlbmNpZXMgYW5kIHRoZSBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgWERQIHNvY2tldHMsIGFuZCBzcGVjaWZpY2FsbHkgaG93IHRoaW5ncyBhcmUgcHV0IHRvZ2V0aGVyLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgQ09ORklHX1hEUF9TT0NLRVRTYCB3b24ndCBiZSBlbmFibGVkIHVubGVzcyB3ZSBhbHNvIGhhdmUgYEJQRl9TWVNDQUxMYCAodGhhdCdzIGNydWNpYWwgZm9yIHRoZSBCUEYgcGFydCwgbmF0dXJhbGx5KSBhbmQsIG9mIGNvdXJzZSwgdGhlIGdlbmVyYWwgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBlbmFibGVkIHdoaWNoIGlzIGBORVRgLiBUaG9zZSBhcmUgdGhlIGZvdW5kYXRpb25hbCBwaWVjZXMuXG5cbk5vdywgd2hlcmUgd2FzIEk/IFJpZ2h0LCBJIG5lZWQgdG8gdHJhY2UgdGhlIGRhdGEgcGF0aCB3aGVuIHdlJ3JlIGluIHRoZSBnZW5lcmljIGNvcHkgbW9kZSBhbmQgYWxzbyBsb29rIGF0IGhvdyB0aGUgWERQIHNvY2tldCBzZW5kL3R4IHdvcmtzLiBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBgeHNrX2J1aWxkX3NrYmAgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBTS0IgaXMgYnVpbHQuIEknbGwgbmVlZCB0byByZW1lbWJlciBhbGwgb2YgdGhlIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlbiB0cnkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFhEUCBzb2NrZXQgc2VuZCBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBsb2dpYyB0aHJvdWdoIGFsbCB0aGUgbGF5ZXJzIGFuZCBzZWUgd2hlcmUgdGhlIGRhdGEgaXMgYWN0dWFsbHkgY29waWVkLCBob3cgaXQncyBoYW5kbGVkIGF0IHRoZSBkcml2ZXIgYW5kIHRoZSBzdGFjay4gSXQncyBhbGwgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGF0IGRhdGEgbW92ZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwOTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM1OjAxLjc1MjAyNDU1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MzI1NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19idWlsZF9za2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05OTA9c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAzNC1cXG5uZXQveGRwL3hzay5jOjEwMzU6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMDM2LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTExMC1cXG5uZXQveGRwL3hzay5jOjExMTE6c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xMTEyLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTE4LVxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbm5ldC94ZHAveHNrLmM6MTExOTpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiX3plcm9jb3B5KHhzLCBkZXNjKTtcXG5uZXQveGRwL3hzay5jLTExMjAtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuLS1cXG5uZXQveGRwL3hzay5jPTEyMTc9c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMjYzLVxcbm5ldC94ZHAveHNrLmM6MTI2NDpcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxubmV0L3hkcC94c2suYy0xMjY1LVxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozNTowMi4zMDEzNTQ5MDdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjU3ODk2NDY1ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB3cml0dGVuIGFzIGlmIEknbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRFAgVHJhbnNtaXNzaW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNvbGlkaWZ5IG15IGdyYXNwIG9uIHRoZSBYRFAgdHJhbnNtaXNzaW9uIHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBfX3hza19nZW5lcmljX3htaXRgLCBgeHNrX3NlbmRtc2dgLCBhbmQgYHhza19wb2xsYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IHdoYXQgZWFjaCBvZiB0aGVzZSBmdW5jdGlvbnMgZG9lcywgc28gSSBjYW4gbWVudGFsbHkgbWFwIG91dCB0aGUgZmxvdyBvZiBkYXRhIGFuZCBjb250cm9sIHdpdGhpbiB0aGUgWERQIGZyYW1ld29yay4gSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBwYWNrZXQgaXMgaGFuZGxlZCwgYW5kIGhvdyB0aGUgdHJhbnNtaXNzaW9uIGlzIGluaXRpYXRlZC4gSXQncyBjcnVjaWFsIGZvciBteSBjdXJyZW50IHRhc2sgdG8gaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg3NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjA4LjA5MTAwNDA1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcdFxcdC8qIExldCBhcHBsaWNhdGlvbiByZXRyeSAqL1xcbjEyMTE6XFx0XFx0XFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXFx1MDAzZXBvb2wsIDEpO1xcbjEyMTI6XFx0XFx0fVxcbjEyMTM6XFx0XFxuMTIxNDpcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbjEyMTU6XFx0fVxcbjEyMTY6XFx0XFxuMTIxNzpcXHRzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuMTIxODpcXHR7XFxuMTIxOTpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrKTtcXG4xMjIwOlxcdFxcdHN0cnVjdCB4ZHBfZGVzYyBkZXNjO1xcbjEyMjE6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4xMjIyOlxcdFxcdHUzMiBjYWNoZWRfY29ucztcXG4xMjIzOlxcdFxcdHUzMiBtYXhfYmF0Y2g7XFxuMTIyNDpcXHRcXHRpbnQgZXJyID0gMDtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2eHMtXFx1MDAzZW11dGV4KTtcXG4xMjI3OlxcdFxcdGNhY2hlZF9jb25zID0geHMtXFx1MDAzZXR4LVxcdTAwM2VjYWNoZWRfY29ucztcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0LyogU2luY2Ugd2UgZHJvcHBlZCB0aGUgUkNVIHJlYWQgbG9jaywgdGhlIHNvY2tldCBzdGF0ZSBtaWdodCBoYXZlIGNoYW5nZWQuICovXFxuMTIzMDpcXHRcXHRpZiAodW5saWtlbHkoIXhza19pc19ib3VuZCh4cykpKSB7XFxuMTIzMTpcXHRcXHRcXHRlcnIgPSAtRU5YSU87XFxuMTIzMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjMzOlxcdFxcdH1cXG4xMjM0OlxcdFxcbjEyMzU6XFx0XFx0aWYgKHhzLVxcdTAwM2VxdWV1ZV9pZCBcXHUwMDNlPSB4cy1cXHUwMDNlZGV2LVxcdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXFxuMTIzNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjM3OlxcdFxcbjEyMzg6XFx0XFx0bWF4X2JhdGNoID0gUkVBRF9PTkNFKHhzLVxcdTAwM2VtYXhfdHhfYnVkZ2V0KTtcXG4xMjM5OlxcdFxcdHdoaWxlICh4c2txX2NvbnNfcGVla19kZXNjKHhzLVxcdTAwM2V0eCwgXFx1MDAyNmRlc2MsIHhzLVxcdTAwM2Vwb29sKSkge1xcbjEyNDA6XFx0XFx0XFx0aWYgKG1heF9iYXRjaC0tID09IDApIHtcXG4xMjQxOlxcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTI0MjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjQzOlxcdFxcdFxcdH1cXG4xMjQ0OlxcdFxcbjEyNDU6XFx0XFx0XFx0LyogVGhpcyBpcyB0aGUgYmFja3ByZXNzdXJlIG1lY2hhbmlzbSBmb3IgdGhlIFR4IHBhdGguXFxuMTI0NjpcXHRcXHRcXHQgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlIGFuZCBvbmx5IHByb2NlZWRcXG4xMjQ3OlxcdFxcdFxcdCAqIGlmIHRoZXJlIGlzIHNwYWNlIGluIGl0LiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gaW1wbGVtZW50XFxuMTI0ODpcXHRcXHRcXHQgKiBhbnkgYnVmZmVyaW5nIGluIHRoZSBUeCBwYXRoLlxcbjEyNDk6XFx0XFx0XFx0ICovXFxuMTI1MDpcXHRcXHRcXHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXFx1MDAzZXBvb2wpO1xcbjEyNTE6XFx0XFx0XFx0aWYgKGVycikge1xcbjEyNTI6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjUzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNTQ6XFx0XFx0XFx0fVxcbjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRcXHRpZiAodW5saWtlbHkoeHMtXFx1MDAzZWRyYWluX2NvbnQpKSB7XFxuMTI1NzpcXHRcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbjEyNTg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuMTI1OTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNjA6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4xMjYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNjI6XFx0XFx0XFx0fVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuMTI2NTpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMjY2OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4xMjY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNjk6XFx0XFx0XFx0XFx0aWYgKHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpKVxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbjEyNzE6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNzM6XFx0XFx0XFx0fVxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpIHtcXG4xMjc4OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBza2I7XFxuMTI3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjgwOlxcdFxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0ZXJyID0gX19kZXZfZGlyZWN0X3htaXQoc2tiLCB4cy1cXHUwMDNlcXVldWVfaWQpO1xcbjEyODM6XFx0XFx0XFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcXG4xMjg0OlxcdFxcdFxcdFxcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xcbjEyODU6XFx0XFx0XFx0XFx0eHNrcV9jb25zX2NhbmNlbF9uKHhzLVxcdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcXG4xMjg2OlxcdFxcdFxcdFxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbjEyODc6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXFxuMTI5MjpcXHRcXHRcXHRpZiAoZXJyID09IE5FVF9YTUlUX0RST1ApIHtcXG4xMjkzOlxcdFxcdFxcdFxcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXFxuMTI5NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTI5NTpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4xMjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyOTc6XFx0XFx0XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6MzY6MDguMDkxMTIzMzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NzM1OTUzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWFNLIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aGF0IGBfX3hza19nZW5lcmljX3htaXRgIGlzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIFNLQiB1c2luZyBgeHNrX2J1aWxkX3NrYmAgYW5kIHRoZW4gaW52b2tpbmcgYF9fZGV2X2RpcmVjdF94bWl0YCB3aXRoIHRoZSBTS0IgYW5kIHRoZSBxdWV1ZSBJRC4gVGhlIGFkZGl0aW9uIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzY2AgaXMgdGhlIGtleSBwb2ludCBoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHkgdGhlIHJlc2V0P1wiXG5cbkl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGluIHNjZW5hcmlvcyB3aGVyZSB0aGUgU0tCIGlzIGJlaW5nIHRyYW5zbWl0dGVkIGRpcmVjdGx5IHZpYSBgX19kZXZfZGlyZWN0X3htaXRgLCBvciB0aHJvdWdoIHRoZSBtb3JlIGNvbXBsZXggbmV0d29ya2luZyBzdGFjayBjb21wb25lbnRzIGxpa2UgVEMsIG5ldGZpbHRlciwgcWRpc2MsIG9yIGV2ZW4gYXQgdGhlIGRyaXZlciBsZXZlbCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgaXMgYmVpbmcgcmVhZCBvciBhY2Nlc3NlZC4gSWYgdGhpcyBoZWFkZXIgaXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IsIGFzIGlzIHRoZSBjYXNlIGhlcmUsIGV4cGxpY2l0bHkgcmVzZXQsIHdlJ3JlIGxpa2VseSBpbnRyb2R1Y2luZyBwb3RlbnRpYWwgZm9yIGludmFsaWQgbWVtb3J5IGFjY2VzcyBhbmQgdW5kZWZpbmVkIGJlaGF2aW9yLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmUsIGFuZCB1bmluaXRpYWxpemVkIGRhdGEgaXMgYWx3YXlzIGEgY29uY2Vybi4gVGhlIHJlc2V0IG9wZXJhdGlvbiBpcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlLlxuXG5UaGlzIG1ha2VzIHNlbnNlLiBJZiB3ZSdyZSByZWx5aW5nIG9uIGEgY2xlYW4gc2xhdGUgZm9yIHRoZSBuZXR3b3JrIGhlYWRlciwgdGhpcyBoZWxwcyBtYWludGFpbiB0aGUgcHJvcGVyIHN0YXRlIGFuZCBwcmV2ZW50cyB0aG9zZSBidWdzLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHdobyBpcyBjYWxsaW5nIGBfX3hza19nZW5lcmljX3htaXRgIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjQ3LjgyNzA3OTcyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEyODM5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194c2tfZ2VuZXJpY194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTEzMzI9c3RhdGljIGludCB4c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMzNy1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQveGRwL3hzay5jOjEzMzg6XFx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTEzMzktXFx0LyogUmVhcXVpcmUgUkNVIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gY29tbW9uIGNvZGUuICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjM2OjQ4LjM4ODM2OTIxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY3MzU1NDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHhza19nZW5lcmljX3htaXRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgcmVsYXRlZCB0byBgeHNrX2dlbmVyaWNfeG1pdGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgaW52b2NhdGlvbnMuIEtub3dpbmcgd2hlcmUgaXQncyBjYWxsZWQgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dCwgYW5kIHBhcnRpY3VsYXJseSB3aXRoaW4gdGhlIFhEUC9BRl9YRFAgZnJhbWV3b3JrLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgdG8gZ2V0IGEgZ3Jhc3Agb24gdGhlIGRpZmZlcmVudCBwYXRocyBvZiBleGVjdXRpb24gdGhhdCBlbmQgdXAgdXNpbmcgaXQuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgbWlnaHQgYmUgaW4gdmFyaW91cyBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNyb3NzLXJlZmVyZW5jZSBzZWFyY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzc6NDUuMDYxOTI4ODA2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODM5MjE2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4c2tfZ2VuZXJpY194bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMzEtXFxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTMzNy1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQveGRwL3hzay5jOjEzMzg6XFx0cmV0ID0gX194c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTEzMzktXFx0LyogUmVhcXVpcmUgUkNVIGxvY2sgYmVmb3JlIGdvaW5nIGludG8gY29tbW9uIGNvZGUuICovXFxuLS1cXG5uZXQveGRwL3hzay5jPTEzNjY9c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTEtXFx0XFx0XFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xcbm5ldC94ZHAveHNrLmM6MTM5MjpcXHRcXHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XFxubmV0L3hkcC94c2suYy0xMzkzLVxcdH1cXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ0NT1zdGF0aWMgX19wb2xsX3QgeHNrX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NjUtXFx0XFx0XFx0LyogUG9sbCBuZWVkcyB0byBkcml2ZSBUeCBhbHNvIGluIGNvcHkgbW9kZSAqL1xcbm5ldC94ZHAveHNrLmM6MTQ2NjpcXHRcXHRcXHR4c2tfZ2VuZXJpY194bWl0KHNrKTtcXG5uZXQveGRwL3hzay5jLTE0NjctXFx0fVxcbi0tXFxubmV0L3hkcC94c2suYz0yMjY2PXN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyODUtXFxubmV0L3hkcC94c2suYzoyMjg2OlxcdHhza190eF9nZW5lcmljX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcInhza19nZW5lcmljX3htaXRfY2FjaGVcXFwiLFxcbm5ldC94ZHAveHNrLmMtMjI4Ny1cXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB4c2tfYWRkcnMpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozNzo0NS4xMzAzMjYyNzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxMDU2NjI0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIFhTSyBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYF9feHNrX3NlbmRtc2dgIGFuZCBgeHNrX3BvbGxgLiBUaG9zZSBhcmUgdGhlIGJyZWFkLWFuZC1idXR0ZXIgb3BlcmF0aW9ucyBmb3IgQUZfWERQIHNvY2tldHMg4oCTIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgd2UnZCBleHBlY3QuIE1ha2VzIHNlbnNlLiBUaGV5J3JlIHRoZSBjb3JlIG9mIGhvdyB5b3UgcHVzaCBhbmQgcHVsbCBkYXRhIHVzaW5nIFhEUC4gQmVmb3JlIGRpdmluZyBmdXJ0aGVyIGludG8gYSBzcGVjaWZpYyBpc3N1ZSwgb3IgbWF5YmUganVzdCB0byByZWZyZXNoIG15IG1lbW9yeSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBvcHNgIHN0cnVjdCBmb3IgdGhlIFhTSyBzb2NrZXQuIFNlZWluZyB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYXZhaWxhYmxlLCBvciBwZXJoYXBzIHRoZSB3YXkgdGhleSdyZSBpbXBsZW1lbnRlZCwgbWlnaHQgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdCdzIHRoZSBzdGFuZGFyZCBwbGFjZSB0byBzdGFydCB3aGVuIGRpZ2dpbmcgaW50byBzb2NrZXQgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzg6MDkuMjM1OTkyNTYxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbjIxNjI6XFx0XFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbjIxNjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yMTY0OlxcdFxcdC5yZWxlYXNlXFx0PSB4c2tfcmVsZWFzZSxcXG4yMTY1OlxcdFxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG4yMTY2OlxcdFxcdC5jb25uZWN0XFx0PSBzb2NrX25vX2Nvbm5lY3QsXFxuMjE2NzpcXHRcXHQuc29ja2V0cGFpclxcdD0gc29ja19ub19zb2NrZXRwYWlyLFxcbjIxNjg6XFx0XFx0LmFjY2VwdFxcdFxcdD0gc29ja19ub19hY2NlcHQsXFxuMjE2OTpcXHRcXHQuZ2V0bmFtZVxcdD0gc29ja19ub19nZXRuYW1lLFxcbjIxNzA6XFx0XFx0LnBvbGxcXHRcXHQ9IHhza19wb2xsLFxcbjIxNzE6XFx0XFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbjIxNzI6XFx0XFx0Lmxpc3RlblxcdFxcdD0gc29ja19ub19saXN0ZW4sXFxuMjE3MzpcXHRcXHQuc2h1dGRvd25cXHQ9IHNvY2tfbm9fc2h1dGRvd24sXFxuMjE3NDpcXHRcXHQuc2V0c29ja29wdFxcdD0geHNrX3NldHNvY2tvcHQsXFxuMjE3NTpcXHRcXHQuZ2V0c29ja29wdF9pdGVyID0geHNrX2dldHNvY2tvcHQsXFxuMjE3NjpcXHRcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxuMjE3NzpcXHRcXHQucmVjdm1zZ1xcdD0geHNrX3JlY3Ztc2csXFxuMjE3ODpcXHRcXHQubW1hcFxcdFxcdD0geHNrX21tYXAsXFxuMjE3OTpcXHR9O1xcbjIxODA6XFx0XFxuMjE4MTpcXHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbjIxODI6XFx0e1xcbjIxODM6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxODY6XFx0XFx0XFx0cmV0dXJuO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAoIXhwX3B1dF9wb29sKHhzLVxcdTAwM2Vwb29sKSlcXG4yMTg5OlxcdFxcdFxcdHhkcF9wdXRfdW1lbSh4cy1cXHUwMDNldW1lbSwgIXhzLVxcdTAwM2Vwb29sKTtcXG4yMTkwOlxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIxOTM6XFx0XFx0XFx0ICAgICAgaW50IGtlcm4pXFxuMjE5NDpcXHR7XFxuMjE5NTpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzO1xcbjIxOTY6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHRpZiAoIW5zX2NhcGFibGUobmV0LVxcdTAwM2V1c2VyX25zLCBDQVBfTkVUX1JBVykpXFxuMjE5OTpcXHRcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbjIyMDA6XFx0XFx0aWYgKHNvY2stXFx1MDAzZXR5cGUgIT0gU09DS19SQVcpXFxuMjIwMTpcXHRcXHRcXHRyZXR1cm4gLUVTT0NLVE5PU1VQUE9SVDtcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0aWYgKHByb3RvY29sKVxcbjIyMDQ6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjIwNTpcXHRcXG4yMjA2OlxcdFxcdHNvY2stXFx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XFxuMjIwNzpcXHRcXG4yMjA4OlxcdFxcdHNrID0gc2tfYWxsb2MobmV0LCBQRl9YRFAsIEdGUF9LRVJORUwsIFxcdTAwMjZ4c2tfcHJvdG8sIGtlcm4pO1xcbjIyMDk6XFx0XFx0aWYgKCFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6Mzg6MDkuMjM2MjkxNzExWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg3OTE5MjY5MTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQUZfWERQIFBhY2tldCBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgZW5naW5lOiBBRl9YRFAgc29ja2V0cyBhbmQsIHNwZWNpZmljYWxseSwgaG93IHBhY2tldHMgZ2V0IHRyYW5zbWl0dGVkIHZpYSB0aGUgY29weSBtb2RlIHdpdGhpbiBBRl9YRFAuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIkNhbiBJIGV2ZW4gKnJlYWNoKiB0aGlzIGluIG15IHR5cGljYWwgZW52aXJvbm1lbnRzP1wiIEFuZCB0aGUgYW5zd2VyIGhlcmUgaXMgYSBzb2xpZCBcIlllcy5cIiBBRl9YRFAgaXMgcGVyZmVjdGx5IGhhcHB5IHJ1bm5pbmcgb24gbG9vcGJhY2ssIHZldGgsIG9yIGFueSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGluIGNvcHkgbW9kZSwgd2hpY2ggY292ZXJzIGdlbmVyaWMgWERQIGFuZCBnZW5lcmljIFhTSyBtb2RlcyDigJMgdGhvc2UgYXJlIGNvbW1vbiBzZXR1cHMsIGFuZCBJIGtub3cgSSBjYW4gZWFzaWx5IGdldCB0aGlzIHJ1bm5pbmcuXG5cbk5vdyB0aGUgcmVhbCBxdWVzdGlvbjogaXMgdGhpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgY29kZSBpcyByZXNwb25zaWJsZSBmb3IgYnVpbGRpbmcgdGhlIGBza19idWZmYCBhbmQgYWN0dWFsbHkgKnNlbmRpbmcqIHRoZSBwYWNrZXQsIHRoaW5ncyBsaWtlIGB4c2tfYnVpbGRfc2tiYCwgYF9feHNrX2dlbmVyaWNfeG1pdGAsIGFuZCBgeHNrX3NlbmRtc2dgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGZpcmluZyBsaW5lLiBUaGF0IHdob2xlIHBhY2tldCB0cmFuc21pc3Npb24gcGF0aCBpcyBhIHBvdGVudGlhbCBnb2xkIG1pbmUgZm9yIGZpbmRpbmcgYnVncy4gSSBrbm93IHRoYXQga2luZCBvZiBsb3cgbGV2ZWwgcGFja2V0IGNvbnN0cnVjdGlvbiBpcyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreSBhbmQgdnVsbmVyYWJpbGl0aWVzIGNhbiBoaWRlLlxuXG5Ob3csIGJlZm9yZSBJIHN0YXJ0IHRocm93aW5nIGZ1enplcnMgYXQgaXQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIGNyaXRpY2FsIGJpdCBpcyB0aGF0IGBYRFBfU09DS0VUU2AgZGVwZW5kcyBvbiBgQlBGX1NZU0NBTExgLiBUaGF0J3MgaW1wb3J0YW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIGJvdGggYXJlIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCB0byBlbnN1cmUgdGhlIHJlbGV2YW50IGNvZGUgaXMgY29tcGlsZWQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGVpdGhlciBvZiB0aG9zZSBvcHRpb25zIGhhdmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gR290dGEgbWFrZSBzdXJlIHRoZSBmdXp6aW5nIGhhcm5lc3MgaXMgc2V0IHVwIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozOTozNy4xNTU1NjM5NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzk4MzQ1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTozOTozNy41ODM1NzEwNzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1OTEyNjg5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBEb3duIEJQRl9TWVNDQUxMIGluIHRoZSBLY29uZmlnIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgQlBGX1NZU0NBTExgIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIFRoaXMgaXNuJ3QgdXN1YWxseSBhIHRyaXZpYWwgdGFzazsgdGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIHNwcmVhZCBhY3Jvc3MgdmFyaW91cyBLY29uZmlnIGZpbGVzLCBvZnRlbiBuZXN0ZWQgZGVlcCB3aXRoaW4gZmVhdHVyZSBkaXJlY3RvcmllcyBhbmQgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZmluZGAgb3IgYGdyZXBgIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCBsaWtlbHkgdXNpbmcgYSBwYXR0ZXJuIHRoYXQncyBhcyBnZW5lcmFsIGFzIHBvc3NpYmxlIHRvIHN0YXJ0LCBwZXJoYXBzIGBncmVwICdCUEZfU1lTQ0FMTCcgS2NvbmZpZyogLXJgLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGZpcnN0IHBhc3MuIFRoZW4sIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCBlYWNoIG1hdGNoLCBsb29raW5nIGZvciB0aGUgYGNvbmZpZ2Aga2V5d29yZCBhbmQgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIChlLmcuLCBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuKS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgbWVudSBzdHJ1Y3R1cmUsIGFueSBkZWZhdWx0IHZhbHVlcyBhc3NpZ25lZCwgYW5kIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgYXNzb2NpYXRlZCBDIGNvZGUgbWlnaHQgYmUuIEknbGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBwbGF0Zm9ybS1zcGVjaWZpYyBkZWZpbml0aW9ucyBvciBjb25kaXRpb25hbCBpbmNsdWRlcyBiYXNlZCBvbiBhcmNoaXRlY3R1cmUgb3Iga2VybmVsIHZlcnNpb24uIFRoaXMgbWlnaHQgbWVhbiBuZWVkaW5nIHRvIHRyYXZlcnNlIGRlcGVuZGVuY2llcyB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGV4cG9zZSBvciBlbmFibGUgYEJQRl9TWVNDQUxMYCAuIElmIHRoYXQgZ2V0cyB0b28gY29tcGxleCwgSSdsbCBmYWxsIGJhY2sgdG8ga2VybmVsIGJ1aWxkIHN5c3RlbSBvcHRpb25zLCBsaWtlIGxvb2tpbmcgZm9yIEtjb25maWcgaW5jbHVkZXMgb3Igb3RoZXIgaGludHMgZnJvbSBidWlsZCBzY3JpcHRzLiBUaGlzIGlzIGFsbCBhYm91dCBuYXZpZ2F0aW5nIHRoZSBjb25maWd1cmF0aW9uIG1hemUgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB3aGV0aGVyIGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgYW5kIGhvdyB0aGUgdW5kZXJseWluZyBCUEYgc3Vic3lzdGVtIGlzIGNvbmZpZ3VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDA6MTEuMTc0ODQyNjg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjM0NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQwOjEyLjgyMTA4MzA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODMwMjc0NTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIG15IGluaXRpYWwgaHVuY2ggdGVsbHMgbWUgd2UgbmVlZCB0byBleGFtaW5lIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDI3LiBJdCdzIGxpa2VseSB0aGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBlQlBGIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVzaWRlcyBhcm91bmQgdGhhdCBhcmVhLiBUaGlzIHdvdWxkIGJlIHRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGlmIHRoZXJlIGFyZSBjb25maWd1cmF0aW9uIGlzc3Vlcy4gV2Ugd2lsbCBzZWUgaWYgdGhlIGxpbmUgYW5kIGFyb3VuZCB0aGF0IHJlZ2lvbiBoYXMgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0MDo1MS4xMjM4MzI2NzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQwOjUxLjEyMzk0MDI0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY0Mjk0MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRFAgU29ja2V0cyBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGNpcmNsZSBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQveGRwL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgYFhEUF9TT0NLRVRTYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gUmlnaHQsIGl0IGRlcGVuZHMgb24gYEJQRl9TWVNDQUxMYCwgYW5kIGl0J3MgYSBib29sZWFuLCBhcyBleHBlY3RlZC4gR29vZCwgZ29vZC5cblxuTm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkIGluIHRoZSBBRl9YRFAgcGF0aC4gTGV0J3MgdHJhY2UgdGhlIHJlbGV2YW50IGVudHJ5cG9pbnRzIGFuZCBmdW5jdGlvbnMgaW4gYG5ldC94ZHAveHNrLmNgIHRoYXQgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50cy4gVGhlIG9uZXMgdGhhdCBpbW1lZGlhdGVseSBjb21lIHRvIG1pbmQgYXJlOiBgeHNrX3NlbmRtc2dgIChvciBwb3NzaWJseSBgX194c2tfc2VuZG1zZ2ApLCBgeHNrX3BvbGxgLCBgeHNrX2JpbmRgLCBgeHNrX3NldHNvY2tvcHRgLCBgeHNrX21tYXBgLCBgeHNrX2NyZWF0ZWAsIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAuXG5cblRoZSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgd2hldGhlciB0aG9zZSBmdW5jdGlvbnMsIGxpa2UgYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYW5kIGB4c2tfYmluZGAsIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBvciBub3QuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRldGFpbCBmb3IgdW5kZXJzdGFuZGluZyB0aGVpciBzY29wZSBhbmQgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUzMywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjE4Ljc2Njg4MzQ3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NTc2MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTM1Nj1zdGF0aWMgaW50IHhza19jaGVja19jb21tb24oc3RydWN0IHhkcF9zb2NrICp4cylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM2NS1cXG5uZXQveGRwL3hzay5jOjEzNjY6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MDEtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC94ZHAveHNrLmM6MTQwMjpcXHRyZXQgPSBfX3hza19zZW5kbXNnKHNvY2ssIG0sIHRvdGFsX2xlbik7XFxubmV0L3hkcC94c2suYy0xNDAzLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L3hkcC94c2suYz0yMTYxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHhza19wcm90b19vcHMgPSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxNzUtXFx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxcbm5ldC94ZHAveHNrLmM6MjE3NjpcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxubmV0L3hkcC94c2suYy0yMTc3LVxcdC5yZWN2bXNnXFx0PSB4c2tfcmVjdm1zZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MTkuMTc0NDY2NzMyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDkwNTg2MzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgWFNLIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYG5ldC94ZHAveHNrLmNgIGZpbGUuIEkgc2VlIHRoZSBjb3JlIFhTSyBmdW5jdGlvbiBjYWxsczogYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19tbWFwYCwgYHhza19zZXRzb2Nrb3B0YCwgYW5kIGB4c2tfZGVzdHJ1Y3Rfc2tiYCBhcmUgYWxsIGRlZmluZWQgaGVyZS4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGB4c2tfZGVzdHJ1Y3Rfc2tiYCByaWdodCBub3c7IGl0J3MgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBTS0IgbGlmZWN5Y2xlLiBHb29kLCBpdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBjYWxsYWJsZSBmcm9tIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZmlsZS4gVGhhdCdzIHdoYXQgSSBleHBlY3RlZCwgZ2l2ZW4gaXRzIG5hbWUuIE5vdywgbGV0IG1lIHF1aWNrbHkgZ2xhbmNlIGJhY2sgYXQgdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIGtleSBmdW5jdGlvbnMuIEkgd2FudCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoaXMgWFNLIGNvbXBvbmVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzQsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MzIuNjY1MDU1NDA2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMjUzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKC4qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTQ5PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeHNrX3R4X2dlbmVyaWNfY2FjaGU7XFxubmV0L3hkcC94c2suYy01MC1cXG5uZXQveGRwL3hzay5jOjUxOnZvaWQgeHNrX3NldF9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTUyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTgtfVxcbm5ldC94ZHAveHNrLmM6NTk6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTYwLVxcbm5ldC94ZHAveHNrLmM6NjE6dm9pZCB4c2tfc2V0X3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtNjIte1xcbi0tXFxubmV0L3hkcC94c2suYy03NS19XFxubmV0L3hkcC94c2suYzo3NjpFWFBPUlRfU1lNQk9MKHhza19zZXRfdHhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtNzctXFxubmV0L3hkcC94c2suYzo3ODp2b2lkIHhza19jbGVhcl9yeF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTc5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODUtfVxcbm5ldC94ZHAveHNrLmM6ODY6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfcnhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtODctXFxubmV0L3hkcC94c2suYzo4ODp2b2lkIHhza19jbGVhcl90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTg5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTAyLX1cXG5uZXQveGRwL3hzay5jOjEwMzpFWFBPUlRfU1lNQk9MKHhza19jbGVhcl90eF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMDQtXFxubmV0L3hkcC94c2suYzoxMDU6Ym9vbCB4c2tfdXNlc19uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTEwNi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEwOC19XFxubmV0L3hkcC94c2suYzoxMDk6RVhQT1JUX1NZTUJPTCh4c2tfdXNlc19uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy0xMTAtXFxubmV0L3hkcC94c2suYz0xMTE9c3RydWN0IHhza19idWZmX3Bvb2wgKnhza19nZXRfcG9vbF9mcm9tX3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hkcC94c2suYy0xMjAtfVxcbm5ldC94ZHAveHNrLmM6MTIxOkVYUE9SVF9TWU1CT0woeHNrX2dldF9wb29sX2Zyb21fcWlkKTtcXG5uZXQveGRwL3hzay5jLTEyMi1cXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXFxubmV0L3hkcC94c2suYy0xMjQte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzAtXFxubmV0L3hkcC94c2suYzoxMzE6dm9pZCB4c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTMyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjA4PXN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOC1cXG5uZXQveGRwL3hzay5jOjIxOTpzdGF0aWMgaW50IHhza19yY3ZfemMoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yMjAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yNTktXFxubmV0L3hkcC94c2suYzoyNjA6c3RhdGljIHZvaWQgKnhza19jb3B5X3hkcF9zdGFydChzdHJ1Y3QgeGRwX2J1ZmYgKmZyb20pXFxubmV0L3hkcC94c2suYy0yNjEte1xcbi0tXFxubmV0L3hkcC94c2suYz0yNjg9c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxcbi0tXFxubmV0L3hkcC94c2suYy0yOTUtXFxubmV0L3hkcC94c2suYzoyOTY6c3RhdGljIGludCBfX3hza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy0yOTcte1xcbi0tXFxubmV0L3hkcC94c2suYy0zODgtXFxubmV0L3hkcC94c2suYzozODk6c3RhdGljIGJvb2wgeHNrX3R4X3dyaXRlYWJsZShzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMzkwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzk2LVxcbm5ldC94ZHAveHNrLmM6Mzk3OnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQwMy1cXG5uZXQveGRwL3hzay5jOjQwNDpzdGF0aWMgYm9vbCB4c2tfaXNfYm91bmQoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTQwNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTQxND1zdGF0aWMgYm9vbCB4c2tfZGV2X3F1ZXVlX3ZhbGlkKGNvbnN0IHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYy00NTMtXFxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00NTUte1xcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTUxMy1cXG5uZXQveGRwL3hzay5jOjUxNDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNTE1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTIzLVxcbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MjUte1xcbi0tXFxubmV0L3hkcC94c2suYy01NDQtfVxcbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU1NS19XFxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XFxubmV0L3hkcC94c2suYy01NTctXFxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxubmV0L3hkcC94c2suYy01NTkte1xcbi0tXFxubmV0L3hkcC94c2suYy02MDMtfVxcbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy02MDUtXFxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy02MDcte1xcbi0tXFxubmV0L3hkcC94c2suYz02Njg9c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcXG5uZXQveGRwL3hzay5jOjY2OTp4c2tfdHhfcGVla19yZWxlYXNlX3NoYXJlZF9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2Rlc2NzKVxcbm5ldC94ZHAveHNrLmMtNjcwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzQzLVxcbm5ldC94ZHAveHNrLmM6NzQ0OnUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9wa3RzKVxcbm5ldC94ZHAveHNrLmMtNzQ1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzkwLX1cXG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XFxubmV0L3hkcC94c2suYy03OTItXFxubmV0L3hkcC94c2suYzo3OTM6c3RhdGljIGludCB4c2tfd2FrZXVwKHN0cnVjdCB4ZHBfc29jayAqeHMsIHU4IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtNzk0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzk5LVxcbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxcbm5ldC94ZHAveHNrLmMtODAxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODEwLVxcbm5ldC94ZHAveHNrLmM6ODExOnN0YXRpYyBib29sIHhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MTIte1xcbi0tXFxubmV0L3hkcC94c2suYy04MTUtXFxubmV0L3hkcC94c2suYzo4MTY6c3RhdGljIHU2NCB4c2tfc2tiX2Rlc3RydWN0b3JfZ2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgyMC1cXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXFxubmV0L3hkcC94c2suYy04MjIte1xcbi0tXFxubmV0L3hkcC94c2suYy04MzMtXFxubmV0L3hkcC94c2suYzo4MzQ6c3RhdGljIHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODM1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODQ2LVxcbm5ldC94ZHAveHNrLmM6ODQ3OnN0YXRpYyBpbnQgeHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU2NCBhZGRyKVxcbm5ldC94ZHAveHNrLmMtODQ4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODU4LVxcbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg2MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg2OC1cXG5uZXQveGRwL3hzay5jOjg2OTpzdGF0aWMgdTMyIHhza19nZXRfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTg3MC17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkxMT1zdGF0aWMgdm9pZCB4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTIzLVxcbm5ldC94ZHAveHNrLmM6OTI0OnN0YXRpYyB2b2lkIHhza19jcV9jYW5jZWxfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbilcXG5uZXQveGRwL3hzay5jLTkyNS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTkzMT1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbm5ldC94ZHAveHNrLmM6OTMyOnZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTQ1PXN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTYyLVxcbm5ldC94ZHAveHNrLmM6OTYzOnN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTY0LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTgwLVxcbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtOTgyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTIxNi1cXG5uZXQveGRwL3hzay5jOjEyMTc6c3RhdGljIGludCBfX3hza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTIxOC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzMzEtXFxubmV0L3hkcC94c2suYzoxMzMyOnN0YXRpYyBpbnQgeHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzMzLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM0NC1cXG5uZXQveGRwL3hzay5jOjEzNDU6c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3hkcC94c2suYy0xMzQ2LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM1NS1cXG5uZXQveGRwL3hzay5jOjEzNTY6c3RhdGljIGludCB4c2tfY2hlY2tfY29tbW9uKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xMzU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM2NS1cXG5uZXQveGRwL3hzay5jOjEzNjY6c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXFxubmV0L3hkcC94c2suYy0xMzY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MDctXFxubmV0L3hkcC94c2suYzoxNDA4OnN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDA5LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQzMy1cXG5uZXQveGRwL3hzay5jOjE0MzQ6c3RhdGljIGludCB4c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXFxubmV0L3hkcC94c2suYy0xNDM1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTQ3OD1zdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTUtXFxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTUxMD1zdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUyOS1cXG5uZXQveGRwL3hzay5jOjE1MzA6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE1MzEte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNTU1LVxcbm5ldC94ZHAveHNrLmM6MTU1NjpzdGF0aWMgaW50IHhza19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3hkcC94c2suYy0xNTU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU5My1cXG5uZXQveGRwL3hzay5jOjE1OTQ6c3RhdGljIHN0cnVjdCBzb2NrZXQgKnhza19sb29rdXBfeHNrX2Zyb21fZmQoaW50IGZkKVxcbm5ldC94ZHAveHNrLmMtMTU5NS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE2MTAtXFxubmV0L3hkcC94c2suYzoxNjExOnN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTE2MTIte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNjE1LVxcbm5ldC94ZHAveHNrLmM6MTYxNjpzdGF0aWMgaW50IHhza19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLCBpbnQgYWRkcl9sZW4pXFxubmV0L3hkcC94c2suYy0xNjE3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTgxND1zdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MzYtXFxubmV0L3hkcC94c2suYzoxOTM3OnN0YXRpYyB2b2lkIHhza19lbnRlcl9yeHR4X29mZnNldHMoc3RydWN0IHhkcF9yaW5nX29mZnNldF92MSAqcmluZylcXG5uZXQveGRwL3hzay5jLTE5Mzgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xOTQzLVxcbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTQ1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjE2MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMTgwLVxcbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jPTIyNDU9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ4LVxcbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNTAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjU1LVxcbm5ldC94ZHAveHNrLmM6MjI1NjpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MjI2MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhza19uZXRfb3BzID0ge1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjY1LVxcbm5ldC94ZHAveHNrLmM6MjI2NjpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxcbm5ldC94ZHAveHNrLmMtMjI2Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIzMDctXFxubmV0L3hkcC94c2suYzoyMzA4OmZzX2luaXRjYWxsKHhza19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6MzIuNzEzNjY0MzkzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NjQ1MDQ4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgVGhpcyBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjb2RlIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBpbnZvbHZlZCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbnMuIFRoZSBjcml0aWNhbCBzeW1ib2xzIHRoYXQgbWF0dGVyIGFyZSBgeHNrX3NlbmRtc2dgLCBgeHNrX2Rlc3RydWN0X3NrYmAsIGB4c2tfZ2VuZXJpY19yY3ZgLCBgeHNrX2JpbmRgLCBhbmQgYHhza19zZXRzb2Nrb3B0YCAob3IgYHhza19wb2xsYCkuIEkgY2FuIGRlZmluaXRlbHkgc2VlIGhvdyB0aGVzZSBpbnRlcmFjdC4gVGhlbiwgSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgIGVuYWJsZWQuIFRoZXNlIGFyZSB0aGUgZm91bmRhdGlvbnMgSSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBmdXp6aW5nIHNldHVwLlxuXG5Ob3csIGxldCBtZSBhbmFseXplIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gbG9naWMsIHNwZWNpZmljYWxseSB0aGUgZ2VuZXJpYyBjb3B5IG1vZGUsIHdoZW4gU0tCcyBhcmUgcmVzZXQuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIGNoYW5nZXMgdG8gY29yZSBBRl9YRFAgc29ja2V0IHNlbmQgYW5kIHJlY2VpdmUgcGF0aHMuIFRoYXQgbWFrZXMgaXQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgaWRlYWwgZm9yIHRlc3RpbmcuIFRoYXTigJlzIGEgZ29vZCBzaWduLCBhbmQgaXQgbWVhbnMgdGhlIGVmZm9ydCBpcyB3b3J0aCB0aGUgcmV0dXJuLlxuXG5Ob3csIEnigJltIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gSSd2ZSB2ZXJpZmllZCB0aGUgcmVxdWlyZWQgY29uZmlncywgaXNvbGF0ZWQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgYW5kIHRoZSBwYXRjaCBzZWVtcyB0byBtb2RpZnkgdGVzdGFibGUgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZ2V0IHRoaXMgaW50byB0aGUgZnV6emluZyBwaXBlbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5MzMsIk91dHB1dFRva2VucyI6MTQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjU4LjM1ODcxNjgyNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzU0OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc2V0cyB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlciBvbiBTS0JzIGNyZWF0ZWQgZHVyaW5nIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IG1vZGUgKHhza19za2JfaW5pdF9taXNjKSwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGJlZm9yZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfc2VuZG1zZ1wiLFxuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiLFxuICAgIFwieHNrX2JpbmRcIixcbiAgICBcInhza19zZXRzb2Nrb3B0XCIsXG4gICAgXCJ4c2tfcG9sbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc2V0cyB0aGUgbmV0d29yayBoZWFkZXIgcG9pbnRlciBvbiBTS0JzIGNyZWF0ZWQgZHVyaW5nIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IG1vZGUgKHhza19za2JfaW5pdF9taXNjKSwgZW5zdXJpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIGJlZm9yZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aHMgd2hpY2ggYXJlIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6NTguNDM4MDg0ODlaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTA4NTc0NzAyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQxOjU4LjQzODczNDYyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTg1MDg1MDkyMzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MjkzOWU5MGExYjdhNWQ2YjQ3M2E3MDFkMjZiNjgyNDJkMzMyYjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDE5OjI5OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4rKysgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgKzk0Nyw4IEBAIHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuK1x0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4rXG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDE6NTguNDM4NzM1ODlaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcyMzk1NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgWFNLIENvZGUqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBjb250ZXh0IGFyb3VuZCBpdCwgc28gbXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZGlmZiBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AuIEkga25vdyB0aGF0J3MgdGhlIHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8gbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSA5NDcgaW4gYG5ldC94ZHAveHNrLmNgLiBJIGV4cGVjdCB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzIGFyZSwgYW5kIGl0J2xsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb21taXQncyBpbnRlbnQgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zLiBUaGF0J2xsIGJlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wcmVoZW5zaXZlIGV2YWx1YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA0LjE2MjY5Njk3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzMDpcXHRcXG4gOTMxOlxcdElORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuIDkzMjpcXHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTMzOlxcdHtcXG4gOTM0OlxcdFxcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cXHUwMDNleHNrX21ldGE7XFxuIDkzNTpcXHRcXG4gOTM2OlxcdFxcdGlmIChjb21wbC1cXHUwMDNldHhfdGltZXN0YW1wKSB7XFxuIDkzNzpcXHRcXHRcXHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cXG4gOTM4OlxcdFxcdFxcdCpjb21wbC1cXHUwMDNldHhfdGltZXN0YW1wID0ga3RpbWVfZ2V0X3RhaV9mYXN0X25zKCk7XFxuIDkzOTpcXHRcXHR9XFxuIDk0MDpcXHRcXG4gOTQxOlxcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cXHUwMDNlc2spLVxcdTAwM2Vwb29sLCBza2IpO1xcbiA5NDI6XFx0XFx0c29ja193ZnJlZShza2IpO1xcbiA5NDM6XFx0fVxcbiA5NDQ6XFx0XFxuIDk0NTpcXHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuIDk0NjpcXHRcXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbiA5NDc6XFx0e1xcbiA5NDg6XFx0XFx0aW50IGVycjtcXG4gOTQ5OlxcdFxcbiA5NTA6XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiA5NTM6XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuIDk1NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5NTU6XFx0XFxuIDk1NjpcXHRcXHRza2ItXFx1MDAzZWRldiA9IHhzLVxcdTAwM2VkZXY7XFxuIDk1NzpcXHRcXHRza2ItXFx1MDAzZXByaW9yaXR5ID0gUkVBRF9PTkNFKHhzLVxcdTAwM2Vzay5za19wcmlvcml0eSk7XFxuIDk1ODpcXHRcXHRza2ItXFx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX21hcmspO1xcbiA5NTk6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcXG4gOTYwOlxcdFxcdHJldHVybiAwO1xcbiA5NjE6XFx0fVxcbiA5NjI6XFx0XFxuIDk2MzpcXHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gOTY0OlxcdHtcXG4gOTY1OlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVxcdTAwM2Vzayk7XFxuIDk2NjpcXHRcXHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5Njc6XFx0XFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XFxuIDk2ODpcXHRcXG4gOTY5OlxcdFxcdGlmICh1bmxpa2VseSgheHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc2tiKSkpIHtcXG4gOTcwOlxcdFxcdFxcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXFx1MDAzZWRlc3RydWN0b3JfYXJnO1xcbiA5NzE6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKHhza190eF9nZW5lcmljX2NhY2hlLCB4c2tfYWRkcik7XFxuIDk3MjpcXHRcXHR9XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHNrYi1cXHUwMDNlZGVzdHJ1Y3RvciA9IHNvY2tfd2ZyZWU7XFxuIDk3NTpcXHRcXHR4c2tfY3FfY2FuY2VsX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcXG4gOTc2OlxcdFxcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXFxuIDk3NzpcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbiA5Nzg6XFx0XFx0eHMtXFx1MDAzZXNrYiA9IE5VTEw7XFxuIDk3OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA0LjE2Mjg2MTU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNTQ5ODk4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBoYXZpbmcgdGhlc2UgdGhvdWdodHMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYU0sgU0tCIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IFhEUCBhbmQgc3BlY2lmaWNhbGx5IHRoZSBYU0sgcGFydCBvZiBpdC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhbiBTS0Igd2l0aGluIHRoaXMgY29udGV4dC4gSSdtIGZvY3VzaW5nIG9uIGB4c2tfc2tiX2luaXRfbWlzY2AgaW4gYG5ldC94ZHAveHNrLmNgIGJlY2F1c2UgaXQncyBhIGtleSBmdW5jdGlvbiBpbiBnZXR0aW5nIHRob3NlIFNLQnMgc2V0IHVwLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgU0tCcyBhcmUgaW5pdGlhbGx5IGNvbnN0cnVjdGVkLCB3aGF0J3MgcHV0IGludG8gdGhlbSwgYW5kIGhvdyB0aGV5J3JlIHN1YnNlcXVlbnRseSB1c2VkIHdpdGhpbiB0aGUgWFNLIGZyYW1ld29yay4gTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3csIHVuZGVyc3RhbmQgYW55IGVkZ2UgY2FzZXMsIGFuZCBwb3NzaWJseSBldmVuIGlkZW50aWZ5IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA2LjUxNzg1NDQ4MloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI2NTYxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC94c2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTkzMj12b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTQ0LVxcbm5ldC94ZHAveHNrLmM6OTQ1OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTk0Ni1cXHRcXHRcXHQgICAgIHU2NCBhZGRyKVxcbi0tXFxubmV0L3hkcC94c2suYz0xMTExPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqeHNrX2J1aWxkX3NrYihzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMTg2LVxcdGlmICgheHMtXFx1MDAzZXNrYikge1xcbm5ldC94ZHAveHNrLmM6MTE4NzpcXHRcXHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVxcdTAwM2VhZGRyKTtcXG5uZXQveGRwL3hzay5jLTExODgtXFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjA2LjU3MDUxNzcwOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTE2NzQ2MjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCByZW5kZXJlZCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBYRFAgU29ja2V0IENvbnN0cnVjdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBkaWcgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyB0aGVzZSBYRFAgc29ja2V0cyBhY3R1YWxseSBidWlsZCB0aGVpciBTS0JzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgeHNrX2J1aWxkX3NrYmAsIGFuZCBvZiBjb3Vyc2UsIEkgbmVlZCB0byBzZWUgaG93IGl0J3MgY2FsbGVkIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLiBHb3R0YSBnZXQgYSBoYW5kbGUgb24gdGhlIGRhdGEgZmxvdyBhbmQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGluIGhvdyBpdCdzIGFsbCBwdXQgdG9nZXRoZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpa2VseSBoYXBwZW4sIHNvIGxldCdzIHN0YXJ0IGRpc3NlY3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0MjozNS43Mzc5ODM5OTlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMDA6XFx0XFx0fVxcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBsZW47XFxuMTEwMzpcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4xMTA0OlxcdFxcdHNrYi1cXHUwMDNldHJ1ZXNpemUgKz0gdHM7XFxuMTEwNTpcXHRcXG4xMTA2OlxcdFxcdHJlZmNvdW50X2FkZCh0cywgXFx1MDAyNnhzLVxcdTAwM2Vzay5za193bWVtX2FsbG9jKTtcXG4xMTA3OlxcdFxcbjExMDg6XFx0XFx0cmV0dXJuIHNrYjtcXG4xMTA5OlxcdH1cXG4xMTEwOlxcdFxcbjExMTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4xMTEzOlxcdHtcXG4xMTE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjExMTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVxcdTAwM2Vza2I7XFxuMTExNjpcXHRcXHRpbnQgZXJyO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG4xMTE5OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbjExMjA6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuMTEyMTpcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuMTEyMjpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjExMjM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTI0OlxcdFxcdFxcdH1cXG4xMTI1OlxcdFxcdH0gZWxzZSB7XFxuMTEyNjpcXHRcXHRcXHR1MzIgaHIsIHRyLCBsZW47XFxuMTEyNzpcXHRcXHRcXHR2b2lkICpidWZmZXI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdGJ1ZmZlciA9IHhza19idWZmX3Jhd19nZXRfZGF0YSh4cy1cXHUwMDNlcG9vbCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTEzMDpcXHRcXHRcXHRsZW4gPSBkZXNjLVxcdTAwM2VsZW47XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmICghc2tiKSB7XFxuMTEzMzpcXHRcXHRcXHRcXHRociA9IG1heChORVRfU0tCX1BBRCwgTDFfQ0FDSEVfQUxJR04oZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcXG4xMTM0OlxcdFxcdFxcdFxcdHRyID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuMTEzNTpcXHRcXHRcXHRcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFxcdTAwMjZ4cy1cXHUwMDNlc2ssIGhyICsgbGVuICsgdHIsIDEsIFxcdTAwMjZlcnIpO1xcbjExMzY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbjExMzc6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XFxuMTE0MDpcXHRcXHRcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG4xMTQxOlxcdFxcbjExNDI6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgWERQX1RYX01FVEFEQVRBKSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4c2tfc2tiX21ldGFkYXRhKHNrYiwgYnVmZmVyLCBkZXNjLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHhzLVxcdTAwM2Vwb29sLCBocik7XFxuMTE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE1MTpcXHRcXHRcXHRcXHR9XFxuMTE1MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjExNTM6XFx0XFx0XFx0XFx0aW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4xMTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xcbjExNTU6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTE1NjpcXHRcXHRcXHRcXHR1OCAqdmFkZHI7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XFxuMTE1OTpcXHRcXHRcXHRcXHRpZiAoIXhza19hZGRyKSB7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjE6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTYyOlxcdFxcdFxcdFxcdH1cXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXFx1MDAyNlxcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuMTE2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFxuMTE3MTpcXHRcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XFxuMTE3MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuMTE3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjExNzQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTc1OlxcdFxcdFxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMTE3ODpcXHRcXHRcXHRcXHRtZW1jcHkodmFkZHIsIGJ1ZmZlciwgbGVuKTtcXG4xMTc5OlxcdFxcdFxcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdFxcdFxcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XFxuMTE4MjpcXHRcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExODM6XFx0XFx0XFx0fVxcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG4xMTg3OlxcdFxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbjExODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuMTE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjExOTQ6XFx0XFxuMTE5NTpcXHRmcmVlX2VycjpcXG4xMTk2OlxcdFxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vza2IpXFxuMTE5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjM1LjczODI4Nzc0OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzgxMjA1NTI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCB3aHkgaXQncyBiZWVuIGludHJvZHVjZWQuIEZyb20gd2hhdCBJIGNhbiBnYXRoZXIsIGl0IGVzc2VudGlhbGx5IHNldHMgYHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlcmAgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWhlYWRgLiBNYWtlcyBzZW5zZS4gTm93LCB3aGVyZSBpcyB0aGlzIHVzZWQgYW5kIHdoeT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgZnVuY3Rpb25zIGxpa2UgYHNvY2tfYWxsb2Nfc2VuZF9za2JgIG9yIGB4c2tfYnVpbGRfc2tiX3plcm9jb3B5YCBkb24ndCBpbml0aWFsaXplIHRoaXMgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCwgb3IgbWF5YmUgdGhleSBkZWZhdWx0IGl0IHRvIHplcm8gKHdoaWNoIHBvaW50cyBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgc2tiLVx1MDAzZWhlYWRgIGJ1ZmZlcikuXG5cbkl0IHNlZW1zIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGZyb20gZHJpdmVycyB0byBwYWNrZXQgc2NoZWR1bGVycyBsaWtlIHFkaXNjIGFuZCBmdW5jdGlvbnMgbGlrZSBgZGV2X3F1ZXVlX3htaXRgIG9yIFhEUC9CUEYgcHJvZ3JhbXMsIGRlcGVuZCBvbiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBiZWluZyBjYWxsZWQsIG9yIG1vcmUgZ2VuZXJhbGx5IG9uIGBuZXR3b3JrX2hlYWRlcmAgaGF2aW5nIGEgdmFsaWQgcmVsYXRpdmUgb2Zmc2V0IHRvIGBza2ItXHUwMDNlZGF0YWAuIEkgYmV0IEknbGwgc2VlIHNvbWUgdXNhZ2UgaW4gYGRldl92YWxpZGF0ZV9oZWFkZXJgIG9yIHdpdGggcGFja2V0IHNvY2tldHMsIG9yIGR1cmluZyBjaGVja3MgdGhhdCB1c2UgYHNrYl9uZXR3b3JrX29mZnNldGAuXG5cblRvIGZ1bGx5IGdyYXNwIHRoZSBjb250ZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIHVzZSBgZ2l0IGJsYW1lYCBvciBgZ2l0IGxvZ2AgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2hhbmdlcyBvciByZWxhdGVkIGNvZGUuIEknbGwgYWxzbyBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcmAsIGFuZCBtYXliZSBgeHNrX3NrYl9pbml0X21pc2NgIG9yIHNpbWlsYXIgZnVuY3Rpb25zIHRvIHNlZSBpZiBhbnl0aGluZyBwb3BzIHVwIHdpdGhpbiB0aGUgbmV0L3hkcCBkaXJlY3Rvcmllcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByYXRpb25hbGUgYmVoaW5kIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHdoZXJlIGl0J3MgY3JpdGljYWxseSBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNzgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQxOTo0Mjo1My41NTAzNDUwMTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzU3ODQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfcmVzZXRfbmV0d29ya19oZWFkZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hkcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05NDU9c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbi0tXFxubmV0L3hkcC94c2suYy05NDktXFxubmV0L3hkcC94c2suYzo5NTA6XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxubmV0L3hkcC94c2suYy05NTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQyOjUzLjg5NzkzNDQ5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3Mjg1OTU2NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIGxpZmUgb2YgYW4gU0tCIOKAkyBzcGVjaWZpY2FsbHksIHRob3NlIGNyZWF0ZWQgd2l0aGluIHRoZSBgeHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24gb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB0cmFjZSBpdHMgbGlmZWN5Y2xlIGZyb20gaXRzIGNyZWF0aW9uIHBvaW50LiBXaGVyZSBkb2VzIGl0IGdvPyBXaGF0IGhhcHBlbnMgdG8gaXQ/IEknbGwgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciB0aGUgdXNhZ2Ugb2YgYHhza19idWlsZF9za2JgIHRvIGdldCBhIHNlbnNlIG9mIHdoZXJlIHRoZXNlIFNLQnMgYXJlIGluaXRpYWxseSBjb25zdHJ1Y3RlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gbWFwIHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBTS0IuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQzOjAxLjE4Mzg5NDExOFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NjY0MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTExMTgtXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMTE5OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTEyMC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyNjMtXFxubmV0L3hkcC94c2suYzoxMjY0OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyNjUtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDE5OjQzOjAxLjIyODY2NDg0NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk4MTg4ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFhEUCBUcmFuc21pc3Npb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBYRFAgZnJhbWVzIGFyZSBhY3R1YWxseSBzZW50IG91dCwgc3BlY2lmaWNhbGx5IHRocm91Z2ggdGhlIGBfX3hza19nZW5lcmljX3htaXRgIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBwcm9jZXNzIGFwcGVhcnMgdG8gYmU6IGB4c2tfYnVpbGRfc2tiYCBjb25zdHJ1Y3RzIGFuIGBza2JgIChzb2NrZXQgYnVmZmVyKSDigJMgdGhlIHdvcmtob3JzZSBkYXRhIHN0cnVjdHVyZSBmb3IgbmV0d29yayBwYWNrZXRzIGluIHRoZSBrZXJuZWwg4oCTIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIFhEUCBzb2NrZXQgZGVzY3JpcHRvcnMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGlzIGBza2JgIHRoZW4gZ2V0cyBwYXNzZWQgb24gZm9yIHRyYW5zbWlzc2lvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyB0cmFuc21pc3Npb24gaGFwcGVucywgc28gSSBoYXZlIHRvIGtlZXAgZGlnZ2luZy4gVGhlIGNvZGUgbWVudGlvbnMgdGhhdCB0aGlzIHRyYW5zbWlzc2lvbiBpcyBoYW5kbGVkIHZpYSBgZGV2X2RpcmVjdF94bWl0YCwgYF9fZGV2X2RpcmVjdF94bWl0YCwgb3IgcG90ZW50aWFsbHkgZXZlbiBgZGV2X3F1ZXVlX3htaXRgLiBTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgX194c2tfZ2VuZXJpY194bWl0YCB0byBnZXQgdGhlIGRldGFpbHMgb24gKndoaWNoKiB0cmFuc21pc3Npb24gZnVuY3Rpb24gaXMgYWN0dWFsbHkgZ2V0dGluZyBpbnZva2VkIHVuZGVyIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzLCBhbmQgd2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Nzg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDM6MjguMjEwNTU3NzA5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0XFxuMTI1NjpcXHRcXHRcXHRpZiAodW5saWtlbHkoeHMtXFx1MDAzZWRyYWluX2NvbnQpKSB7XFxuMTI1NzpcXHRcXHRcXHRcXHR4c2tfY3Ffc3VibWl0X2FkZHJfc2luZ2xlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCwgXFx1MDAyNmRlc2MpO1xcbjEyNTg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXR4LVxcdTAwM2VpbnZhbGlkX2Rlc2NzKys7XFxuMTI1OTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNjA6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKTtcXG4xMjYxOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNjI6XFx0XFx0XFx0fVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRcXHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcXHUwMDI2ZGVzYyk7XFxuMTI2NTpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMjY2OlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMjY3OlxcdFxcdFxcdFxcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcXG4xMjY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNjk6XFx0XFx0XFx0XFx0aWYgKHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpKVxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0eHMtXFx1MDAzZWRyYWluX2NvbnQgPSB0cnVlO1xcbjEyNzE6XFx0XFx0XFx0XFx0ZXJyID0gMDtcXG4xMjcyOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyNzM6XFx0XFx0XFx0fVxcbjEyNzQ6XFx0XFxuMTI3NTpcXHRcXHRcXHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cXHUwMDNldHgpO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpIHtcXG4xMjc4OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBza2I7XFxuMTI3OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMjgwOlxcdFxcdFxcdH1cXG4xMjgxOlxcdFxcbjEyODI6XFx0XFx0XFx0ZXJyID0gX19kZXZfZGlyZWN0X3htaXQoc2tiLCB4cy1cXHUwMDNlcXVldWVfaWQpO1xcbjEyODM6XFx0XFx0XFx0aWYgIChlcnIgPT0gTkVUREVWX1RYX0JVU1kpIHtcXG4xMjg0OlxcdFxcdFxcdFxcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xcbjEyODU6XFx0XFx0XFx0XFx0eHNrcV9jb25zX2NhbmNlbF9uKHhzLVxcdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcXG4xMjg2OlxcdFxcdFxcdFxcdHhza19jb25zdW1lX3NrYihza2IpO1xcbjEyODc6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjg4OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHQvKiBJZ25vcmUgTkVUX1hNSVRfQ04gYXMgcGFja2V0IG1pZ2h0IGhhdmUgYmVlbiBzZW50ICovXFxuMTI5MjpcXHRcXHRcXHRpZiAoZXJyID09IE5FVF9YTUlUX0RST1ApIHtcXG4xMjkzOlxcdFxcdFxcdFxcdC8qIFNLQiBjb21wbGV0ZWQgYnV0IG5vdCBzZW50ICovXFxuMTI5NDpcXHRcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTI5NTpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4xMjk2OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyOTc6XFx0XFx0XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDM6MjguMjEwNjgxMzE5WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1MzEzMTIwMDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2FmZXR5IG9mIGFuIFNLQiBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBzaW1wbGUgb25lLWxpbmVyLCBhZGRpbmcgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYC4gTXkgaW5pdGlhbCBndXQgcmVhY3Rpb24gaXMgdGhhdCB0aGlzICpzaG91bGQqIGJlIHNhZmUsIGJ1dCBsZXQncyBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3Qgb3BlbiBhbnkgZG9vcnMgZm9yIG1lbW9yeSBjb3JydXB0aW9uIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGV2YWx1YXRlIHRoZSBwb3RlbnRpYWwgcmlza3MuIERvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24ndCBhbGxvY2F0ZSBhbnl0aGluZyBuZXcgb24gaXRzIG93bi4gRG9lcyBpdCBwYXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlIHZpYSBmdW5jdGlvbnMgbGlrZSBgY29weV90b191c2VyYD8gTm8sIGl0J3Mgbm90IGRpcmVjdGx5IGRvaW5nIGFueSBvZiB0aGF0LiBEb2VzIGl0IGludHJvZHVjZSBuZXcgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEFuZCBmaW5hbGx5LCBkb2VzIGl0IGFsdGVyIGFueSBib3VuZHMgY2hlY2tzIG9yIHJlbGF0ZWQgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBuZXcgZnVuY3Rpb24gc2ltcGx5ICppbml0aWFsaXplcyogdGhlIGBuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0IG9mIHRoZSBgc2tiYCwgZW5zdXJpbmcgdGhhdCBpdCdzIHNldCB0byBhIHZhbGlkIHZhbHVlLCBub3QgbGVhdmluZyBpdCBhdCBhbiB1bmRlZmluZWQgc3RhdGUuIEluIGZhY3QsIGl0J3MgYWN0dWFsbHkgZG9pbmcgc29tZSBoZWxwZnVsIGluaXRpYWxpemF0aW9uLlxuXG5UaGlzIGFjdHVhbGx5IGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIEtNU0FOLiBUaGUgY2hlY2tzIHVzZWQgYnkgS0FTQU4gc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggdG8gaGFuZGxlIHRoaXMgcGF0Y2ggaWYgYW55dGhpbmcgd2VyZSB0byBnbyB3cm9uZy5cblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIGFkZGluZyBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBmb3IgdGhlIEFGX1hEUCB0cmFuc21pc3Npb24gcGF0aC4gSSB1bmRlcnN0YW5kIHRoYXQgdGhpcyBpcyBzdGFuZGFyZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgZm9yIG5ld2x5IGNyZWF0ZWQgU0tCcyBiZWZvcmUgdGhleSBhcmUgdHJhbnNtaXR0ZWQgdmlhIGBfX2Rldl9kaXJlY3RfeG1pdCgpYC4gU28sIEknbSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIGxlYWtzLCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgb3Iga2VybmVsLXRvLXVzZXIgaW5mbyBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgaGVyZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMTk6NDU6MDMuNTIzODA1OTQ1WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgdG8gcHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgbmV0d29yayBoZWFkZXIgb2Zmc2V0IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBza2IgaW4gdGhlIEFGX1hEUCBnZW5lcmljIHRyYW5zbWl0IHBhdGguIFRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIGZpZWxkcywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCB0byBwcm9wZXJseSBpbml0aWFsaXplIHRoZSBuZXR3b3JrIGhlYWRlciBvZmZzZXQgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHNrYiBpbiB0aGUgQUZfWERQIGdlbmVyaWMgdHJhbnNtaXQgcGF0aC4gVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgZmllbGRzLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgcGF0aHMuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowtwm4q[1] Phase: Succeeded StartedAt: 2026-09-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2] Phase: Succeeded StartedAt: 2026-09-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 19:45:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:14 +0000 UTC FinishedAt: 2026-09-01 19:45:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-workflowtwm4q/series-workflowtwm4q-convert-artifact-3355333304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:24 +0000 UTC FinishedAt: 2026-09-01 20:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:24 +0000 UTC FinishedAt: 2026-09-01 20:05:47 +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:*b40996c0-942f-45c0-921e-a2de58b2424c,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-workflowtwm4q/series-workflowtwm4q-convert-artifact-3355333304/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": "0b1fd824-0785-487e-b47b-02353c3d5bdd", "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-workflowtwm4q/series-workflowtwm4q-build-action-1445959790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 19:45:24 +0000 UTC FinishedAt: 2026-09-01 20:05:24 +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:*b40996c0-942f-45c0-921e-a2de58b2424c,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-workflowtwm4q/series-workflowtwm4q-convert-artifact-3355333304/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": "0b1fd824-0785-487e-b47b-02353c3d5bdd", "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-workflowtwm4q/series-workflowtwm4q-build-action-1445959790/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:47 +0000 UTC FinishedAt: 2026-09-01 20:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:47 +0000 UTC FinishedAt: 2026-09-01 20:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:47 +0000 UTC FinishedAt: 2026-09-01 20:05:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:47 +0000 UTC FinishedAt: 2026-09-01 20:05:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-workflowtwm4q/series-workflowtwm4q-convert-artifact-1866912543/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:57 +0000 UTC FinishedAt: 2026-09-01 20:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:05:57 +0000 UTC FinishedAt: 2026-09-01 20:07:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0b1fd824-0785-487e-b47b-02353c3d5bdd,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-workflowtwm4q/series-workflowtwm4q-build-action-1445959790/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-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:07:51 +0000 UTC FinishedAt: 2026-09-01 20:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:07:51 +0000 UTC FinishedAt: 2026-09-01 20:07:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:07:51 +0000 UTC FinishedAt: 2026-09-01 20:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:07:51 +0000 UTC FinishedAt: 2026-09-01 20:28:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b40996c0-942f-45c0-921e-a2de58b2424c,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-workflowtwm4q/series-workflowtwm4q-convert-artifact-1866912543/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": "e8c2e0ad-4bb5-4079-a051-4bdfaf54c24b", "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-workflowtwm4q/series-workflowtwm4q-build-action-3562186163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:07:51 +0000 UTC FinishedAt: 2026-09-01 20:28:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b40996c0-942f-45c0-921e-a2de58b2424c,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-workflowtwm4q/series-workflowtwm4q-convert-artifact-1866912543/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": "e8c2e0ad-4bb5-4079-a051-4bdfaf54c24b", "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-workflowtwm4q/series-workflowtwm4q-build-action-3562186163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:28:15 +0000 UTC FinishedAt: 2026-09-01 20:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:28:15 +0000 UTC FinishedAt: 2026-09-01 20:28:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:28:15 +0000 UTC FinishedAt: 2026-09-01 20:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:28:15 +0000 UTC FinishedAt: 2026-09-01 20:29:50 +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:*e8c2e0ad-4bb5-4079-a051-4bdfaf54c24b,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-workflowtwm4q/series-workflowtwm4q-build-action-3562186163/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-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"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:*0b1fd824-0785-487e-b47b-02353c3d5bdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8c2e0ad-4bb5-4079-a051-4bdfaf54c24b,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-workflowtwm4q/series-workflowtwm4q-build-action-1445959790/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-workflowtwm4q/series-workflowtwm4q-build-action-3562186163/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 20:30:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 20:30:06 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"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-workflowtwm4q/series-workflowtwm4q-convert-artifact-679040568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 20:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 20:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:01 +0000 UTC FinishedAt: 2026-09-01 20:30:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:11 +0000 UTC FinishedAt: 2026-09-01 23:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtwm4q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_sendmsg","xsk_destruct_skb","xsk_bind","xsk_setsockopt","xsk_poll"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1d2929d0850fff683b8aff051275945e65f082c8","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"a45a0cc4-0774-4485-bed6-acba6763e760","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-01 20:30:11 +0000 UTC FinishedAt: 2026-09-01 23:34:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0b1fd824-0785-487e-b47b-02353c3d5bdd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8c2e0ad-4bb5-4079-a051-4bdfaf54c24b,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-workflowtwm4q/series-workflowtwm4q-build-action-1445959790/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-workflowtwm4q/series-workflowtwm4q-build-action-3562186163/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-workflowtwm4q/series-workflowtwm4q-convert-artifact-679040568/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,}